1 // Copyright 2020 Espressif Systems (Shanghai) PTE LTD 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 #ifndef _SOC_SPI_MEM_STRUCT_H_ 15 #define _SOC_SPI_MEM_STRUCT_H_ 16 #ifdef __cplusplus 17 extern "C" { 18 #endif 19 20 typedef volatile struct spi_mem_dev_s { 21 union { 22 struct { 23 uint32_t mst_st: 4; /*The current status of SPI1 master FSM.*/ 24 uint32_t st: 4; /*The current status of SPI1 slave FSM: mspi_st. 0: idle state 1: preparation state 2: send command state 3: send address state 4: wait state 5: read data state 6:write data state 7: done state 8: read data end state.*/ 25 uint32_t reserved8: 9; /*reserved*/ 26 uint32_t flash_pe: 1; /*In user mode it is set to indicate that program/erase operation will be triggered. The bit is combined with spi_mem_usr bit. The bit will be cleared once the operation done.1: enable 0: disable.*/ 27 uint32_t usr: 1; /*User define command enable. An operation will be triggered when the bit is set. The bit will be cleared once the operation done.1: enable 0: disable.*/ 28 uint32_t flash_hpm: 1; /*Drive Flash into high performance mode. The bit will be cleared once the operation done.1: enable 0: disable.*/ 29 uint32_t flash_res: 1; /*This bit combined with reg_resandres bit releases Flash from the power-down state or high performance mode and obtains the devices ID. The bit will be cleared once the operation done.1: enable 0: disable.*/ 30 uint32_t flash_dp: 1; /*Drive Flash into power down. An operation will be triggered when the bit is set. The bit will be cleared once the operation done.1: enable 0: disable.*/ 31 uint32_t flash_ce: 1; /*Chip erase enable. Chip erase operation will be triggered when the bit is set. The bit will be cleared once the operation done.1: enable 0: disable.*/ 32 uint32_t flash_be: 1; /*Block erase enable(32KB) . Block erase operation will be triggered when the bit is set. The bit will be cleared once the operation done.1: enable 0: disable.*/ 33 uint32_t flash_se: 1; /*Sector erase enable(4KB). Sector erase operation will be triggered when the bit is set. The bit will be cleared once the operation done.1: enable 0: disable.*/ 34 uint32_t flash_pp: 1; /*Page program enable(1 byte ~256 bytes data to be programmed). Page program operation will be triggered when the bit is set. The bit will be cleared once the operation done .1: enable 0: disable.*/ 35 uint32_t flash_wrsr: 1; /*Write status register enable. Write status operation will be triggered when the bit is set. The bit will be cleared once the operation done.1: enable 0: disable.*/ 36 uint32_t flash_rdsr: 1; /*Read status register-1. Read status operation will be triggered when the bit is set. The bit will be cleared once the operation done.1: enable 0: disable.*/ 37 uint32_t flash_rdid: 1; /*Read JEDEC ID . Read ID command will be sent when the bit is set. The bit will be cleared once the operation done. 1: enable 0: disable.*/ 38 uint32_t flash_wrdi: 1; /*Write flash disable. Write disable command will be sent when the bit is set. The bit will be cleared once the operation done. 1: enable 0: disable.*/ 39 uint32_t flash_wren: 1; /*Write flash enable. Write enable command will be sent when the bit is set. The bit will be cleared once the operation done. 1: enable 0: disable.*/ 40 uint32_t flash_read: 1; /*Read flash enable. Read flash operation will be triggered when the bit is set. The bit will be cleared once the operation done. 1: enable 0: disable.*/ 41 }; 42 uint32_t val; 43 } cmd; 44 uint32_t addr; /*SPI1 address register*/ 45 union { 46 struct { 47 uint32_t reserved0: 3; /*reserved*/ 48 uint32_t fdummy_out: 1; /*In the dummy phase the signal level of spi is output by the spi controller.*/ 49 uint32_t reserved4: 3; /*reserved*/ 50 uint32_t fcmd_dual: 1; /*Apply 2 signals during command phase 1:enable 0: disable*/ 51 uint32_t fcmd_quad: 1; /*Apply 4 signals during command phase 1:enable 0: disable*/ 52 uint32_t reserved9: 1; /*reserved*/ 53 uint32_t fcs_crc_en: 1; /*For SPI1 initialize crc32 module before writing encrypted data to flash. Active low.*/ 54 uint32_t tx_crc_en: 1; /*For SPI1 enable crc32 when writing encrypted data to flash. 1: enable 0:disable*/ 55 uint32_t reserved12: 1; /*reserved*/ 56 uint32_t fastrd_mode: 1; /*This bit enable the bits: spi_mem_fread_qio spi_mem_fread_dio spi_mem_fread_qout and spi_mem_fread_dout. 1: enable 0: disable.*/ 57 uint32_t fread_dual: 1; /*In the read operations read-data phase apply 2 signals. 1: enable 0: disable.*/ 58 uint32_t resandres: 1; /*The Device ID is read out to SPI_MEM_RD_STATUS register this bit combine with spi_mem_flash_res bit. 1: enable 0: disable.*/ 59 uint32_t reserved16: 2; /*reserved*/ 60 uint32_t q_pol: 1; /*The bit is used to set MISO line polarity 1: high 0 low*/ 61 uint32_t d_pol: 1; /*The bit is used to set MOSI line polarity 1: high 0 low*/ 62 uint32_t fread_quad: 1; /*In the read operations read-data phase apply 4 signals. 1: enable 0: disable.*/ 63 uint32_t wp: 1; /*Write protect signal output when SPI is idle. 1: output high 0: output low.*/ 64 uint32_t wrsr_2b: 1; /*two bytes data will be written to status register when it is set. 1: enable 0: disable.*/ 65 uint32_t fread_dio: 1; /*In the read operations address phase and read-data phase apply 2 signals. 1: enable 0: disable.*/ 66 uint32_t fread_qio: 1; /*In the read operations address phase and read-data phase apply 4 signals. 1: enable 0: disable.*/ 67 uint32_t reserved25: 7; /*reserved*/ 68 }; 69 uint32_t val; 70 } ctrl; 71 union { 72 struct { 73 uint32_t clk_mode: 2; /*SPI clock mode bits. 0: SPI clock is off when CS inactive 1: SPI clock is delayed one cycle after CS inactive 2: SPI clock is delayed two cycles after CS inactive 3: SPI clock is alwasy on.*/ 74 uint32_t cs_hold_dly_res: 10; /*After RES/DP/HPM command is sent SPI1 waits (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 512) SPI_CLK cycles.*/ 75 uint32_t reserved2: 18; /*reserved*/ 76 uint32_t rxfifo_rst: 1; /*SPI0 RX FIFO reset signal.*/ 77 uint32_t rxfifo_wfull_err: 1; /*1: SPI0 RX FIFO write full error Cache/EDMA do not read all the data out. 0: Not error.*/ 78 }; 79 uint32_t val; 80 } ctrl1; 81 union { 82 struct { 83 uint32_t cs_setup_time: 5; /*(cycles-1) of prepare phase by spi clock this bits are combined with spi_mem_cs_setup bit.*/ 84 uint32_t cs_hold_time: 5; /*Spi cs signal is delayed to inactive by spi clock this bits are combined with spi_mem_cs_hold bit.*/ 85 uint32_t reserved10: 15; /*reserved*/ 86 uint32_t cs_hold_delay: 6; /*These bits are used to set the minimum CS high time tSHSL between SPI burst transfer when accesses to flash. tSHSL is (SPI_MEM_CS_HOLD_DELAY[5:0] + 1) MSPI core clock cycles.*/ 87 uint32_t sync_reset: 1; /*The FSM will be reset.*/ 88 }; 89 uint32_t val; 90 } ctrl2; 91 union { 92 struct { 93 uint32_t clkcnt_l: 8; /*In the master mode it must be equal to spi_mem_clkcnt_N.*/ 94 uint32_t clkcnt_h: 8; /*In the master mode it must be floor((spi_mem_clkcnt_N+1)/2-1).*/ 95 uint32_t clkcnt_n: 8; /*In the master mode it is the divider of spi_mem_clk. So spi_mem_clk frequency is system/(spi_mem_clkcnt_N+1)*/ 96 uint32_t reserved24: 7; /*reserved*/ 97 uint32_t clk_equ_sysclk: 1; /*Set this bit in 1-division mode.*/ 98 }; 99 uint32_t val; 100 } clock; 101 union { 102 struct { 103 uint32_t reserved0: 6; /*reserved*/ 104 uint32_t cs_hold: 1; /*spi cs keep low when spi is in done phase. 1: enable 0: disable.*/ 105 uint32_t cs_setup: 1; /*spi cs is enable when spi is in prepare phase. 1: enable 0: disable.*/ 106 uint32_t reserved8: 1; /*reserved*/ 107 uint32_t ck_out_edge: 1; /*the bit combined with spi_mem_mosi_delay_mode bits to set mosi signal delay mode.*/ 108 uint32_t reserved10: 2; /*reserved*/ 109 uint32_t fwrite_dual: 1; /*In the write operations read-data phase apply 2 signals*/ 110 uint32_t fwrite_quad: 1; /*In the write operations read-data phase apply 4 signals*/ 111 uint32_t fwrite_dio: 1; /*In the write operations address phase and read-data phase apply 2 signals.*/ 112 uint32_t fwrite_qio: 1; /*In the write operations address phase and read-data phase apply 4 signals.*/ 113 uint32_t reserved16: 8; /*reserved*/ 114 uint32_t usr_miso_highpart: 1; /*read-data phase only access to high-part of the buffer spi_mem_w8~spi_mem_w15. 1: enable 0: disable.*/ 115 uint32_t usr_mosi_highpart: 1; /*write-data phase only access to high-part of the buffer spi_mem_w8~spi_mem_w15. 1: enable 0: disable.*/ 116 uint32_t usr_dummy_idle: 1; /*SPI clock is disable in dummy phase when the bit is enable.*/ 117 uint32_t usr_mosi: 1; /*This bit enable the write-data phase of an operation.*/ 118 uint32_t usr_miso: 1; /*This bit enable the read-data phase of an operation.*/ 119 uint32_t usr_dummy: 1; /*This bit enable the dummy phase of an operation.*/ 120 uint32_t usr_addr: 1; /*This bit enable the address phase of an operation.*/ 121 uint32_t usr_command: 1; /*This bit enable the command phase of an operation.*/ 122 }; 123 uint32_t val; 124 } user; 125 union { 126 struct { 127 uint32_t usr_dummy_cyclelen: 6; /*The length in spi_mem_clk cycles of dummy phase. The register value shall be (cycle_num-1).*/ 128 uint32_t reserved6: 20; /*reserved*/ 129 uint32_t usr_addr_bitlen: 6; /*The length in bits of address phase. The register value shall be (bit_num-1).*/ 130 }; 131 uint32_t val; 132 } user1; 133 union { 134 struct { 135 uint32_t usr_command_value: 16; /*The value of command.*/ 136 uint32_t reserved16: 12; /*reserved*/ 137 uint32_t usr_command_bitlen: 4; /*The length in bits of command phase. The register value shall be (bit_num-1)*/ 138 }; 139 uint32_t val; 140 } user2; 141 union { 142 struct { 143 uint32_t usr_mosi_bit_len: 10; /*The length in bits of write-data. The register value shall be (bit_num-1).*/ 144 uint32_t reserved10: 22; /*reserved*/ 145 }; 146 uint32_t val; 147 } mosi_dlen; 148 union { 149 struct { 150 uint32_t usr_miso_bit_len: 10; /*The length in bits of read-data. The register value shall be (bit_num-1).*/ 151 uint32_t reserved10: 22; /*reserved*/ 152 }; 153 uint32_t val; 154 } miso_dlen; 155 union { 156 struct { 157 uint32_t status: 16; /*The value is stored when set spi_mem_flash_rdsr bit and spi_mem_flash_res bit.*/ 158 uint32_t wb_mode: 8; /*Mode bits in the flash fast read mode it is combined with spi_mem_fastrd_mode bit.*/ 159 uint32_t reserved24: 8; /*reserved*/ 160 }; 161 uint32_t val; 162 } rd_status; 163 uint32_t reserved_30; 164 union { 165 struct { 166 uint32_t cs0_dis: 1; /*SPI_CS0 pin enable 1: disable SPI_CS0 0: SPI_CS0 pin is active to select SPI device such as flash external RAM and so on.*/ 167 uint32_t cs1_dis: 1; /*SPI_CS1 pin enable 1: disable SPI_CS1 0: SPI_CS1 pin is active to select SPI device such as flash external RAM and so on.*/ 168 uint32_t reserved2: 1; /*reserved*/ 169 uint32_t mst_st_trans_end: 1; /*The bit is used to indicate the spi0_mst_st controlled transmitting is done.*/ 170 uint32_t mst_st_trans_end_en: 1; /*The bit is used to enable the interrupt of spi0_mst_st controlled transmitting is done.*/ 171 uint32_t st_trans_end: 1; /*The bit is used to indicate the spi0_slv_st controlled transmitting is done.*/ 172 uint32_t st_trans_end_en: 1; /*The bit is used to enable the interrupt of spi0_slv_st controlled transmitting is done.*/ 173 uint32_t reserved7: 2; /*reserved*/ 174 uint32_t ck_idle_edge: 1; /*1: spi clk line is high when idle 0: spi clk line is low when idle*/ 175 uint32_t cs_keep_active: 1; /*spi cs line keep low when the bit is set.*/ 176 uint32_t reserved11: 21; /*reserved*/ 177 }; 178 uint32_t val; 179 } misc; 180 uint32_t tx_crc; /*SPI1 TX CRC data register.*/ 181 union { 182 struct { 183 uint32_t req_en: 1; /*For SPI0 Cache access enable 1: enable 0:disable.*/ 184 uint32_t usr_addr_4byte: 1; /*For SPI1 cache read flash with 4 bytes address 1: enable 0:disable.*/ 185 uint32_t flash_usr_cmd: 1; /*For SPI0 cache read flash for user define command 1: enable 0:disable.*/ 186 uint32_t fdin_dual: 1; /*For SPI1 din phase apply 2 signals. 1: enable 0: disable. The bit is the same with spi_mem_fread_dio.*/ 187 uint32_t fdout_dual: 1; /*For SPI1 dout phase apply 2 signals. 1: enable 0: disable. The bit is the same with spi_mem_fread_dio.*/ 188 uint32_t faddr_dual: 1; /*For SPI1 address phase apply 2 signals. 1: enable 0: disable. The bit is the same with spi_mem_fread_dio.*/ 189 uint32_t fdin_quad: 1; /*For SPI1 din phase apply 4 signals. 1: enable 0: disable. The bit is the same with spi_mem_fread_qio.*/ 190 uint32_t fdout_quad: 1; /*For SPI1 dout phase apply 4 signals. 1: enable 0: disable. The bit is the same with spi_mem_fread_qio.*/ 191 uint32_t faddr_quad: 1; /*For SPI1 address phase apply 4 signals. 1: enable 0: disable. The bit is the same with spi_mem_fread_qio.*/ 192 uint32_t reserved9: 23; /*reserved*/ 193 }; 194 uint32_t val; 195 } cache_fctrl; 196 uint32_t reserved_40; 197 uint32_t reserved_44; 198 uint32_t reserved_48; 199 uint32_t reserved_4c; 200 uint32_t reserved_50; 201 union { 202 struct { 203 uint32_t spi0_st: 4; /*The current status of SPI0 slave FSM: spi0_slv_st. 0: idle state 1: preparation state 2: send command state 3: send address state 4: wait state 5: read data state 6:write data state 7: done state 8: read data end state.*/ 204 uint32_t spi0_mst_st: 3; /*The current status of SPI0 master FSM: spi0_mst_st. 0: idle state 1:EM_CACHE_GRANT 2: program/erase suspend state 3: SPI0 read data state 4: wait cache/EDMA sent data is stored in SPI0 TX FIFO 5: SPI0 write data state.*/ 205 uint32_t cspi_lock_delay_time: 5; /*The lock delay time of SPI0/1 arbiter by spi0_slv_st after PER is sent by SPI1.*/ 206 uint32_t reserved12: 20; /*reserved*/ 207 }; 208 uint32_t val; 209 } fsm; 210 uint32_t data_buf[16]; 211 union { 212 struct { 213 uint32_t reserved0: 1; /*reserved*/ 214 uint32_t waiti_dummy: 1; /*The dummy phase enable when wait flash idle (RDSR)*/ 215 uint32_t waiti_cmd: 8; /*The command to wait flash idle(RDSR).*/ 216 uint32_t waiti_dummy_cyclelen: 6; /*The dummy cycle length when wait flash idle(RDSR).*/ 217 uint32_t reserved16: 16; /*reserved*/ 218 }; 219 uint32_t val; 220 } flash_waiti_ctrl; 221 union { 222 struct { 223 uint32_t flash_per: 1; /*program erase resume bit program erase suspend operation will be triggered when the bit is set. The bit will be cleared once the operation done.1: enable 0: disable.*/ 224 uint32_t flash_pes: 1; /*program erase suspend bit program erase suspend operation will be triggered when the bit is set. The bit will be cleared once the operation done.1: enable 0: disable.*/ 225 uint32_t flash_per_wait_en: 1; /*Set this bit to enable SPI1 waits (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 128) SPI_CLK cycles after program erase suspend.*/ 226 uint32_t flash_pes_wait_en: 1; /*Set this bit to enable SPI1 waits (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 4) SPI_CLK cycles after program erase suspend.*/ 227 uint32_t pes_per_en: 1; /*Set this bit to enable PES end triggers PER transfer option. If this bit is 0 application should send PER after PES is done.*/ 228 uint32_t flash_pes_en: 1; /*Set this bit to enable Auto-suspending function.*/ 229 uint32_t pesr_end_msk: 16; /*The mask value when check SUS/SUS1/SUS2 status bit. If the read status value is status_in[15:0](only status_in[7:0] is valid when only one byte of data is read out status_in[15:0] is valid when two bytes of data are read out) SUS/SUS1/SUS2 = status_in[15:0]^ SPI_MEM_PESR_END_MSK[15:0].*/ 230 uint32_t frd_sus_2b: 1; /*1: Read two bytes when check flash SUS/SUS1/SUS2 status bit. 0: Read one byte when check flash SUS/SUS1/SUS2 status bit*/ 231 uint32_t per_end_en: 1; /*1: Both WIP and SUS/SUS1/SUS2 bits should be checked to insure the resume status of flash. 0: Only need to check WIP is 0.*/ 232 uint32_t pes_end_en: 1; /*1: Both WIP and SUS/SUS1/SUS2 bits should be checked to insure the suspend status of flash. 0: Only need to check WIP is 0.*/ 233 uint32_t sus_timeout_cnt: 7; /*When SPI1 checks SUS/SUS1/SUS2 bits fail for SPI_MEM_SUS_TIMEOUT_CNT[6:0] times it will be treated as check pass.*/ 234 }; 235 uint32_t val; 236 } flash_sus_ctrl; 237 union { 238 struct { 239 uint32_t flash_per_command: 8; /*Program/Erase resume command.*/ 240 uint32_t flash_pes_command: 8; /*Program/Erase suspend command.*/ 241 uint32_t wait_pesr_command: 16; /*Flash SUS/SUS1/SUS2 status bit read command. The command should be sent when SUS/SUS1/SUS2 bit should be checked to insure the suspend or resume status of flash.*/ 242 }; 243 uint32_t val; 244 } flash_sus_cmd; 245 union { 246 struct { 247 uint32_t flash_sus: 1; /*The status of flash suspend only used in SPI1.*/ 248 uint32_t reserved1: 31; /*reserved*/ 249 }; 250 uint32_t val; 251 } sus_status; 252 union { 253 struct { 254 uint32_t timing_clk_ena: 1; /*The bit is used to enable timing adjust clock for all reading operations.*/ 255 uint32_t timing_cali: 1; /*The bit is used to enable timing auto-calibration for all reading operations.*/ 256 uint32_t extra_dummy_cyclelen: 3; /*add extra dummy spi clock cycle length for spi clock calibration.*/ 257 uint32_t reserved5: 27; /*reserved*/ 258 }; 259 uint32_t val; 260 } timing_cali; 261 union { 262 struct { 263 uint32_t din0_mode: 2; /*the input signals are delayed by system clock cycles 0: input without delayed 1: input with the posedge of clk_apb 2 input with the negedge of clk_apb 3: input with the posedge of clk_160 4 input with the negedge of clk_160 5: input with the spi_clk high edge 6: input with the spi_clk low edge*/ 264 uint32_t din1_mode: 2; /*the input signals are delayed by system clock cycles 0: input without delayed 1: input with the posedge of clk_apb 2 input with the negedge of clk_apb 3: input with the posedge of clk_160 4 input with the negedge of clk_160 5: input with the spi_clk high edge 6: input with the spi_clk low edge*/ 265 uint32_t din2_mode: 2; /*the input signals are delayed by system clock cycles 0: input without delayed 1: input with the posedge of clk_apb 2 input with the negedge of clk_apb 3: input with the posedge of clk_160 4 input with the negedge of clk_160 5: input with the spi_clk high edge 6: input with the spi_clk low edge*/ 266 uint32_t din3_mode: 2; /*the input signals are delayed by system clock cycles 0: input without delayed 1: input with the posedge of clk_apb 2 input with the negedge of clk_apb 3: input with the posedge of clk_160 4 input with the negedge of clk_160 5: input with the spi_clk high edge 6: input with the spi_clk low edge*/ 267 uint32_t reserved8: 24; /*reserved*/ 268 }; 269 uint32_t val; 270 } din_mode; 271 union { 272 struct { 273 uint32_t din0_num: 2; /*the input signals are delayed by system clock cycles 0: delayed by 1 cycle 1: delayed by 2 cycles ...*/ 274 uint32_t din1_num: 2; /*the input signals are delayed by system clock cycles 0: delayed by 1 cycle 1: delayed by 2 cycles ...*/ 275 uint32_t din2_num: 2; /*the input signals are delayed by system clock cycles 0: delayed by 1 cycle 1: delayed by 2 cycles ...*/ 276 uint32_t din3_num: 2; /*the input signals are delayed by system clock cycles 0: delayed by 1 cycle 1: delayed by 2 cycles ...*/ 277 uint32_t reserved8: 24; /*reserved*/ 278 }; 279 uint32_t val; 280 } din_num; 281 union { 282 struct { 283 uint32_t dout0_mode: 1; /*the output signals are delayed by system clock cycles 0: output without delayed 1: output with the posedge of clk_apb 2 output with the negedge of clk_apb 3: output with the posedge of clk_160 4 output with the negedge of clk_160 5: output with the spi_clk high edge 6: output with the spi_clk low edge*/ 284 uint32_t dout1_mode: 1; /*the output signals are delayed by system clock cycles 0: output without delayed 1: output with the posedge of clk_apb 2 output with the negedge of clk_apb 3: output with the posedge of clk_160 4 output with the negedge of clk_160 5: output with the spi_clk high edge 6: output with the spi_clk low edge*/ 285 uint32_t dout2_mode: 1; /*the output signals are delayed by system clock cycles 0: output without delayed 1: output with the posedge of clk_apb 2 output with the negedge of clk_apb 3: output with the posedge of clk_160 4 output with the negedge of clk_160 5: output with the spi_clk high edge 6: output with the spi_clk low edge*/ 286 uint32_t dout3_mode: 1; /*the output signals are delayed by system clock cycles 0: output without delayed 1: output with the posedge of clk_apb 2 output with the negedge of clk_apb 3: output with the posedge of clk_160 4 output with the negedge of clk_160 5: output with the spi_clk high edge 6: output with the spi_clk low edge*/ 287 uint32_t reserved4: 28; /*reserved*/ 288 }; 289 uint32_t val; 290 } dout_mode; 291 uint32_t reserved_b8; 292 uint32_t reserved_bc; 293 union { 294 struct { 295 uint32_t per_end_int_ena: 1; /*The enable bit for SPI_MEM_PER_END_INT interrupt.*/ 296 uint32_t pes_end_int_ena: 1; /*The enable bit for SPI_MEM_PES_END_INT interrupt.*/ 297 uint32_t wpe_end_int_ena: 1; /*The enable bit for SPI_MEM_WPE_END_INT interrupt.*/ 298 uint32_t st_end_int_ena: 1; /*The enable bit for SPI_MEM_SLV_ST_END_INT interrupt.*/ 299 uint32_t mst_st_end_int_ena: 1; /*The enable bit for SPI_MEM_MST_ST_END_INT interrupt.*/ 300 uint32_t reserved5: 27; /*reserved*/ 301 }; 302 uint32_t val; 303 } int_ena; 304 union { 305 struct { 306 uint32_t per_end: 1; /*The clear bit for SPI_MEM_PER_END_INT interrupt.*/ 307 uint32_t pes_end: 1; /*The clear bit for SPI_MEM_PES_END_INT interrupt.*/ 308 uint32_t wpe_end: 1; /*The clear bit for SPI_MEM_WPE_END_INT interrupt.*/ 309 uint32_t st_end: 1; /*The clear bit for SPI_MEM_SLV_ST_END_INT interrupt.*/ 310 uint32_t mst_st_end: 1; /*The clear bit for SPI_MEM_MST_ST_END_INT interrupt.*/ 311 uint32_t reserved5: 27; /*reserved*/ 312 }; 313 uint32_t val; 314 } int_clr; 315 union { 316 struct { 317 uint32_t per_end: 1; /*The raw bit for SPI_MEM_PER_END_INT interrupt. 1: Triggered when Auto Resume command (0x7A) is sent and flash is resumed. 0: Others.*/ 318 uint32_t pes_end: 1; /*The raw bit for SPI_MEM_PES_END_INT interrupt.1: Triggered when Auto Suspend command (0x75) is sent and flash is suspended. 0: Others.*/ 319 uint32_t wpe_end: 1; /*The raw bit for SPI_MEM_WPE_END_INT interrupt. 1: Triggered when WRSR/PP/SE/BE/CE is sent and flash is already idle. 0: Others.*/ 320 uint32_t st_end: 1; /*The raw bit for SPI_MEM_SLV_ST_END_INT interrupt. 1: Triggered when spi1_slv_st is changed from non idle state to idle state. It means that SPI_CS raises high. 0: Others*/ 321 uint32_t mst_st_end: 1; /*The raw bit for SPI_MEM_MST_ST_END_INT interrupt. 1: Triggered when spi1_mst_st is changed from non idle state to idle state. 0: Others.*/ 322 uint32_t reserved5: 27; /*reserved*/ 323 }; 324 uint32_t val; 325 } int_raw; 326 union { 327 struct { 328 uint32_t per_end: 1; /*The status bit for SPI_MEM_PER_END_INT interrupt.*/ 329 uint32_t pes_end: 1; /*The status bit for SPI_MEM_PES_END_INT interrupt.*/ 330 uint32_t wpe_end: 1; /*The status bit for SPI_MEM_WPE_END_INT interrupt.*/ 331 uint32_t st_end: 1; /*The status bit for SPI_MEM_SLV_ST_END_INT interrupt.*/ 332 uint32_t mst_st_end: 1; /*The status bit for SPI_MEM_MST_ST_END_INT interrupt.*/ 333 uint32_t reserved5: 27; /*reserved*/ 334 }; 335 uint32_t val; 336 } int_st; 337 uint32_t reserved_d0; 338 uint32_t reserved_d4; 339 uint32_t reserved_d8; 340 union { 341 struct { 342 uint32_t clk_en: 1; /*Register clock gate enable signal. 1: Enable. 0: Disable.*/ 343 uint32_t reserved1: 31; /*reserved*/ 344 }; 345 uint32_t val; 346 } clock_gate; 347 union { 348 struct { 349 uint32_t spi01_clk_sel: 2; /*When the digital system clock selects PLL clock and the frequency of PLL clock is 480MHz the value of reg_spi01_clk_sel: 0: SPI0/1 module clock (clk) is 80MHz. 1: SPI0/1 module clock (clk) is 120MHz. 2: SPI0/1 module clock (clk) 160MHz. 3: Not used. When the digital system clock selects PLL clock and the frequency of PLL clock is 320MHz the value of reg_spi01_clk_sel: 0: SPI0/1 module clock (clk) is 80MHz. 1: SPI0/1 module clock (clk) is 80MHz. 2: SPI0/1 module clock (clk) 160MHz. 3: Not used.*/ 350 uint32_t reserved2: 30; /*reserved*/ 351 }; 352 uint32_t val; 353 } core_clk_sel; 354 uint32_t reserved_e4; 355 uint32_t reserved_e8; 356 uint32_t reserved_ec; 357 uint32_t reserved_f0; 358 uint32_t reserved_f4; 359 uint32_t reserved_f8; 360 uint32_t reserved_fc; 361 uint32_t reserved_100; 362 uint32_t reserved_104; 363 uint32_t reserved_108; 364 uint32_t reserved_10c; 365 uint32_t reserved_110; 366 uint32_t reserved_114; 367 uint32_t reserved_118; 368 uint32_t reserved_11c; 369 uint32_t reserved_120; 370 uint32_t reserved_124; 371 uint32_t reserved_128; 372 uint32_t reserved_12c; 373 uint32_t reserved_130; 374 uint32_t reserved_134; 375 uint32_t reserved_138; 376 uint32_t reserved_13c; 377 uint32_t reserved_140; 378 uint32_t reserved_144; 379 uint32_t reserved_148; 380 uint32_t reserved_14c; 381 uint32_t reserved_150; 382 uint32_t reserved_154; 383 uint32_t reserved_158; 384 uint32_t reserved_15c; 385 uint32_t reserved_160; 386 uint32_t reserved_164; 387 uint32_t reserved_168; 388 uint32_t reserved_16c; 389 uint32_t reserved_170; 390 uint32_t reserved_174; 391 uint32_t reserved_178; 392 uint32_t reserved_17c; 393 uint32_t reserved_180; 394 uint32_t reserved_184; 395 uint32_t reserved_188; 396 uint32_t reserved_18c; 397 uint32_t reserved_190; 398 uint32_t reserved_194; 399 uint32_t reserved_198; 400 uint32_t reserved_19c; 401 uint32_t reserved_1a0; 402 uint32_t reserved_1a4; 403 uint32_t reserved_1a8; 404 uint32_t reserved_1ac; 405 uint32_t reserved_1b0; 406 uint32_t reserved_1b4; 407 uint32_t reserved_1b8; 408 uint32_t reserved_1bc; 409 uint32_t reserved_1c0; 410 uint32_t reserved_1c4; 411 uint32_t reserved_1c8; 412 uint32_t reserved_1cc; 413 uint32_t reserved_1d0; 414 uint32_t reserved_1d4; 415 uint32_t reserved_1d8; 416 uint32_t reserved_1dc; 417 uint32_t reserved_1e0; 418 uint32_t reserved_1e4; 419 uint32_t reserved_1e8; 420 uint32_t reserved_1ec; 421 uint32_t reserved_1f0; 422 uint32_t reserved_1f4; 423 uint32_t reserved_1f8; 424 uint32_t reserved_1fc; 425 uint32_t reserved_200; 426 uint32_t reserved_204; 427 uint32_t reserved_208; 428 uint32_t reserved_20c; 429 uint32_t reserved_210; 430 uint32_t reserved_214; 431 uint32_t reserved_218; 432 uint32_t reserved_21c; 433 uint32_t reserved_220; 434 uint32_t reserved_224; 435 uint32_t reserved_228; 436 uint32_t reserved_22c; 437 uint32_t reserved_230; 438 uint32_t reserved_234; 439 uint32_t reserved_238; 440 uint32_t reserved_23c; 441 uint32_t reserved_240; 442 uint32_t reserved_244; 443 uint32_t reserved_248; 444 uint32_t reserved_24c; 445 uint32_t reserved_250; 446 uint32_t reserved_254; 447 uint32_t reserved_258; 448 uint32_t reserved_25c; 449 uint32_t reserved_260; 450 uint32_t reserved_264; 451 uint32_t reserved_268; 452 uint32_t reserved_26c; 453 uint32_t reserved_270; 454 uint32_t reserved_274; 455 uint32_t reserved_278; 456 uint32_t reserved_27c; 457 uint32_t reserved_280; 458 uint32_t reserved_284; 459 uint32_t reserved_288; 460 uint32_t reserved_28c; 461 uint32_t reserved_290; 462 uint32_t reserved_294; 463 uint32_t reserved_298; 464 uint32_t reserved_29c; 465 uint32_t reserved_2a0; 466 uint32_t reserved_2a4; 467 uint32_t reserved_2a8; 468 uint32_t reserved_2ac; 469 uint32_t reserved_2b0; 470 uint32_t reserved_2b4; 471 uint32_t reserved_2b8; 472 uint32_t reserved_2bc; 473 uint32_t reserved_2c0; 474 uint32_t reserved_2c4; 475 uint32_t reserved_2c8; 476 uint32_t reserved_2cc; 477 uint32_t reserved_2d0; 478 uint32_t reserved_2d4; 479 uint32_t reserved_2d8; 480 uint32_t reserved_2dc; 481 uint32_t reserved_2e0; 482 uint32_t reserved_2e4; 483 uint32_t reserved_2e8; 484 uint32_t reserved_2ec; 485 uint32_t reserved_2f0; 486 uint32_t reserved_2f4; 487 uint32_t reserved_2f8; 488 uint32_t reserved_2fc; 489 uint32_t reserved_300; 490 uint32_t reserved_304; 491 uint32_t reserved_308; 492 uint32_t reserved_30c; 493 uint32_t reserved_310; 494 uint32_t reserved_314; 495 uint32_t reserved_318; 496 uint32_t reserved_31c; 497 uint32_t reserved_320; 498 uint32_t reserved_324; 499 uint32_t reserved_328; 500 uint32_t reserved_32c; 501 uint32_t reserved_330; 502 uint32_t reserved_334; 503 uint32_t reserved_338; 504 uint32_t reserved_33c; 505 uint32_t reserved_340; 506 uint32_t reserved_344; 507 uint32_t reserved_348; 508 uint32_t reserved_34c; 509 uint32_t reserved_350; 510 uint32_t reserved_354; 511 uint32_t reserved_358; 512 uint32_t reserved_35c; 513 uint32_t reserved_360; 514 uint32_t reserved_364; 515 uint32_t reserved_368; 516 uint32_t reserved_36c; 517 uint32_t reserved_370; 518 uint32_t reserved_374; 519 uint32_t reserved_378; 520 uint32_t reserved_37c; 521 uint32_t reserved_380; 522 uint32_t reserved_384; 523 uint32_t reserved_388; 524 uint32_t reserved_38c; 525 uint32_t reserved_390; 526 uint32_t reserved_394; 527 uint32_t reserved_398; 528 uint32_t reserved_39c; 529 uint32_t reserved_3a0; 530 uint32_t reserved_3a4; 531 uint32_t reserved_3a8; 532 uint32_t reserved_3ac; 533 uint32_t reserved_3b0; 534 uint32_t reserved_3b4; 535 uint32_t reserved_3b8; 536 uint32_t reserved_3bc; 537 uint32_t reserved_3c0; 538 uint32_t reserved_3c4; 539 uint32_t reserved_3c8; 540 uint32_t reserved_3cc; 541 uint32_t reserved_3d0; 542 uint32_t reserved_3d4; 543 uint32_t reserved_3d8; 544 uint32_t reserved_3dc; 545 uint32_t reserved_3e0; 546 uint32_t reserved_3e4; 547 uint32_t reserved_3e8; 548 uint32_t reserved_3ec; 549 uint32_t reserved_3f0; 550 uint32_t reserved_3f4; 551 uint32_t reserved_3f8; 552 union { 553 struct { 554 uint32_t date: 28; /*Version control register*/ 555 uint32_t reserved28: 4; /*reserved*/ 556 }; 557 uint32_t val; 558 } date; 559 } spi_mem_dev_t; 560 extern spi_mem_dev_t SPIMEM0; 561 extern spi_mem_dev_t SPIMEM1; 562 563 _Static_assert(sizeof(spi_mem_dev_t) == 0x400, "spi_mem_dev_t size error!"); 564 565 #ifdef __cplusplus 566 } 567 #endif 568 569 #endif /* _SOC_SPI_MEM_STRUCT_H_ */ 570