1 /**
2  * SPDX-FileCopyrightText: 2022 Espressif Systems (Shanghai) CO LTD
3  *
4  *  SPDX-License-Identifier: Apache-2.0
5  */
6 #pragma once
7 
8 #include <stdint.h>
9 #ifdef __cplusplus
10 extern "C" {
11 #endif
12 
13 /** Group: User-defined control registers */
14 /** Type of cmd register
15  *  Command control register
16  */
17 typedef union {
18     struct {
19         /** conf_bitlen : R/W; bitpos: [17:0]; default: 0;
20          *  Define the APB cycles of  SPI_CONF state. Can be configured in CONF state.
21          */
22         uint32_t conf_bitlen:18;
23         uint32_t reserved_18:5;
24         /** update : WT; bitpos: [23]; default: 0;
25          *  Set this bit to synchronize SPI registers from APB clock domain into SPI module
26          *  clock domain, which is only used in SPI master mode.
27          */
28         uint32_t update:1;
29         /** usr : R/W/SC; bitpos: [24]; default: 0;
30          *  User define command enable.  An operation will be triggered when the bit is set.
31          *  The bit will be cleared once the operation done.1: enable 0: disable. Can not be
32          *  changed by CONF_buf.
33          */
34         uint32_t usr:1;
35         uint32_t reserved_25:7;
36     };
37     uint32_t val;
38 } spi_cmd_reg_t;
39 
40 /** Type of addr register
41  *  Address value register
42  */
43 typedef union {
44     struct {
45         /** usr_addr_value : R/W; bitpos: [31:0]; default: 0;
46          *  Address to slave. Can be configured in CONF state.
47          */
48         uint32_t usr_addr_value:32;
49     };
50     uint32_t val;
51 } spi_addr_reg_t;
52 
53 /** Type of user register
54  *  SPI USER control register
55  */
56 typedef union {
57     struct {
58         /** doutdin : R/W; bitpos: [0]; default: 0;
59          *  Set the bit to enable full duplex communication. 1: enable 0: disable. Can be
60          *  configured in CONF state.
61          */
62         uint32_t doutdin:1;
63         uint32_t reserved_1:2;
64         /** qpi_mode : R/W/SS/SC; bitpos: [3]; default: 0;
65          *  Both for master mode and slave mode. 1: spi controller is in QPI mode. 0: others.
66          *  Can be configured in CONF state.
67          */
68         uint32_t qpi_mode:1;
69         /** opi_mode : HRO; bitpos: [4]; default: 0;
70          *  Just for master mode. 1: spi controller is in OPI mode (all in 8-b-m). 0: others.
71          *  Can be configured in CONF state.
72          */
73         uint32_t opi_mode:1;
74         /** tsck_i_edge : R/W; bitpos: [5]; default: 0;
75          *  In the slave mode, this bit can be used to change the polarity of tsck. 0: tsck =
76          *  spi_ck_i. 1:tsck = !spi_ck_i.
77          */
78         uint32_t tsck_i_edge:1;
79         /** cs_hold : R/W; bitpos: [6]; default: 1;
80          *  spi cs keep low when spi is in  done  phase. 1: enable 0: disable. Can be
81          *  configured in CONF state.
82          */
83         uint32_t cs_hold:1;
84         /** cs_setup : R/W; bitpos: [7]; default: 1;
85          *  spi cs is enable when spi is in  prepare  phase. 1: enable 0: disable. Can be
86          *  configured in CONF state.
87          */
88         uint32_t cs_setup:1;
89         /** rsck_i_edge : R/W; bitpos: [8]; default: 0;
90          *  In the slave mode, this bit can be used to change the polarity of rsck. 0: rsck =
91          *  !spi_ck_i. 1:rsck = spi_ck_i.
92          */
93         uint32_t rsck_i_edge:1;
94         /** ck_out_edge : R/W; bitpos: [9]; default: 0;
95          *  the bit combined with spi_mosi_delay_mode bits to set mosi signal delay mode. Can
96          *  be configured in CONF state.
97          */
98         uint32_t ck_out_edge:1;
99         uint32_t reserved_10:2;
100         /** fwrite_dual : R/W; bitpos: [12]; default: 0;
101          *  In the write operations read-data phase apply 2 signals. Can be configured in CONF
102          *  state.
103          */
104         uint32_t fwrite_dual:1;
105         /** fwrite_quad : R/W; bitpos: [13]; default: 0;
106          *  In the write operations read-data phase apply 4 signals. Can be configured in CONF
107          *  state.
108          */
109         uint32_t fwrite_quad:1;
110         /** fwrite_oct : HRO; bitpos: [14]; default: 0;
111          *  In the write operations read-data phase apply 8 signals. Can be configured in CONF
112          *  state.
113          */
114         uint32_t fwrite_oct:1;
115         /** usr_conf_nxt : R/W; bitpos: [15]; default: 0;
116          *  1: Enable the DMA CONF phase of next seg-trans operation, which means seg-trans
117          *  will continue. 0: The seg-trans will end after the current SPI seg-trans or this is
118          *  not seg-trans mode. Can be configured in CONF state.
119          */
120         uint32_t usr_conf_nxt:1;
121         uint32_t reserved_16:1;
122         /** sio : R/W; bitpos: [17]; default: 0;
123          *  Set the bit to enable 3-line half duplex communication mosi and miso signals share
124          *  the same pin. 1: enable 0: disable. Can be configured in CONF state.
125          */
126         uint32_t sio:1;
127         uint32_t reserved_18:6;
128         /** usr_miso_highpart : R/W; bitpos: [24]; default: 0;
129          *  read-data phase only access to high-part of the buffer spi_w8~spi_w15. 1: enable 0:
130          *  disable. Can be configured in CONF state.
131          */
132         uint32_t usr_miso_highpart:1;
133         /** usr_mosi_highpart : R/W; bitpos: [25]; default: 0;
134          *  write-data phase only access to high-part of the buffer spi_w8~spi_w15. 1: enable
135          *  0: disable.  Can be configured in CONF state.
136          */
137         uint32_t usr_mosi_highpart:1;
138         /** usr_dummy_idle : R/W; bitpos: [26]; default: 0;
139          *  spi clock is disable in dummy phase when the bit is enable. Can be configured in
140          *  CONF state.
141          */
142         uint32_t usr_dummy_idle:1;
143         /** usr_mosi : R/W; bitpos: [27]; default: 0;
144          *  This bit enable the write-data phase of an operation. Can be configured in CONF
145          *  state.
146          */
147         uint32_t usr_mosi:1;
148         /** usr_miso : R/W; bitpos: [28]; default: 0;
149          *  This bit enable the read-data phase of an operation. Can be configured in CONF
150          *  state.
151          */
152         uint32_t usr_miso:1;
153         /** usr_dummy : R/W; bitpos: [29]; default: 0;
154          *  This bit enable the dummy phase of an operation. Can be configured in CONF state.
155          */
156         uint32_t usr_dummy:1;
157         /** usr_addr : R/W; bitpos: [30]; default: 0;
158          *  This bit enable the address phase of an operation. Can be configured in CONF state.
159          */
160         uint32_t usr_addr:1;
161         /** usr_command : R/W; bitpos: [31]; default: 1;
162          *  This bit enable the command phase of an operation. Can be configured in CONF state.
163          */
164         uint32_t usr_command:1;
165     };
166     uint32_t val;
167 } spi_user_reg_t;
168 
169 /** Type of user1 register
170  *  SPI USER control register 1
171  */
172 typedef union {
173     struct {
174         /** usr_dummy_cyclelen : R/W; bitpos: [7:0]; default: 7;
175          *  The length in spi_clk cycles of dummy phase. The register value shall be
176          *  (cycle_num-1). Can be configured in CONF state.
177          */
178         uint32_t usr_dummy_cyclelen:8;
179         uint32_t reserved_8:8;
180         /** mst_wfull_err_end_en : R/W; bitpos: [16]; default: 1;
181          *  1: SPI transfer is ended when SPI RX AFIFO wfull error is valid in GP-SPI master
182          *  FD/HD-mode. 0: SPI transfer is not ended when SPI RX AFIFO wfull error is valid in
183          *  GP-SPI master FD/HD-mode.
184          */
185         uint32_t mst_wfull_err_end_en:1;
186         /** cs_setup_time : R/W; bitpos: [21:17]; default: 0;
187          *  (cycles+1) of prepare phase by spi clock this bits are combined with spi_cs_setup
188          *  bit. Can be configured in CONF state.
189          */
190         uint32_t cs_setup_time:5;
191         /** cs_hold_time : R/W; bitpos: [26:22]; default: 1;
192          *  delay cycles of cs pin by spi clock this bits are combined with spi_cs_hold bit.
193          *  Can be configured in CONF state.
194          */
195         uint32_t cs_hold_time:5;
196         /** usr_addr_bitlen : R/W; bitpos: [31:27]; default: 23;
197          *  The length in bits of address phase. The register value shall be (bit_num-1). Can
198          *  be configured in CONF state.
199          */
200         uint32_t usr_addr_bitlen:5;
201     };
202     uint32_t val;
203 } spi_user1_reg_t;
204 
205 /** Type of user2 register
206  *  SPI USER control register 2
207  */
208 typedef union {
209     struct {
210         /** usr_command_value : R/W; bitpos: [15:0]; default: 0;
211          *  The value of  command. Can be configured in CONF state.
212          */
213         uint32_t usr_command_value:16;
214         uint32_t reserved_16:11;
215         /** mst_rempty_err_end_en : R/W; bitpos: [27]; default: 1;
216          *  1: SPI transfer is ended when SPI TX AFIFO read empty error is valid in GP-SPI
217          *  master FD/HD-mode. 0: SPI transfer is not ended when SPI TX AFIFO read empty error
218          *  is valid in GP-SPI master FD/HD-mode.
219          */
220         uint32_t mst_rempty_err_end_en:1;
221         /** usr_command_bitlen : R/W; bitpos: [31:28]; default: 7;
222          *  The length in bits of command phase. The register value shall be (bit_num-1). Can
223          *  be configured in CONF state.
224          */
225         uint32_t usr_command_bitlen:4;
226     };
227     uint32_t val;
228 } spi_user2_reg_t;
229 
230 
231 /** Group: Control and configuration registers */
232 /** Type of ctrl register
233  *  SPI control register
234  */
235 typedef union {
236     struct {
237         uint32_t reserved_0:3;
238         /** dummy_out : R/W; bitpos: [3]; default: 0;
239          *  0: In the dummy phase, the FSPI bus signals are not output. 1: In the dummy phase,
240          *  the FSPI bus signals are output. Can be configured in CONF state.
241          */
242         uint32_t dummy_out:1;
243         uint32_t reserved_4:1;
244         /** faddr_dual : R/W; bitpos: [5]; default: 0;
245          *  Apply 2 signals during addr phase 1:enable 0: disable. Can be configured in CONF
246          *  state.
247          */
248         uint32_t faddr_dual:1;
249         /** faddr_quad : R/W; bitpos: [6]; default: 0;
250          *  Apply 4 signals during addr phase 1:enable 0: disable. Can be configured in CONF
251          *  state.
252          */
253         uint32_t faddr_quad:1;
254         /** faddr_oct : HRO; bitpos: [7]; default: 0;
255          *  Apply 8 signals during addr phase 1:enable 0: disable. Can be configured in CONF
256          *  state.
257          */
258         uint32_t faddr_oct:1;
259         /** fcmd_dual : R/W; bitpos: [8]; default: 0;
260          *  Apply 2 signals during command phase 1:enable 0: disable. Can be configured in CONF
261          *  state.
262          */
263         uint32_t fcmd_dual:1;
264         /** fcmd_quad : R/W; bitpos: [9]; default: 0;
265          *  Apply 4 signals during command phase 1:enable 0: disable. Can be configured in CONF
266          *  state.
267          */
268         uint32_t fcmd_quad:1;
269         /** fcmd_oct : HRO; bitpos: [10]; default: 0;
270          *  Apply 8 signals during command phase 1:enable 0: disable. Can be configured in CONF
271          *  state.
272          */
273         uint32_t fcmd_oct:1;
274         uint32_t reserved_11:3;
275         /** fread_dual : R/W; bitpos: [14]; default: 0;
276          *  In the read operations, read-data phase apply 2 signals. 1: enable 0: disable. Can
277          *  be configured in CONF state.
278          */
279         uint32_t fread_dual:1;
280         /** fread_quad : R/W; bitpos: [15]; default: 0;
281          *  In the read operations read-data phase apply 4 signals. 1: enable 0: disable.  Can
282          *  be configured in CONF state.
283          */
284         uint32_t fread_quad:1;
285         /** fread_oct : HRO; bitpos: [16]; default: 0;
286          *  In the read operations read-data phase apply 8 signals. 1: enable 0: disable.  Can
287          *  be configured in CONF state.
288          */
289         uint32_t fread_oct:1;
290         uint32_t reserved_17:1;
291         /** q_pol : R/W; bitpos: [18]; default: 1;
292          *  The bit is used to set MISO line polarity, 1: high 0, low. Can be configured in
293          *  CONF state.
294          */
295         uint32_t q_pol:1;
296         /** d_pol : R/W; bitpos: [19]; default: 1;
297          *  The bit is used to set MOSI line polarity, 1: high 0, low. Can be configured in
298          *  CONF state.
299          */
300         uint32_t d_pol:1;
301         /** hold_pol : R/W; bitpos: [20]; default: 1;
302          *  SPI_HOLD output value when SPI is idle. 1: output high, 0: output low. Can be
303          *  configured in CONF state.
304          */
305         uint32_t hold_pol:1;
306         /** wp_pol : R/W; bitpos: [21]; default: 1;
307          *  Write protect signal output when SPI is idle.  1: output high, 0: output low.  Can
308          *  be configured in CONF state.
309          */
310         uint32_t wp_pol:1;
311         uint32_t reserved_22:1;
312         /** rd_bit_order : R/W; bitpos: [24:23]; default: 0;
313          *  In read-data (MISO) phase 1: LSB first 0: MSB first. Can be configured in CONF
314          *  state.
315          */
316         uint32_t rd_bit_order:2;
317         /** wr_bit_order : R/W; bitpos: [26:25]; default: 0;
318          *  In command address write-data (MOSI) phases 1: LSB firs 0: MSB first. Can be
319          *  configured in CONF state.
320          */
321         uint32_t wr_bit_order:2;
322         uint32_t reserved_27:5;
323     };
324     uint32_t val;
325 } spi_ctrl_reg_t;
326 
327 /** Type of ms_dlen register
328  *  SPI data bit length control register
329  */
330 typedef union {
331     struct {
332         /** ms_data_bitlen : R/W; bitpos: [17:0]; default: 0;
333          *  The value of these bits is the configured SPI transmission data bit length in
334          *  master mode DMA controlled transfer or CPU controlled transfer. The value is also
335          *  the configured bit length in slave mode DMA RX controlled transfer. The register
336          *  value shall be (bit_num-1). Can be configured in CONF state.
337          */
338         uint32_t ms_data_bitlen:18;
339         uint32_t reserved_18:14;
340     };
341     uint32_t val;
342 } spi_ms_dlen_reg_t;
343 
344 /** Type of misc register
345  *  SPI misc register
346  */
347 typedef union {
348     struct {
349         /** cs0_dis : R/W; bitpos: [0]; default: 0;
350          *  SPI CS$n pin enable, 1: disable CS$n, 0: spi_cs$n signal is from/to CS$n pin. Can
351          *  be configured in CONF state.
352          */
353         uint32_t cs0_dis:1;
354         /** cs1_dis : R/W; bitpos: [1]; default: 1;
355          *  SPI CS$n pin enable, 1: disable CS$n, 0: spi_cs$n signal is from/to CS$n pin. Can
356          *  be configured in CONF state.
357          */
358         uint32_t cs1_dis:1;
359         /** cs2_dis : R/W; bitpos: [2]; default: 1;
360          *  SPI CS$n pin enable, 1: disable CS$n, 0: spi_cs$n signal is from/to CS$n pin. Can
361          *  be configured in CONF state.
362          */
363         uint32_t cs2_dis:1;
364         /** cs3_dis : R/W; bitpos: [3]; default: 1;
365          *  SPI CS$n pin enable, 1: disable CS$n, 0: spi_cs$n signal is from/to CS$n pin. Can
366          *  be configured in CONF state.
367          */
368         uint32_t cs3_dis:1;
369         /** cs4_dis : R/W; bitpos: [4]; default: 1;
370          *  SPI CS$n pin enable, 1: disable CS$n, 0: spi_cs$n signal is from/to CS$n pin. Can
371          *  be configured in CONF state.
372          */
373         uint32_t cs4_dis:1;
374         /** cs5_dis : R/W; bitpos: [5]; default: 1;
375          *  SPI CS$n pin enable, 1: disable CS$n, 0: spi_cs$n signal is from/to CS$n pin. Can
376          *  be configured in CONF state.
377          */
378         uint32_t cs5_dis:1;
379         /** ck_dis : R/W; bitpos: [6]; default: 0;
380          *  1: spi clk out disable,  0: spi clk out enable. Can be configured in CONF state.
381          */
382         uint32_t ck_dis:1;
383         /** master_cs_pol : R/W; bitpos: [12:7]; default: 0;
384          *  In the master mode the bits are the polarity of spi cs line, the value is
385          *  equivalent to spi_cs ^ spi_master_cs_pol. Can be configured in CONF state.
386          */
387         uint32_t master_cs_pol:6;
388         uint32_t reserved_13:3;
389         /** clk_data_dtr_en : HRO; bitpos: [16]; default: 0;
390          *  1: SPI master DTR mode is applied to SPI clk, data and spi_dqs.  0: SPI master DTR
391          *  mode is  only applied to spi_dqs. This bit should be used with bit 17/18/19.
392          */
393         uint32_t clk_data_dtr_en:1;
394         /** data_dtr_en : HRO; bitpos: [17]; default: 0;
395          *  1: SPI clk and data of SPI_DOUT and SPI_DIN state are in DTR mode, including master
396          *  1/2/4/8-bm.  0:  SPI clk and data of SPI_DOUT and SPI_DIN state are in STR mode.
397          *  Can be configured in CONF state.
398          */
399         uint32_t data_dtr_en:1;
400         /** addr_dtr_en : HRO; bitpos: [18]; default: 0;
401          *  1: SPI clk and data of SPI_SEND_ADDR state are in DTR mode, including master
402          *  1/2/4/8-bm.  0:  SPI clk and data of SPI_SEND_ADDR state are in STR mode. Can be
403          *  configured in CONF state.
404          */
405         uint32_t addr_dtr_en:1;
406         /** cmd_dtr_en : HRO; bitpos: [19]; default: 0;
407          *  1: SPI clk and data of SPI_SEND_CMD state are in DTR mode, including master
408          *  1/2/4/8-bm. 0:  SPI clk and data of SPI_SEND_CMD state are in STR mode. Can be
409          *  configured in CONF state.
410          */
411         uint32_t cmd_dtr_en:1;
412         uint32_t reserved_20:3;
413         /** slave_cs_pol : R/W; bitpos: [23]; default: 0;
414          *  spi slave input cs polarity select. 1: inv  0: not change. Can be configured in
415          *  CONF state.
416          */
417         uint32_t slave_cs_pol:1;
418         /** dqs_idle_edge : HRO; bitpos: [24]; default: 0;
419          *  The default value of spi_dqs. Can be configured in CONF state.
420          */
421         uint32_t dqs_idle_edge:1;
422         uint32_t reserved_25:4;
423         /** ck_idle_edge : R/W; bitpos: [29]; default: 0;
424          *  1: spi clk line is high when idle     0: spi clk line is low when idle. Can be
425          *  configured in CONF state.
426          */
427         uint32_t ck_idle_edge:1;
428         /** cs_keep_active : R/W; bitpos: [30]; default: 0;
429          *  spi cs line keep low when the bit is set. Can be configured in CONF state.
430          */
431         uint32_t cs_keep_active:1;
432         /** quad_din_pin_swap : R/W; bitpos: [31]; default: 0;
433          *  1: SPI quad input swap enable, swap FSPID with FSPIQ, swap FSPIWP with FSPIHD. 0:
434          *  spi quad input swap disable. Can be configured in CONF state.
435          */
436         uint32_t quad_din_pin_swap:1;
437     };
438     uint32_t val;
439 } spi_misc_reg_t;
440 
441 /** Type of dma_conf register
442  *  SPI DMA control register
443  */
444 typedef union {
445     struct {
446         /** dma_outfifo_empty : RO; bitpos: [0]; default: 1;
447          *  Records the status of DMA TX FIFO. 1: DMA TX FIFO is not ready for sending data. 0:
448          *  DMA TX FIFO is ready for sending data.
449          */
450         uint32_t dma_outfifo_empty:1;
451         /** dma_infifo_full : RO; bitpos: [1]; default: 1;
452          *  Records the status of DMA RX FIFO. 1: DMA RX FIFO is not ready for receiving data.
453          *  0: DMA RX FIFO is ready for receiving data.
454          */
455         uint32_t dma_infifo_full:1;
456         uint32_t reserved_2:16;
457         /** dma_slv_seg_trans_en : R/W; bitpos: [18]; default: 0;
458          *  Enable dma segment transfer in spi dma half slave mode. 1: enable. 0: disable.
459          */
460         uint32_t dma_slv_seg_trans_en:1;
461         /** slv_rx_seg_trans_clr_en : R/W; bitpos: [19]; default: 0;
462          *  1: spi_dma_infifo_full_vld is cleared by spi slave cmd 5. 0:
463          *  spi_dma_infifo_full_vld is cleared by spi_trans_done.
464          */
465         uint32_t slv_rx_seg_trans_clr_en:1;
466         /** slv_tx_seg_trans_clr_en : R/W; bitpos: [20]; default: 0;
467          *  1: spi_dma_outfifo_empty_vld is cleared by spi slave cmd 6. 0:
468          *  spi_dma_outfifo_empty_vld is cleared by spi_trans_done.
469          */
470         uint32_t slv_tx_seg_trans_clr_en:1;
471         /** rx_eof_en : R/W; bitpos: [21]; default: 0;
472          *  1: spi_dma_inlink_eof is set when the number of dma pushed data bytes is equal to
473          *  the value of spi_slv/mst_dma_rd_bytelen[19:0] in spi dma transition.  0:
474          *  spi_dma_inlink_eof is set by spi_trans_done in non-seg-trans or
475          *  spi_dma_seg_trans_done in seg-trans.
476          */
477         uint32_t rx_eof_en:1;
478         uint32_t reserved_22:5;
479         /** dma_rx_ena : R/W; bitpos: [27]; default: 0;
480          *  Set this bit to enable SPI DMA controlled receive data mode.
481          */
482         uint32_t dma_rx_ena:1;
483         /** dma_tx_ena : R/W; bitpos: [28]; default: 0;
484          *  Set this bit to enable SPI DMA controlled send data mode.
485          */
486         uint32_t dma_tx_ena:1;
487         /** rx_afifo_rst : WT; bitpos: [29]; default: 0;
488          *  Set this bit to reset RX AFIFO, which is used to receive data in SPI master and
489          *  slave mode transfer.
490          */
491         uint32_t rx_afifo_rst:1;
492         /** buf_afifo_rst : WT; bitpos: [30]; default: 0;
493          *  Set this bit to reset BUF TX AFIFO, which is used send data out in SPI slave CPU
494          *  controlled mode transfer and master mode transfer.
495          */
496         uint32_t buf_afifo_rst:1;
497         /** dma_afifo_rst : WT; bitpos: [31]; default: 0;
498          *  Set this bit to reset DMA TX AFIFO, which is used to send data out in SPI slave DMA
499          *  controlled mode transfer.
500          */
501         uint32_t dma_afifo_rst:1;
502     };
503     uint32_t val;
504 } spi_dma_conf_reg_t;
505 
506 /** Type of slave register
507  *  SPI slave control register
508  */
509 typedef union {
510     struct {
511         /** clk_mode : R/W; bitpos: [1:0]; default: 0;
512          *  SPI clock mode bits. 0: SPI clock is off when CS inactive 1: SPI clock is delayed
513          *  one cycle after CS inactive 2: SPI clock is delayed two cycles after CS inactive 3:
514          *  SPI clock is alwasy on. Can be configured in CONF state.
515          */
516         uint32_t clk_mode:2;
517         /** clk_mode_13 : R/W; bitpos: [2]; default: 0;
518          *  {CPOL, CPHA},1: support spi clk mode 1 and 3, first edge output data B[0]/B[7].  0:
519          *  support spi clk mode 0 and 2, first edge output data B[1]/B[6].
520          */
521         uint32_t clk_mode_13:1;
522         /** rsck_data_out : R/W; bitpos: [3]; default: 0;
523          *  It saves half a cycle when tsck is the same as rsck. 1: output data at rsck posedge
524          *  0: output data at tsck posedge
525          */
526         uint32_t rsck_data_out:1;
527         uint32_t reserved_4:4;
528         /** slv_rddma_bitlen_en : R/W; bitpos: [8]; default: 0;
529          *  1: SPI_SLV_DATA_BITLEN stores data bit length of master-read-slave data length in
530          *  DMA controlled mode(Rd_DMA). 0: others
531          */
532         uint32_t slv_rddma_bitlen_en:1;
533         /** slv_wrdma_bitlen_en : R/W; bitpos: [9]; default: 0;
534          *  1: SPI_SLV_DATA_BITLEN stores data bit length of master-write-to-slave data length
535          *  in DMA controlled mode(Wr_DMA). 0: others
536          */
537         uint32_t slv_wrdma_bitlen_en:1;
538         /** slv_rdbuf_bitlen_en : R/W; bitpos: [10]; default: 0;
539          *  1: SPI_SLV_DATA_BITLEN stores data bit length of master-read-slave data length in
540          *  CPU controlled mode(Rd_BUF). 0: others
541          */
542         uint32_t slv_rdbuf_bitlen_en:1;
543         /** slv_wrbuf_bitlen_en : R/W; bitpos: [11]; default: 0;
544          *  1: SPI_SLV_DATA_BITLEN stores data bit length of master-write-to-slave data length
545          *  in CPU controlled mode(Wr_BUF). 0: others
546          */
547         uint32_t slv_wrbuf_bitlen_en:1;
548         uint32_t reserved_12:10;
549         /** dma_seg_magic_value : R/W; bitpos: [25:22]; default: 10;
550          *  The magic value of BM table in master DMA seg-trans.
551          */
552         uint32_t dma_seg_magic_value:4;
553         /** slave_mode : R/W; bitpos: [26]; default: 0;
554          *  Set SPI work mode. 1: slave mode 0: master mode.
555          */
556         uint32_t slave_mode:1;
557         /** soft_reset : WT; bitpos: [27]; default: 0;
558          *  Software reset enable, reset the spi clock line cs line and data lines. Can be
559          *  configured in CONF state.
560          */
561         uint32_t soft_reset:1;
562         /** usr_conf : R/W; bitpos: [28]; default: 0;
563          *  1: Enable the DMA CONF phase of current seg-trans operation, which means seg-trans
564          *  will start. 0: This is not seg-trans mode.
565          */
566         uint32_t usr_conf:1;
567         /** mst_fd_wait_dma_tx_data : R/W; bitpos: [29]; default: 0;
568          *  In master full-duplex mode, 1: GP-SPI will wait DMA TX data is ready before
569          *  starting SPI transfer. 0: GP-SPI does not wait DMA TX data before starting SPI
570          *  transfer.
571          */
572         uint32_t mst_fd_wait_dma_tx_data:1;
573         uint32_t reserved_30:2;
574     };
575     uint32_t val;
576 } spi_slave_reg_t;
577 
578 /** Type of slave1 register
579  *  SPI slave control register 1
580  */
581 typedef union {
582     struct {
583         /** slv_data_bitlen : R/W/SS; bitpos: [17:0]; default: 0;
584          *  The transferred data bit length in SPI slave FD and HD mode.
585          */
586         uint32_t slv_data_bitlen:18;
587         /** slv_last_command : R/W/SS; bitpos: [25:18]; default: 0;
588          *  In the slave mode it is the value of command.
589          */
590         uint32_t slv_last_command:8;
591         /** slv_last_addr : R/W/SS; bitpos: [31:26]; default: 0;
592          *  In the slave mode it is the value of address.
593          */
594         uint32_t slv_last_addr:6;
595     };
596     uint32_t val;
597 } spi_slave1_reg_t;
598 
599 
600 /** Group: Clock control registers */
601 /** Type of clock register
602  *  SPI clock control register
603  */
604 typedef union {
605     struct {
606         /** clkcnt_l : R/W; bitpos: [5:0]; default: 3;
607          *  In the master mode it must be equal to spi_clkcnt_N. In the slave mode it must be
608          *  0. Can be configured in CONF state.
609          */
610         uint32_t clkcnt_l:6;
611         /** clkcnt_h : R/W; bitpos: [11:6]; default: 1;
612          *  In the master mode it must be floor((spi_clkcnt_N+1)/2-1). In the slave mode it
613          *  must be 0. Can be configured in CONF state.
614          */
615         uint32_t clkcnt_h:6;
616         /** clkcnt_n : R/W; bitpos: [17:12]; default: 3;
617          *  In the master mode it is the divider of spi_clk. So spi_clk frequency is
618          *  system/(spi_clkdiv_pre+1)/(spi_clkcnt_N+1). Can be configured in CONF state.
619          */
620         uint32_t clkcnt_n:6;
621         /** clkdiv_pre : R/W; bitpos: [21:18]; default: 0;
622          *  In the master mode it is pre-divider of spi_clk.  Can be configured in CONF state.
623          */
624         uint32_t clkdiv_pre:4;
625         uint32_t reserved_22:9;
626         /** clk_equ_sysclk : R/W; bitpos: [31]; default: 1;
627          *  In the master mode 1: spi_clk is eqaul to system 0: spi_clk is divided from system
628          *  clock. Can be configured in CONF state.
629          */
630         uint32_t clk_equ_sysclk:1;
631     };
632     uint32_t val;
633 } spi_clock_reg_t;
634 
635 /** Type of clk_gate register
636  *  SPI module clock and register clock control
637  */
638 typedef union {
639     struct {
640         /** clk_en : R/W; bitpos: [0]; default: 0;
641          *  Set this bit to enable clk gate
642          */
643         uint32_t clk_en:1;
644         /** mst_clk_active : R/W; bitpos: [1]; default: 0;
645          *  Set this bit to power on the SPI module clock.
646          */
647         uint32_t mst_clk_active:1;
648         /** mst_clk_sel : R/W; bitpos: [2]; default: 0;
649          *  This bit is used to select SPI module clock source in master mode. 1: PLL_CLK_80M.
650          *  0: XTAL CLK.
651          */
652         uint32_t mst_clk_sel:1;
653         uint32_t reserved_3:29;
654     };
655     uint32_t val;
656 } spi_clk_gate_reg_t;
657 
658 
659 /** Group: Timing registers */
660 /** Type of din_mode register
661  *  SPI input delay mode configuration
662  */
663 typedef union {
664     struct {
665         /** din0_mode : R/W; bitpos: [1:0]; default: 0;
666          *  the input signals are delayed by SPI module clock cycles, 0: input without delayed,
667          *  1: input with the posedge of clk_apb,2 input with the negedge of clk_apb, 3: input
668          *  with the spi_clk. Can be configured in CONF state.
669          */
670         uint32_t din0_mode:2;
671         /** din1_mode : R/W; bitpos: [3:2]; default: 0;
672          *  the input signals are delayed by SPI module clock cycles, 0: input without delayed,
673          *  1: input with the posedge of clk_apb,2 input with the negedge of clk_apb, 3: input
674          *  with the spi_clk. Can be configured in CONF state.
675          */
676         uint32_t din1_mode:2;
677         /** din2_mode : R/W; bitpos: [5:4]; default: 0;
678          *  the input signals are delayed by SPI module clock cycles, 0: input without delayed,
679          *  1: input with the posedge of clk_apb,2 input with the negedge of clk_apb, 3: input
680          *  with the spi_clk. Can be configured in CONF state.
681          */
682         uint32_t din2_mode:2;
683         /** din3_mode : R/W; bitpos: [7:6]; default: 0;
684          *  the input signals are delayed by SPI module clock cycles, 0: input without delayed,
685          *  1: input with the posedge of clk_apb,2 input with the negedge of clk_apb, 3: input
686          *  with the spi_clk. Can be configured in CONF state.
687          */
688         uint32_t din3_mode:2;
689         /** din4_mode : HRO; bitpos: [9:8]; default: 0;
690          *  the input signals are delayed by SPI module clock cycles, 0: input without delayed,
691          *  1: input with the posedge of clk_apb,2 input with the negedge of clk_apb, 3: input
692          *  with the spi_clk. Can be configured in CONF state.
693          */
694         uint32_t din4_mode:2;
695         /** din5_mode : HRO; bitpos: [11:10]; default: 0;
696          *  the input signals are delayed by SPI module clock cycles, 0: input without delayed,
697          *  1: input at the (SPI_DIN5_NUM+1)th falling edge of clk_spi_mst,2 input at the
698          *  (SPI_DIN5_NUM+1)th rising edge of clk_hclk plus one clk_spi_mst rising edge cycle,
699          *  3: input at the (SPI_DIN5_NUM+1)th rising edge of clk_hclk plus one clk_spi_mst
700          *  falling edge cycle. Can be configured in CONF state.
701          */
702         uint32_t din5_mode:2;
703         /** din6_mode : HRO; bitpos: [13:12]; default: 0;
704          *  the input signals are delayed by SPI module clock cycles, 0: input without delayed,
705          *  1: input at the (SPI_DIN6_NUM+1)th falling edge of clk_spi_mst,2 input at the
706          *  (SPI_DIN6_NUM+1)th rising edge of clk_hclk plus one clk_spi_mst rising edge cycle,
707          *  3: input at the (SPI_DIN6_NUM+1)th rising edge of clk_hclk plus one clk_spi_mst
708          *  falling edge cycle. Can be configured in CONF state.
709          */
710         uint32_t din6_mode:2;
711         /** din7_mode : HRO; bitpos: [15:14]; default: 0;
712          *  the input signals are delayed by SPI module clock cycles, 0: input without delayed,
713          *  1: input at the (SPI_DIN7_NUM+1)th falling edge of clk_spi_mst,2 input at the
714          *  (SPI_DIN7_NUM+1)th rising edge of clk_hclk plus one clk_spi_mst rising edge cycle,
715          *  3: input at the (SPI_DIN7_NUM+1)th rising edge of clk_hclk plus one clk_spi_mst
716          *  falling edge cycle. Can be configured in CONF state.
717          */
718         uint32_t din7_mode:2;
719         /** timing_hclk_active : R/W; bitpos: [16]; default: 0;
720          *  1:enable hclk in SPI input timing module.  0: disable it. Can be configured in CONF
721          *  state.
722          */
723         uint32_t timing_hclk_active:1;
724         uint32_t reserved_17:15;
725     };
726     uint32_t val;
727 } spi_din_mode_reg_t;
728 
729 /** Type of din_num register
730  *  SPI input delay number configuration
731  */
732 typedef union {
733     struct {
734         /** din0_num : R/W; bitpos: [1:0]; default: 0;
735          *  the input signals are delayed by SPI module clock cycles, 0: delayed by 1 cycle, 1:
736          *  delayed by 2 cycles,...  Can be configured in CONF state.
737          */
738         uint32_t din0_num:2;
739         /** din1_num : R/W; bitpos: [3:2]; default: 0;
740          *  the input signals are delayed by SPI module clock cycles, 0: delayed by 1 cycle, 1:
741          *  delayed by 2 cycles,...  Can be configured in CONF state.
742          */
743         uint32_t din1_num:2;
744         /** din2_num : R/W; bitpos: [5:4]; default: 0;
745          *  the input signals are delayed by SPI module clock cycles, 0: delayed by 1 cycle, 1:
746          *  delayed by 2 cycles,...  Can be configured in CONF state.
747          */
748         uint32_t din2_num:2;
749         /** din3_num : R/W; bitpos: [7:6]; default: 0;
750          *  the input signals are delayed by SPI module clock cycles, 0: delayed by 1 cycle, 1:
751          *  delayed by 2 cycles,...  Can be configured in CONF state.
752          */
753         uint32_t din3_num:2;
754         /** din4_num : HRO; bitpos: [9:8]; default: 0;
755          *  the input signals are delayed by SPI module clock cycles, 0: delayed by 1 cycle, 1:
756          *  delayed by 2 cycles,...  Can be configured in CONF state.
757          */
758         uint32_t din4_num:2;
759         /** din5_num : HRO; bitpos: [11:10]; default: 0;
760          *  the input signals are delayed by SPI module clock cycles, 0: delayed by 1 cycle, 1:
761          *  delayed by 2 cycles,...  Can be configured in CONF state.
762          */
763         uint32_t din5_num:2;
764         /** din6_num : HRO; bitpos: [13:12]; default: 0;
765          *  the input signals are delayed by SPI module clock cycles, 0: delayed by 1 cycle, 1:
766          *  delayed by 2 cycles,...  Can be configured in CONF state.
767          */
768         uint32_t din6_num:2;
769         /** din7_num : HRO; bitpos: [15:14]; default: 0;
770          *  the input signals are delayed by SPI module clock cycles, 0: delayed by 1 cycle, 1:
771          *  delayed by 2 cycles,...  Can be configured in CONF state.
772          */
773         uint32_t din7_num:2;
774         uint32_t reserved_16:16;
775     };
776     uint32_t val;
777 } spi_din_num_reg_t;
778 
779 /** Type of dout_mode register
780  *  SPI output delay mode configuration
781  */
782 typedef union {
783     struct {
784         /** dout0_mode : R/W; bitpos: [0]; default: 0;
785          *  The output signal $n is delayed by the SPI module clock, 0: output without delayed,
786          *  1: output delay for a SPI module clock cycle at its negative edge. Can be
787          *  configured in CONF state.
788          */
789         uint32_t dout0_mode:1;
790         /** dout1_mode : R/W; bitpos: [1]; default: 0;
791          *  The output signal $n is delayed by the SPI module clock, 0: output without delayed,
792          *  1: output delay for a SPI module clock cycle at its negative edge. Can be
793          *  configured in CONF state.
794          */
795         uint32_t dout1_mode:1;
796         /** dout2_mode : R/W; bitpos: [2]; default: 0;
797          *  The output signal $n is delayed by the SPI module clock, 0: output without delayed,
798          *  1: output delay for a SPI module clock cycle at its negative edge. Can be
799          *  configured in CONF state.
800          */
801         uint32_t dout2_mode:1;
802         /** dout3_mode : R/W; bitpos: [3]; default: 0;
803          *  The output signal $n is delayed by the SPI module clock, 0: output without delayed,
804          *  1: output delay for a SPI module clock cycle at its negative edge. Can be
805          *  configured in CONF state.
806          */
807         uint32_t dout3_mode:1;
808         /** dout4_mode : HRO; bitpos: [4]; default: 0;
809          *  The output signal $n is delayed by the SPI module clock, 0: output without delayed,
810          *  1: output delay for a SPI module clock cycle at its negative edge. Can be
811          *  configured in CONF state.
812          */
813         uint32_t dout4_mode:1;
814         /** dout5_mode : HRO; bitpos: [5]; default: 0;
815          *  The output signal $n is delayed by the SPI module clock, 0: output without delayed,
816          *  1: output delay for a SPI module clock cycle at its negative edge. Can be
817          *  configured in CONF state.
818          */
819         uint32_t dout5_mode:1;
820         /** dout6_mode : HRO; bitpos: [6]; default: 0;
821          *  The output signal $n is delayed by the SPI module clock, 0: output without delayed,
822          *  1: output delay for a SPI module clock cycle at its negative edge. Can be
823          *  configured in CONF state.
824          */
825         uint32_t dout6_mode:1;
826         /** dout7_mode : HRO; bitpos: [7]; default: 0;
827          *  The output signal $n is delayed by the SPI module clock, 0: output without delayed,
828          *  1: output delay for a SPI module clock cycle at its negative edge. Can be
829          *  configured in CONF state.
830          */
831         uint32_t dout7_mode:1;
832         /** d_dqs_mode : HRO; bitpos: [8]; default: 0;
833          *  The output signal SPI_DQS is delayed by the SPI module clock, 0: output without
834          *  delayed, 1: output delay for a SPI module clock cycle at its negative edge. Can be
835          *  configured in CONF state.
836          */
837         uint32_t d_dqs_mode:1;
838         uint32_t reserved_9:23;
839     };
840     uint32_t val;
841 } spi_dout_mode_reg_t;
842 
843 
844 /** Group: Interrupt registers */
845 /** Type of dma_int_ena register
846  *  SPI interrupt enable register
847  */
848 typedef union {
849     struct {
850         /** dma_infifo_full_err_int_ena : R/W; bitpos: [0]; default: 0;
851          *  The enable bit for SPI_DMA_INFIFO_FULL_ERR_INT interrupt.
852          */
853         uint32_t dma_infifo_full_err_int_ena:1;
854         /** dma_outfifo_empty_err_int_ena : R/W; bitpos: [1]; default: 0;
855          *  The enable bit for SPI_DMA_OUTFIFO_EMPTY_ERR_INT interrupt.
856          */
857         uint32_t dma_outfifo_empty_err_int_ena:1;
858         /** slv_ex_qpi_int_ena : R/W; bitpos: [2]; default: 0;
859          *  The enable bit for SPI slave Ex_QPI interrupt.
860          */
861         uint32_t slv_ex_qpi_int_ena:1;
862         /** slv_en_qpi_int_ena : R/W; bitpos: [3]; default: 0;
863          *  The enable bit for SPI slave En_QPI interrupt.
864          */
865         uint32_t slv_en_qpi_int_ena:1;
866         /** slv_cmd7_int_ena : R/W; bitpos: [4]; default: 0;
867          *  The enable bit for SPI slave CMD7 interrupt.
868          */
869         uint32_t slv_cmd7_int_ena:1;
870         /** slv_cmd8_int_ena : R/W; bitpos: [5]; default: 0;
871          *  The enable bit for SPI slave CMD8 interrupt.
872          */
873         uint32_t slv_cmd8_int_ena:1;
874         /** slv_cmd9_int_ena : R/W; bitpos: [6]; default: 0;
875          *  The enable bit for SPI slave CMD9 interrupt.
876          */
877         uint32_t slv_cmd9_int_ena:1;
878         /** slv_cmda_int_ena : R/W; bitpos: [7]; default: 0;
879          *  The enable bit for SPI slave CMDA interrupt.
880          */
881         uint32_t slv_cmda_int_ena:1;
882         /** slv_rd_dma_done_int_ena : R/W; bitpos: [8]; default: 0;
883          *  The enable bit for SPI_SLV_RD_DMA_DONE_INT interrupt.
884          */
885         uint32_t slv_rd_dma_done_int_ena:1;
886         /** slv_wr_dma_done_int_ena : R/W; bitpos: [9]; default: 0;
887          *  The enable bit for SPI_SLV_WR_DMA_DONE_INT interrupt.
888          */
889         uint32_t slv_wr_dma_done_int_ena:1;
890         /** slv_rd_buf_done_int_ena : R/W; bitpos: [10]; default: 0;
891          *  The enable bit for SPI_SLV_RD_BUF_DONE_INT interrupt.
892          */
893         uint32_t slv_rd_buf_done_int_ena:1;
894         /** slv_wr_buf_done_int_ena : R/W; bitpos: [11]; default: 0;
895          *  The enable bit for SPI_SLV_WR_BUF_DONE_INT interrupt.
896          */
897         uint32_t slv_wr_buf_done_int_ena:1;
898         /** trans_done_int_ena : R/W; bitpos: [12]; default: 0;
899          *  The enable bit for SPI_TRANS_DONE_INT interrupt.
900          */
901         uint32_t trans_done_int_ena:1;
902         /** dma_seg_trans_done_int_ena : R/W; bitpos: [13]; default: 0;
903          *  The enable bit for SPI_DMA_SEG_TRANS_DONE_INT interrupt.
904          */
905         uint32_t dma_seg_trans_done_int_ena:1;
906         /** seg_magic_err_int_ena : R/W; bitpos: [14]; default: 0;
907          *  The enable bit for SPI_SEG_MAGIC_ERR_INT interrupt.
908          */
909         uint32_t seg_magic_err_int_ena:1;
910         /** slv_buf_addr_err_int_ena : R/W; bitpos: [15]; default: 0;
911          *  The enable bit for SPI_SLV_BUF_ADDR_ERR_INT interrupt.
912          */
913         uint32_t slv_buf_addr_err_int_ena:1;
914         /** slv_cmd_err_int_ena : R/W; bitpos: [16]; default: 0;
915          *  The enable bit for SPI_SLV_CMD_ERR_INT interrupt.
916          */
917         uint32_t slv_cmd_err_int_ena:1;
918         /** mst_rx_afifo_wfull_err_int_ena : R/W; bitpos: [17]; default: 0;
919          *  The enable bit for SPI_MST_RX_AFIFO_WFULL_ERR_INT interrupt.
920          */
921         uint32_t mst_rx_afifo_wfull_err_int_ena:1;
922         /** mst_tx_afifo_rempty_err_int_ena : R/W; bitpos: [18]; default: 0;
923          *  The enable bit for SPI_MST_TX_AFIFO_REMPTY_ERR_INT interrupt.
924          */
925         uint32_t mst_tx_afifo_rempty_err_int_ena:1;
926         /** app2_int_ena : R/W; bitpos: [19]; default: 0;
927          *  The enable bit for SPI_APP2_INT interrupt.
928          */
929         uint32_t app2_int_ena:1;
930         /** app1_int_ena : R/W; bitpos: [20]; default: 0;
931          *  The enable bit for SPI_APP1_INT interrupt.
932          */
933         uint32_t app1_int_ena:1;
934         uint32_t reserved_21:11;
935     };
936     uint32_t val;
937 } spi_dma_int_ena_reg_t;
938 
939 /** Type of dma_int_clr register
940  *  SPI interrupt clear register
941  */
942 typedef union {
943     struct {
944         /** dma_infifo_full_err_int_clr : WT; bitpos: [0]; default: 0;
945          *  The clear bit for SPI_DMA_INFIFO_FULL_ERR_INT interrupt.
946          */
947         uint32_t dma_infifo_full_err_int_clr:1;
948         /** dma_outfifo_empty_err_int_clr : WT; bitpos: [1]; default: 0;
949          *  The clear bit for SPI_DMA_OUTFIFO_EMPTY_ERR_INT interrupt.
950          */
951         uint32_t dma_outfifo_empty_err_int_clr:1;
952         /** slv_ex_qpi_int_clr : WT; bitpos: [2]; default: 0;
953          *  The clear bit for SPI slave Ex_QPI interrupt.
954          */
955         uint32_t slv_ex_qpi_int_clr:1;
956         /** slv_en_qpi_int_clr : WT; bitpos: [3]; default: 0;
957          *  The clear bit for SPI slave En_QPI interrupt.
958          */
959         uint32_t slv_en_qpi_int_clr:1;
960         /** slv_cmd7_int_clr : WT; bitpos: [4]; default: 0;
961          *  The clear bit for SPI slave CMD7 interrupt.
962          */
963         uint32_t slv_cmd7_int_clr:1;
964         /** slv_cmd8_int_clr : WT; bitpos: [5]; default: 0;
965          *  The clear bit for SPI slave CMD8 interrupt.
966          */
967         uint32_t slv_cmd8_int_clr:1;
968         /** slv_cmd9_int_clr : WT; bitpos: [6]; default: 0;
969          *  The clear bit for SPI slave CMD9 interrupt.
970          */
971         uint32_t slv_cmd9_int_clr:1;
972         /** slv_cmda_int_clr : WT; bitpos: [7]; default: 0;
973          *  The clear bit for SPI slave CMDA interrupt.
974          */
975         uint32_t slv_cmda_int_clr:1;
976         /** slv_rd_dma_done_int_clr : WT; bitpos: [8]; default: 0;
977          *  The clear bit for SPI_SLV_RD_DMA_DONE_INT interrupt.
978          */
979         uint32_t slv_rd_dma_done_int_clr:1;
980         /** slv_wr_dma_done_int_clr : WT; bitpos: [9]; default: 0;
981          *  The clear bit for SPI_SLV_WR_DMA_DONE_INT interrupt.
982          */
983         uint32_t slv_wr_dma_done_int_clr:1;
984         /** slv_rd_buf_done_int_clr : WT; bitpos: [10]; default: 0;
985          *  The clear bit for SPI_SLV_RD_BUF_DONE_INT interrupt.
986          */
987         uint32_t slv_rd_buf_done_int_clr:1;
988         /** slv_wr_buf_done_int_clr : WT; bitpos: [11]; default: 0;
989          *  The clear bit for SPI_SLV_WR_BUF_DONE_INT interrupt.
990          */
991         uint32_t slv_wr_buf_done_int_clr:1;
992         /** trans_done_int_clr : WT; bitpos: [12]; default: 0;
993          *  The clear bit for SPI_TRANS_DONE_INT interrupt.
994          */
995         uint32_t trans_done_int_clr:1;
996         /** dma_seg_trans_done_int_clr : WT; bitpos: [13]; default: 0;
997          *  The clear bit for SPI_DMA_SEG_TRANS_DONE_INT interrupt.
998          */
999         uint32_t dma_seg_trans_done_int_clr:1;
1000         /** seg_magic_err_int_clr : WT; bitpos: [14]; default: 0;
1001          *  The clear bit for SPI_SEG_MAGIC_ERR_INT interrupt.
1002          */
1003         uint32_t seg_magic_err_int_clr:1;
1004         /** slv_buf_addr_err_int_clr : WT; bitpos: [15]; default: 0;
1005          *  The clear bit for SPI_SLV_BUF_ADDR_ERR_INT interrupt.
1006          */
1007         uint32_t slv_buf_addr_err_int_clr:1;
1008         /** slv_cmd_err_int_clr : WT; bitpos: [16]; default: 0;
1009          *  The clear bit for SPI_SLV_CMD_ERR_INT interrupt.
1010          */
1011         uint32_t slv_cmd_err_int_clr:1;
1012         /** mst_rx_afifo_wfull_err_int_clr : WT; bitpos: [17]; default: 0;
1013          *  The clear bit for SPI_MST_RX_AFIFO_WFULL_ERR_INT interrupt.
1014          */
1015         uint32_t mst_rx_afifo_wfull_err_int_clr:1;
1016         /** mst_tx_afifo_rempty_err_int_clr : WT; bitpos: [18]; default: 0;
1017          *  The clear bit for SPI_MST_TX_AFIFO_REMPTY_ERR_INT interrupt.
1018          */
1019         uint32_t mst_tx_afifo_rempty_err_int_clr:1;
1020         /** app2_int_clr : WT; bitpos: [19]; default: 0;
1021          *  The clear bit for SPI_APP2_INT interrupt.
1022          */
1023         uint32_t app2_int_clr:1;
1024         /** app1_int_clr : WT; bitpos: [20]; default: 0;
1025          *  The clear bit for SPI_APP1_INT interrupt.
1026          */
1027         uint32_t app1_int_clr:1;
1028         uint32_t reserved_21:11;
1029     };
1030     uint32_t val;
1031 } spi_dma_int_clr_reg_t;
1032 
1033 /** Type of dma_int_raw register
1034  *  SPI interrupt raw register
1035  */
1036 typedef union {
1037     struct {
1038         /** dma_infifo_full_err_int_raw : R/WTC/SS; bitpos: [0]; default: 0;
1039          *  1: The current data rate of DMA Rx is smaller than that of SPI, which will lose the
1040          *  receive data.  0: Others.
1041          */
1042         uint32_t dma_infifo_full_err_int_raw:1;
1043         /** dma_outfifo_empty_err_int_raw : R/WTC/SS; bitpos: [1]; default: 0;
1044          *  1: The current data rate of DMA TX is smaller than that of SPI. SPI will stop in
1045          *  master mode and send out all 0 in slave mode.  0: Others.
1046          */
1047         uint32_t dma_outfifo_empty_err_int_raw:1;
1048         /** slv_ex_qpi_int_raw : R/WTC/SS; bitpos: [2]; default: 0;
1049          *  The raw bit for SPI slave Ex_QPI interrupt. 1: SPI slave mode Ex_QPI transmission
1050          *  is ended. 0: Others.
1051          */
1052         uint32_t slv_ex_qpi_int_raw:1;
1053         /** slv_en_qpi_int_raw : R/WTC/SS; bitpos: [3]; default: 0;
1054          *  The raw bit for SPI slave En_QPI interrupt. 1: SPI slave mode En_QPI transmission
1055          *  is ended. 0: Others.
1056          */
1057         uint32_t slv_en_qpi_int_raw:1;
1058         /** slv_cmd7_int_raw : R/WTC/SS; bitpos: [4]; default: 0;
1059          *  The raw bit for SPI slave CMD7 interrupt. 1: SPI slave mode CMD7 transmission is
1060          *  ended. 0: Others.
1061          */
1062         uint32_t slv_cmd7_int_raw:1;
1063         /** slv_cmd8_int_raw : R/WTC/SS; bitpos: [5]; default: 0;
1064          *  The raw bit for SPI slave CMD8 interrupt. 1: SPI slave mode CMD8 transmission is
1065          *  ended. 0: Others.
1066          */
1067         uint32_t slv_cmd8_int_raw:1;
1068         /** slv_cmd9_int_raw : R/WTC/SS; bitpos: [6]; default: 0;
1069          *  The raw bit for SPI slave CMD9 interrupt. 1: SPI slave mode CMD9 transmission is
1070          *  ended. 0: Others.
1071          */
1072         uint32_t slv_cmd9_int_raw:1;
1073         /** slv_cmda_int_raw : R/WTC/SS; bitpos: [7]; default: 0;
1074          *  The raw bit for SPI slave CMDA interrupt. 1: SPI slave mode CMDA transmission is
1075          *  ended. 0: Others.
1076          */
1077         uint32_t slv_cmda_int_raw:1;
1078         /** slv_rd_dma_done_int_raw : R/WTC/SS; bitpos: [8]; default: 0;
1079          *  The raw bit for SPI_SLV_RD_DMA_DONE_INT interrupt. 1: SPI slave mode Rd_DMA
1080          *  transmission is ended. 0: Others.
1081          */
1082         uint32_t slv_rd_dma_done_int_raw:1;
1083         /** slv_wr_dma_done_int_raw : R/WTC/SS; bitpos: [9]; default: 0;
1084          *  The raw bit for SPI_SLV_WR_DMA_DONE_INT interrupt. 1: SPI slave mode Wr_DMA
1085          *  transmission is ended. 0: Others.
1086          */
1087         uint32_t slv_wr_dma_done_int_raw:1;
1088         /** slv_rd_buf_done_int_raw : R/WTC/SS; bitpos: [10]; default: 0;
1089          *  The raw bit for SPI_SLV_RD_BUF_DONE_INT interrupt. 1: SPI slave mode Rd_BUF
1090          *  transmission is ended. 0: Others.
1091          */
1092         uint32_t slv_rd_buf_done_int_raw:1;
1093         /** slv_wr_buf_done_int_raw : R/WTC/SS; bitpos: [11]; default: 0;
1094          *  The raw bit for SPI_SLV_WR_BUF_DONE_INT interrupt. 1: SPI slave mode Wr_BUF
1095          *  transmission is ended. 0: Others.
1096          */
1097         uint32_t slv_wr_buf_done_int_raw:1;
1098         /** trans_done_int_raw : R/WTC/SS; bitpos: [12]; default: 0;
1099          *  The raw bit for SPI_TRANS_DONE_INT interrupt. 1: SPI master mode transmission is
1100          *  ended. 0: others.
1101          */
1102         uint32_t trans_done_int_raw:1;
1103         /** dma_seg_trans_done_int_raw : R/WTC/SS; bitpos: [13]; default: 0;
1104          *  The raw bit for SPI_DMA_SEG_TRANS_DONE_INT interrupt. 1:  spi master DMA
1105          *  full-duplex/half-duplex seg-conf-trans ends or slave half-duplex seg-trans ends.
1106          *  And data has been pushed to corresponding memory.  0:  seg-conf-trans or seg-trans
1107          *  is not ended or not occurred.
1108          */
1109         uint32_t dma_seg_trans_done_int_raw:1;
1110         /** seg_magic_err_int_raw : R/WTC/SS; bitpos: [14]; default: 0;
1111          *  The raw bit for SPI_SEG_MAGIC_ERR_INT interrupt. 1: The magic value in CONF buffer
1112          *  is error in the DMA seg-conf-trans. 0: others.
1113          */
1114         uint32_t seg_magic_err_int_raw:1;
1115         /** slv_buf_addr_err_int_raw : R/WTC/SS; bitpos: [15]; default: 0;
1116          *  The raw bit for SPI_SLV_BUF_ADDR_ERR_INT interrupt. 1: The accessing data address
1117          *  of the current SPI slave mode CPU controlled FD, Wr_BUF or Rd_BUF transmission is
1118          *  bigger than 63. 0: Others.
1119          */
1120         uint32_t slv_buf_addr_err_int_raw:1;
1121         /** slv_cmd_err_int_raw : R/WTC/SS; bitpos: [16]; default: 0;
1122          *  The raw bit for SPI_SLV_CMD_ERR_INT interrupt. 1: The slave command value in the
1123          *  current SPI slave HD mode transmission is not supported. 0: Others.
1124          */
1125         uint32_t slv_cmd_err_int_raw:1;
1126         /** mst_rx_afifo_wfull_err_int_raw : R/WTC/SS; bitpos: [17]; default: 0;
1127          *  The raw bit for SPI_MST_RX_AFIFO_WFULL_ERR_INT interrupt. 1: There is a RX AFIFO
1128          *  write-full error when SPI inputs data in master mode. 0: Others.
1129          */
1130         uint32_t mst_rx_afifo_wfull_err_int_raw:1;
1131         /** mst_tx_afifo_rempty_err_int_raw : R/WTC/SS; bitpos: [18]; default: 0;
1132          *  The raw bit for SPI_MST_TX_AFIFO_REMPTY_ERR_INT interrupt. 1: There is a TX BUF
1133          *  AFIFO read-empty error when SPI outputs data in master mode. 0: Others.
1134          */
1135         uint32_t mst_tx_afifo_rempty_err_int_raw:1;
1136         /** app2_int_raw : R/WTC/SS; bitpos: [19]; default: 0;
1137          *  The raw bit for SPI_APP2_INT interrupt. The value is only controlled by software.
1138          */
1139         uint32_t app2_int_raw:1;
1140         /** app1_int_raw : R/WTC/SS; bitpos: [20]; default: 0;
1141          *  The raw bit for SPI_APP1_INT interrupt. The value is only controlled by software.
1142          */
1143         uint32_t app1_int_raw:1;
1144         uint32_t reserved_21:11;
1145     };
1146     uint32_t val;
1147 } spi_dma_int_raw_reg_t;
1148 
1149 /** Type of dma_int_st register
1150  *  SPI interrupt status register
1151  */
1152 typedef union {
1153     struct {
1154         /** dma_infifo_full_err_int_st : RO; bitpos: [0]; default: 0;
1155          *  The status bit for SPI_DMA_INFIFO_FULL_ERR_INT interrupt.
1156          */
1157         uint32_t dma_infifo_full_err_int_st:1;
1158         /** dma_outfifo_empty_err_int_st : RO; bitpos: [1]; default: 0;
1159          *  The status bit for SPI_DMA_OUTFIFO_EMPTY_ERR_INT interrupt.
1160          */
1161         uint32_t dma_outfifo_empty_err_int_st:1;
1162         /** slv_ex_qpi_int_st : RO; bitpos: [2]; default: 0;
1163          *  The status bit for SPI slave Ex_QPI interrupt.
1164          */
1165         uint32_t slv_ex_qpi_int_st:1;
1166         /** slv_en_qpi_int_st : RO; bitpos: [3]; default: 0;
1167          *  The status bit for SPI slave En_QPI interrupt.
1168          */
1169         uint32_t slv_en_qpi_int_st:1;
1170         /** slv_cmd7_int_st : RO; bitpos: [4]; default: 0;
1171          *  The status bit for SPI slave CMD7 interrupt.
1172          */
1173         uint32_t slv_cmd7_int_st:1;
1174         /** slv_cmd8_int_st : RO; bitpos: [5]; default: 0;
1175          *  The status bit for SPI slave CMD8 interrupt.
1176          */
1177         uint32_t slv_cmd8_int_st:1;
1178         /** slv_cmd9_int_st : RO; bitpos: [6]; default: 0;
1179          *  The status bit for SPI slave CMD9 interrupt.
1180          */
1181         uint32_t slv_cmd9_int_st:1;
1182         /** slv_cmda_int_st : RO; bitpos: [7]; default: 0;
1183          *  The status bit for SPI slave CMDA interrupt.
1184          */
1185         uint32_t slv_cmda_int_st:1;
1186         /** slv_rd_dma_done_int_st : RO; bitpos: [8]; default: 0;
1187          *  The status bit for SPI_SLV_RD_DMA_DONE_INT interrupt.
1188          */
1189         uint32_t slv_rd_dma_done_int_st:1;
1190         /** slv_wr_dma_done_int_st : RO; bitpos: [9]; default: 0;
1191          *  The status bit for SPI_SLV_WR_DMA_DONE_INT interrupt.
1192          */
1193         uint32_t slv_wr_dma_done_int_st:1;
1194         /** slv_rd_buf_done_int_st : RO; bitpos: [10]; default: 0;
1195          *  The status bit for SPI_SLV_RD_BUF_DONE_INT interrupt.
1196          */
1197         uint32_t slv_rd_buf_done_int_st:1;
1198         /** slv_wr_buf_done_int_st : RO; bitpos: [11]; default: 0;
1199          *  The status bit for SPI_SLV_WR_BUF_DONE_INT interrupt.
1200          */
1201         uint32_t slv_wr_buf_done_int_st:1;
1202         /** trans_done_int_st : RO; bitpos: [12]; default: 0;
1203          *  The status bit for SPI_TRANS_DONE_INT interrupt.
1204          */
1205         uint32_t trans_done_int_st:1;
1206         /** dma_seg_trans_done_int_st : RO; bitpos: [13]; default: 0;
1207          *  The status bit for SPI_DMA_SEG_TRANS_DONE_INT interrupt.
1208          */
1209         uint32_t dma_seg_trans_done_int_st:1;
1210         /** seg_magic_err_int_st : RO; bitpos: [14]; default: 0;
1211          *  The status bit for SPI_SEG_MAGIC_ERR_INT interrupt.
1212          */
1213         uint32_t seg_magic_err_int_st:1;
1214         /** slv_buf_addr_err_int_st : RO; bitpos: [15]; default: 0;
1215          *  The status bit for SPI_SLV_BUF_ADDR_ERR_INT interrupt.
1216          */
1217         uint32_t slv_buf_addr_err_int_st:1;
1218         /** slv_cmd_err_int_st : RO; bitpos: [16]; default: 0;
1219          *  The status bit for SPI_SLV_CMD_ERR_INT interrupt.
1220          */
1221         uint32_t slv_cmd_err_int_st:1;
1222         /** mst_rx_afifo_wfull_err_int_st : RO; bitpos: [17]; default: 0;
1223          *  The status bit for SPI_MST_RX_AFIFO_WFULL_ERR_INT interrupt.
1224          */
1225         uint32_t mst_rx_afifo_wfull_err_int_st:1;
1226         /** mst_tx_afifo_rempty_err_int_st : RO; bitpos: [18]; default: 0;
1227          *  The status bit for SPI_MST_TX_AFIFO_REMPTY_ERR_INT interrupt.
1228          */
1229         uint32_t mst_tx_afifo_rempty_err_int_st:1;
1230         /** app2_int_st : RO; bitpos: [19]; default: 0;
1231          *  The status bit for SPI_APP2_INT interrupt.
1232          */
1233         uint32_t app2_int_st:1;
1234         /** app1_int_st : RO; bitpos: [20]; default: 0;
1235          *  The status bit for SPI_APP1_INT interrupt.
1236          */
1237         uint32_t app1_int_st:1;
1238         uint32_t reserved_21:11;
1239     };
1240     uint32_t val;
1241 } spi_dma_int_st_reg_t;
1242 
1243 /** Type of dma_int_set register
1244  *  SPI interrupt software set register
1245  */
1246 typedef union {
1247     struct {
1248         /** dma_infifo_full_err_int_set : WT; bitpos: [0]; default: 0;
1249          *  The software set bit for SPI_DMA_INFIFO_FULL_ERR_INT interrupt.
1250          */
1251         uint32_t dma_infifo_full_err_int_set:1;
1252         /** dma_outfifo_empty_err_int_set : WT; bitpos: [1]; default: 0;
1253          *  The software set bit for SPI_DMA_OUTFIFO_EMPTY_ERR_INT interrupt.
1254          */
1255         uint32_t dma_outfifo_empty_err_int_set:1;
1256         /** slv_ex_qpi_int_set : WT; bitpos: [2]; default: 0;
1257          *  The software set bit for SPI slave Ex_QPI interrupt.
1258          */
1259         uint32_t slv_ex_qpi_int_set:1;
1260         /** slv_en_qpi_int_set : WT; bitpos: [3]; default: 0;
1261          *  The software set bit for SPI slave En_QPI interrupt.
1262          */
1263         uint32_t slv_en_qpi_int_set:1;
1264         /** slv_cmd7_int_set : WT; bitpos: [4]; default: 0;
1265          *  The software set bit for SPI slave CMD7 interrupt.
1266          */
1267         uint32_t slv_cmd7_int_set:1;
1268         /** slv_cmd8_int_set : WT; bitpos: [5]; default: 0;
1269          *  The software set bit for SPI slave CMD8 interrupt.
1270          */
1271         uint32_t slv_cmd8_int_set:1;
1272         /** slv_cmd9_int_set : WT; bitpos: [6]; default: 0;
1273          *  The software set bit for SPI slave CMD9 interrupt.
1274          */
1275         uint32_t slv_cmd9_int_set:1;
1276         /** slv_cmda_int_set : WT; bitpos: [7]; default: 0;
1277          *  The software set bit for SPI slave CMDA interrupt.
1278          */
1279         uint32_t slv_cmda_int_set:1;
1280         /** slv_rd_dma_done_int_set : WT; bitpos: [8]; default: 0;
1281          *  The software set bit for SPI_SLV_RD_DMA_DONE_INT interrupt.
1282          */
1283         uint32_t slv_rd_dma_done_int_set:1;
1284         /** slv_wr_dma_done_int_set : WT; bitpos: [9]; default: 0;
1285          *  The software set bit for SPI_SLV_WR_DMA_DONE_INT interrupt.
1286          */
1287         uint32_t slv_wr_dma_done_int_set:1;
1288         /** slv_rd_buf_done_int_set : WT; bitpos: [10]; default: 0;
1289          *  The software set bit for SPI_SLV_RD_BUF_DONE_INT interrupt.
1290          */
1291         uint32_t slv_rd_buf_done_int_set:1;
1292         /** slv_wr_buf_done_int_set : WT; bitpos: [11]; default: 0;
1293          *  The software set bit for SPI_SLV_WR_BUF_DONE_INT interrupt.
1294          */
1295         uint32_t slv_wr_buf_done_int_set:1;
1296         /** trans_done_int_set : WT; bitpos: [12]; default: 0;
1297          *  The software set bit for SPI_TRANS_DONE_INT interrupt.
1298          */
1299         uint32_t trans_done_int_set:1;
1300         /** dma_seg_trans_done_int_set : WT; bitpos: [13]; default: 0;
1301          *  The software set bit for SPI_DMA_SEG_TRANS_DONE_INT interrupt.
1302          */
1303         uint32_t dma_seg_trans_done_int_set:1;
1304         /** seg_magic_err_int_set : WT; bitpos: [14]; default: 0;
1305          *  The software set bit for SPI_SEG_MAGIC_ERR_INT interrupt.
1306          */
1307         uint32_t seg_magic_err_int_set:1;
1308         /** slv_buf_addr_err_int_set : WT; bitpos: [15]; default: 0;
1309          *  The software set bit for SPI_SLV_BUF_ADDR_ERR_INT interrupt.
1310          */
1311         uint32_t slv_buf_addr_err_int_set:1;
1312         /** slv_cmd_err_int_set : WT; bitpos: [16]; default: 0;
1313          *  The software set bit for SPI_SLV_CMD_ERR_INT interrupt.
1314          */
1315         uint32_t slv_cmd_err_int_set:1;
1316         /** mst_rx_afifo_wfull_err_int_set : WT; bitpos: [17]; default: 0;
1317          *  The software set bit for SPI_MST_RX_AFIFO_WFULL_ERR_INT interrupt.
1318          */
1319         uint32_t mst_rx_afifo_wfull_err_int_set:1;
1320         /** mst_tx_afifo_rempty_err_int_set : WT; bitpos: [18]; default: 0;
1321          *  The software set bit for SPI_MST_TX_AFIFO_REMPTY_ERR_INT interrupt.
1322          */
1323         uint32_t mst_tx_afifo_rempty_err_int_set:1;
1324         /** app2_int_set : WT; bitpos: [19]; default: 0;
1325          *  The software set bit for SPI_APP2_INT interrupt.
1326          */
1327         uint32_t app2_int_set:1;
1328         /** app1_int_set : WT; bitpos: [20]; default: 0;
1329          *  The software set bit for SPI_APP1_INT interrupt.
1330          */
1331         uint32_t app1_int_set:1;
1332         uint32_t reserved_21:11;
1333     };
1334     uint32_t val;
1335 } spi_dma_int_set_reg_t;
1336 
1337 
1338 /** Group: CPU-controlled data buffer */
1339 /** Type of w0 register
1340  *  SPI CPU-controlled buffer0
1341  */
1342 typedef union {
1343     struct {
1344         /** buf0 : R/W/SS; bitpos: [31:0]; default: 0;
1345          *  data buffer
1346          */
1347         uint32_t buf0:32;
1348     };
1349     uint32_t val;
1350 } spi_wn_reg_t;
1351 
1352 
1353 /** Group: Version register */
1354 /** Type of date register
1355  *  Version control
1356  */
1357 typedef union {
1358     struct {
1359         /** date : R/W; bitpos: [27:0]; default: 35656448;
1360          *  SPI register version.
1361          */
1362         uint32_t date:28;
1363         uint32_t reserved_28:4;
1364     };
1365     uint32_t val;
1366 } spi_date_reg_t;
1367 
1368 
1369 typedef struct {
1370     volatile spi_cmd_reg_t cmd;
1371     volatile spi_addr_reg_t addr;
1372     volatile spi_ctrl_reg_t ctrl;
1373     volatile spi_clock_reg_t clock;
1374     volatile spi_user_reg_t user;
1375     volatile spi_user1_reg_t user1;
1376     volatile spi_user2_reg_t user2;
1377     volatile spi_ms_dlen_reg_t ms_dlen;
1378     volatile spi_misc_reg_t misc;
1379     volatile spi_din_mode_reg_t din_mode;
1380     volatile spi_din_num_reg_t din_num;
1381     volatile spi_dout_mode_reg_t dout_mode;
1382     volatile spi_dma_conf_reg_t dma_conf;
1383     volatile spi_dma_int_ena_reg_t dma_int_ena;
1384     volatile spi_dma_int_clr_reg_t dma_int_clr;
1385     volatile spi_dma_int_raw_reg_t dma_int_raw;
1386     volatile spi_dma_int_st_reg_t dma_int_st;
1387     volatile spi_dma_int_set_reg_t dma_int_set;
1388     uint32_t reserved_048[20];
1389     volatile spi_wn_reg_t data_buf[16];
1390     uint32_t reserved_0d8[2];
1391     volatile spi_slave_reg_t slave;
1392     volatile spi_slave1_reg_t slave1;
1393     volatile spi_clk_gate_reg_t clk_gate;
1394     uint32_t reserved_0ec;
1395     volatile spi_date_reg_t date;
1396 } spi_dev_t;
1397 
1398 extern spi_dev_t GPSPI2;
1399 
1400 #ifndef __cplusplus
1401 _Static_assert(sizeof(spi_dev_t) == 0xf4, "Invalid size of spi_dev_t structure");
1402 #endif
1403 
1404 #ifdef __cplusplus
1405 }
1406 #endif
1407