84 FLEXSPI_IPRXFCR = FLEXSPI_IPRXFCR_CLRIPRXF;
86 FLEXSPI_IPCR1 = FLEXSPI_IPCR1_ISEQID(15) | FLEXSPI_IPCR1_IDATSZ(1);
87 FLEXSPI_IPCMD = FLEXSPI_IPCMD_TRG;
88 while (!(FLEXSPI_INTR & FLEXSPI_INTR_IPCMDDONE)) {;}
89 FLEXSPI_INTR = FLEXSPI_INTR_IPCMDDONE;
91 status = *(uint8_t *)&FLEXSPI_RFDR0;
93 FLEXSPI_MCR0 |= FLEXSPI_MCR0_SWRESET;
94 while (FLEXSPI_MCR0 & FLEXSPI_MCR0_SWRESET) ;
101 FLEXSPI_LUTKEY = FLEXSPI_LUTKEY_VALUE;
102 FLEXSPI_LUTCR = FLEXSPI_LUTCR_UNLOCK;
108 FLEXSPI_IPCR1 = FLEXSPI_IPCR1_ISEQID(15);
109 FLEXSPI_IPCMD = FLEXSPI_IPCMD_TRG;
110 arm_dcache_delete(addr, len);
111 while (!(FLEXSPI_INTR & FLEXSPI_INTR_IPCMDDONE)) ;
112 FLEXSPI_INTR = FLEXSPI_INTR_IPCMDDONE;
115 FLEXSPI_IPTXFCR = FLEXSPI_IPTXFCR_CLRIPTXF;
116 FLEXSPI_IPCR0 = (uint32_t)addr & 0x00FFFFFF;
117 FLEXSPI_IPCR1 = FLEXSPI_IPCR1_ISEQID(15) | FLEXSPI_IPCR1_IDATSZ(len);
118 FLEXSPI_IPCMD = FLEXSPI_IPCMD_TRG;
119 const uint8_t *src = (
const uint8_t *)data;
121 while (!((n = FLEXSPI_INTR) & FLEXSPI_INTR_IPCMDDONE)) {
122 if (n & FLEXSPI_INTR_IPTXWE) {
123 uint32_t wrlen = len;
124 if (wrlen > 8) wrlen = 8;
126 memcpy((
void *)&FLEXSPI_TFDR0, src, wrlen);
130 FLEXSPI_INTR = FLEXSPI_INTR_IPTXWE;
133 FLEXSPI_INTR = FLEXSPI_INTR_IPCMDDONE | FLEXSPI_INTR_IPTXWE;
141 FLEXSPI_LUTKEY = FLEXSPI_LUTKEY_VALUE;
142 FLEXSPI_LUTCR = FLEXSPI_LUTCR_UNLOCK;
148 FLEXSPI_IPCR1 = FLEXSPI_IPCR1_ISEQID(15);
149 FLEXSPI_IPCMD = FLEXSPI_IPCMD_TRG;
150 arm_dcache_delete((
void *)((uint32_t)addr & 0xFFFFF000), 4096);
151 while (!(FLEXSPI_INTR & FLEXSPI_INTR_IPCMDDONE)) ;
152 FLEXSPI_INTR = FLEXSPI_INTR_IPCMDDONE;
154 FLEXSPI_IPCR0 = (uint32_t)addr & 0x00FFF000;
155 FLEXSPI_IPCR1 = FLEXSPI_IPCR1_ISEQID(15);
156 FLEXSPI_IPCMD = FLEXSPI_IPCMD_TRG;
157 while (!(FLEXSPI_INTR & FLEXSPI_INTR_IPCMDDONE)) ;
158 FLEXSPI_INTR = FLEXSPI_INTR_IPCMDDONE;
165 FLEXSPI_LUTKEY = FLEXSPI_LUTKEY_VALUE;
166 FLEXSPI_LUTCR = FLEXSPI_LUTCR_UNLOCK;
172 FLEXSPI_IPCR1 = FLEXSPI_IPCR1_ISEQID(15);
173 FLEXSPI_IPCMD = FLEXSPI_IPCMD_TRG;
174 arm_dcache_delete((
void *)((uint32_t)addr & 0xFFFF8000), 32768);
175 while (!(FLEXSPI_INTR & FLEXSPI_INTR_IPCMDDONE)) ;
176 FLEXSPI_INTR = FLEXSPI_INTR_IPCMDDONE;
178 FLEXSPI_IPCR0 = (uint32_t)addr & 0x00FF8000;
179 FLEXSPI_IPCR1 = FLEXSPI_IPCR1_ISEQID(15);
180 FLEXSPI_IPCMD = FLEXSPI_IPCMD_TRG;
181 while (!(FLEXSPI_INTR & FLEXSPI_INTR_IPCMDDONE)) ;
182 FLEXSPI_INTR = FLEXSPI_INTR_IPCMDDONE;
189 FLEXSPI_LUTKEY = FLEXSPI_LUTKEY_VALUE;
190 FLEXSPI_LUTCR = FLEXSPI_LUTCR_UNLOCK;
196 FLEXSPI_IPCR1 = FLEXSPI_IPCR1_ISEQID(15);
197 FLEXSPI_IPCMD = FLEXSPI_IPCMD_TRG;
198 arm_dcache_delete((
void *)((uint32_t)addr & 0xFFFF0000), 65536);
199 while (!(FLEXSPI_INTR & FLEXSPI_INTR_IPCMDDONE)) ;
200 FLEXSPI_INTR = FLEXSPI_INTR_IPCMDDONE;
202 FLEXSPI_IPCR0 = (uint32_t)addr & 0x00FF0000;
203 FLEXSPI_IPCR1 = FLEXSPI_IPCR1_ISEQID(15);
204 FLEXSPI_IPCMD = FLEXSPI_IPCMD_TRG;
205 while (!(FLEXSPI_INTR & FLEXSPI_INTR_IPCMDDONE)) ;
206 FLEXSPI_INTR = FLEXSPI_INTR_IPCMDDONE;