HPM SDK
HPMicro Software Development Kit
hpm_spi_regs.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2021-2025 HPMicro
3  *
4  * SPDX-License-Identifier: BSD-3-Clause
5  *
6  */
7 
8 
9 #ifndef HPM_SPI_H
10 #define HPM_SPI_H
11 
12 typedef struct {
13  __R uint8_t RESERVED0[16]; /* 0x0 - 0xF: Reserved */
14  __RW uint32_t TRANSFMT; /* 0x10: Transfer Format Register */
15  __R uint8_t RESERVED1[12]; /* 0x14 - 0x1F: Reserved */
16  __RW uint32_t TRANSCTRL; /* 0x20: Transfer Control Register */
17  __RW uint32_t CMD; /* 0x24: Command Register */
18  __RW uint32_t ADDR; /* 0x28: Address Register */
19  __RW uint32_t DATA; /* 0x2C: Data Register */
20  __RW uint32_t CTRL; /* 0x30: Control Register */
21  __R uint32_t STATUS; /* 0x34: Status Register */
22  __RW uint32_t INTREN; /* 0x38: Interrupt Enable Register */
23  __W uint32_t INTRST; /* 0x3C: Interrupt Status Register */
24  __RW uint32_t TIMING; /* 0x40: Interface Timing Register */
25  __R uint8_t RESERVED2[28]; /* 0x44 - 0x5F: Reserved */
26  __RW uint32_t SLVST; /* 0x60: Slave Status Register */
27  __R uint32_t SLVDATACNT; /* 0x64: Slave Data Count Register */
28  __R uint8_t RESERVED3[20]; /* 0x68 - 0x7B: Reserved */
29  __R uint32_t CONFIG; /* 0x7C: Configuration Register */
30 } SPI_Type;
31 
32 
33 /* Bitfield definition for register: TRANSFMT */
34 /*
35  * ADDRLEN (RW)
36  *
37  * Address length in bytes
38  * 0x0: 1 byte
39  * 0x1: 2 bytes
40  * 0x2: 3 bytes
41  * 0x3: 4 bytes
42  */
43 #define SPI_TRANSFMT_ADDRLEN_MASK (0x30000UL)
44 #define SPI_TRANSFMT_ADDRLEN_SHIFT (16U)
45 #define SPI_TRANSFMT_ADDRLEN_SET(x) (((uint32_t)(x) << SPI_TRANSFMT_ADDRLEN_SHIFT) & SPI_TRANSFMT_ADDRLEN_MASK)
46 #define SPI_TRANSFMT_ADDRLEN_GET(x) (((uint32_t)(x) & SPI_TRANSFMT_ADDRLEN_MASK) >> SPI_TRANSFMT_ADDRLEN_SHIFT)
47 
48 /*
49  * DATALEN (RW)
50  *
51  * The length of each data unit in bits
52  * The actual bit number of a data unit is (DataLen + 1)
53  */
54 #define SPI_TRANSFMT_DATALEN_MASK (0x1F00U)
55 #define SPI_TRANSFMT_DATALEN_SHIFT (8U)
56 #define SPI_TRANSFMT_DATALEN_SET(x) (((uint32_t)(x) << SPI_TRANSFMT_DATALEN_SHIFT) & SPI_TRANSFMT_DATALEN_MASK)
57 #define SPI_TRANSFMT_DATALEN_GET(x) (((uint32_t)(x) & SPI_TRANSFMT_DATALEN_MASK) >> SPI_TRANSFMT_DATALEN_SHIFT)
58 
59 /*
60  * DATAMERGE (RW)
61  *
62  * Enable Data Merge mode, which does automatic data split on write and data coalescing on read.
63  * This bit only takes effect when DataLen = 0x7. Under Data Merge mode, each write to the Data Register will transmit all fourbytes of the write data; each read from the Data Register will retrieve four bytes of received data as a single word data.
64  * When Data Merge mode is disabled, only the least (DataLen+1) significient bits of the Data Register are valid for read/write operations; no automatic data split/coalescing will be performed.
65  */
66 #define SPI_TRANSFMT_DATAMERGE_MASK (0x80U)
67 #define SPI_TRANSFMT_DATAMERGE_SHIFT (7U)
68 #define SPI_TRANSFMT_DATAMERGE_SET(x) (((uint32_t)(x) << SPI_TRANSFMT_DATAMERGE_SHIFT) & SPI_TRANSFMT_DATAMERGE_MASK)
69 #define SPI_TRANSFMT_DATAMERGE_GET(x) (((uint32_t)(x) & SPI_TRANSFMT_DATAMERGE_MASK) >> SPI_TRANSFMT_DATAMERGE_SHIFT)
70 
71 /*
72  * MOSIBIDIR (RW)
73  *
74  * Bi-directional MOSI in regular (single) mode
75  * 0x0: MOSI is uni-directional signal in regular mode.
76  * 0x1: MOSI is bi-directional signal in regular mode. This bi-directional signal replaces the two
77  */
78 #define SPI_TRANSFMT_MOSIBIDIR_MASK (0x10U)
79 #define SPI_TRANSFMT_MOSIBIDIR_SHIFT (4U)
80 #define SPI_TRANSFMT_MOSIBIDIR_SET(x) (((uint32_t)(x) << SPI_TRANSFMT_MOSIBIDIR_SHIFT) & SPI_TRANSFMT_MOSIBIDIR_MASK)
81 #define SPI_TRANSFMT_MOSIBIDIR_GET(x) (((uint32_t)(x) & SPI_TRANSFMT_MOSIBIDIR_MASK) >> SPI_TRANSFMT_MOSIBIDIR_SHIFT)
82 
83 /*
84  * LSB (RW)
85  *
86  * Transfer data with the least significant bit first
87  * 0x0: Most significant bit first
88  * 0x1: Least significant bit first
89  */
90 #define SPI_TRANSFMT_LSB_MASK (0x8U)
91 #define SPI_TRANSFMT_LSB_SHIFT (3U)
92 #define SPI_TRANSFMT_LSB_SET(x) (((uint32_t)(x) << SPI_TRANSFMT_LSB_SHIFT) & SPI_TRANSFMT_LSB_MASK)
93 #define SPI_TRANSFMT_LSB_GET(x) (((uint32_t)(x) & SPI_TRANSFMT_LSB_MASK) >> SPI_TRANSFMT_LSB_SHIFT)
94 
95 /*
96  * SLVMODE (RW)
97  *
98  * SPI Master/Slave mode selection
99  * 0x0: Master mode
100  * 0x1: Slave mode
101  */
102 #define SPI_TRANSFMT_SLVMODE_MASK (0x4U)
103 #define SPI_TRANSFMT_SLVMODE_SHIFT (2U)
104 #define SPI_TRANSFMT_SLVMODE_SET(x) (((uint32_t)(x) << SPI_TRANSFMT_SLVMODE_SHIFT) & SPI_TRANSFMT_SLVMODE_MASK)
105 #define SPI_TRANSFMT_SLVMODE_GET(x) (((uint32_t)(x) & SPI_TRANSFMT_SLVMODE_MASK) >> SPI_TRANSFMT_SLVMODE_SHIFT)
106 
107 /*
108  * CPOL (RW)
109  *
110  * SPI Clock Polarity
111  * 0x0: SCLK is LOW in the idle states
112  * 0x1: SCLK is HIGH in the idle states
113  */
114 #define SPI_TRANSFMT_CPOL_MASK (0x2U)
115 #define SPI_TRANSFMT_CPOL_SHIFT (1U)
116 #define SPI_TRANSFMT_CPOL_SET(x) (((uint32_t)(x) << SPI_TRANSFMT_CPOL_SHIFT) & SPI_TRANSFMT_CPOL_MASK)
117 #define SPI_TRANSFMT_CPOL_GET(x) (((uint32_t)(x) & SPI_TRANSFMT_CPOL_MASK) >> SPI_TRANSFMT_CPOL_SHIFT)
118 
119 /*
120  * CPHA (RW)
121  *
122  * SPI Clock Phase
123  * 0x0: Sampling data at odd SCLK edges
124  * 0x1: Sampling data at even SCLK edges
125  */
126 #define SPI_TRANSFMT_CPHA_MASK (0x1U)
127 #define SPI_TRANSFMT_CPHA_SHIFT (0U)
128 #define SPI_TRANSFMT_CPHA_SET(x) (((uint32_t)(x) << SPI_TRANSFMT_CPHA_SHIFT) & SPI_TRANSFMT_CPHA_MASK)
129 #define SPI_TRANSFMT_CPHA_GET(x) (((uint32_t)(x) & SPI_TRANSFMT_CPHA_MASK) >> SPI_TRANSFMT_CPHA_SHIFT)
130 
131 /* Bitfield definition for register: TRANSCTRL */
132 /*
133  * SLVDATAONLY (RW)
134  *
135  * Data-only mode (slave mode only)
136  * 0x0: Disable the data-only mode
137  * 0x1: Enable the data-only mode
138  * Note: This mode only works in the uni-directional regular (single) mode so MOSIBiDir, DualQuad and TransMode should be set to 0.
139  */
140 #define SPI_TRANSCTRL_SLVDATAONLY_MASK (0x80000000UL)
141 #define SPI_TRANSCTRL_SLVDATAONLY_SHIFT (31U)
142 #define SPI_TRANSCTRL_SLVDATAONLY_SET(x) (((uint32_t)(x) << SPI_TRANSCTRL_SLVDATAONLY_SHIFT) & SPI_TRANSCTRL_SLVDATAONLY_MASK)
143 #define SPI_TRANSCTRL_SLVDATAONLY_GET(x) (((uint32_t)(x) & SPI_TRANSCTRL_SLVDATAONLY_MASK) >> SPI_TRANSCTRL_SLVDATAONLY_SHIFT)
144 
145 /*
146  * CMDEN (RW)
147  *
148  * SPI command phase enable (Master mode only)
149  * 0x0: Disable the command phase
150  * 0x1: Enable the command phase
151  */
152 #define SPI_TRANSCTRL_CMDEN_MASK (0x40000000UL)
153 #define SPI_TRANSCTRL_CMDEN_SHIFT (30U)
154 #define SPI_TRANSCTRL_CMDEN_SET(x) (((uint32_t)(x) << SPI_TRANSCTRL_CMDEN_SHIFT) & SPI_TRANSCTRL_CMDEN_MASK)
155 #define SPI_TRANSCTRL_CMDEN_GET(x) (((uint32_t)(x) & SPI_TRANSCTRL_CMDEN_MASK) >> SPI_TRANSCTRL_CMDEN_SHIFT)
156 
157 /*
158  * ADDREN (RW)
159  *
160  * SPI address phase enable (Master mode only)
161  * 0x0: Disable the address phase
162  * 0x1: Enable the address phase
163  */
164 #define SPI_TRANSCTRL_ADDREN_MASK (0x20000000UL)
165 #define SPI_TRANSCTRL_ADDREN_SHIFT (29U)
166 #define SPI_TRANSCTRL_ADDREN_SET(x) (((uint32_t)(x) << SPI_TRANSCTRL_ADDREN_SHIFT) & SPI_TRANSCTRL_ADDREN_MASK)
167 #define SPI_TRANSCTRL_ADDREN_GET(x) (((uint32_t)(x) & SPI_TRANSCTRL_ADDREN_MASK) >> SPI_TRANSCTRL_ADDREN_SHIFT)
168 
169 /*
170  * ADDRFMT (RW)
171  *
172  * SPI address phase format (Master mode only)
173  * 0x0: Address phase is the regular (single) mode
174  * 0x1: The format of the address phase is the same as the data phase (DualQuad).
175  */
176 #define SPI_TRANSCTRL_ADDRFMT_MASK (0x10000000UL)
177 #define SPI_TRANSCTRL_ADDRFMT_SHIFT (28U)
178 #define SPI_TRANSCTRL_ADDRFMT_SET(x) (((uint32_t)(x) << SPI_TRANSCTRL_ADDRFMT_SHIFT) & SPI_TRANSCTRL_ADDRFMT_MASK)
179 #define SPI_TRANSCTRL_ADDRFMT_GET(x) (((uint32_t)(x) & SPI_TRANSCTRL_ADDRFMT_MASK) >> SPI_TRANSCTRL_ADDRFMT_SHIFT)
180 
181 /*
182  * TRANSMODE (RW)
183  *
184  * Transfer mode
185  * The transfer sequence could be
186  * 0x0: Write and read at the same time
187  * 0x1: Write only
188  * 0x2: Read only
189  * 0x3: Write, Read
190  * 0x4: Read, Write
191  * 0x5: Write, Dummy, Read
192  * 0x6: Read, Dummy, Write
193  * 0x7: None Data (must enable CmdEn or AddrEn in master mode)
194  * 0x8: Dummy, Write
195  * 0x9: Dummy, Read
196  * 0xa~0xf: Reserved
197  */
198 #define SPI_TRANSCTRL_TRANSMODE_MASK (0xF000000UL)
199 #define SPI_TRANSCTRL_TRANSMODE_SHIFT (24U)
200 #define SPI_TRANSCTRL_TRANSMODE_SET(x) (((uint32_t)(x) << SPI_TRANSCTRL_TRANSMODE_SHIFT) & SPI_TRANSCTRL_TRANSMODE_MASK)
201 #define SPI_TRANSCTRL_TRANSMODE_GET(x) (((uint32_t)(x) & SPI_TRANSCTRL_TRANSMODE_MASK) >> SPI_TRANSCTRL_TRANSMODE_SHIFT)
202 
203 /*
204  * DUALQUAD (RW)
205  *
206  * SPI data phase format
207  * 0x0: Regular (Single) mode
208  * 0x1: Dual I/O mode
209  * 0x2: Quad I/O mode
210  * 0x3: Reserved
211  */
212 #define SPI_TRANSCTRL_DUALQUAD_MASK (0xC00000UL)
213 #define SPI_TRANSCTRL_DUALQUAD_SHIFT (22U)
214 #define SPI_TRANSCTRL_DUALQUAD_SET(x) (((uint32_t)(x) << SPI_TRANSCTRL_DUALQUAD_SHIFT) & SPI_TRANSCTRL_DUALQUAD_MASK)
215 #define SPI_TRANSCTRL_DUALQUAD_GET(x) (((uint32_t)(x) & SPI_TRANSCTRL_DUALQUAD_MASK) >> SPI_TRANSCTRL_DUALQUAD_SHIFT)
216 
217 /*
218  * TOKENEN (RW)
219  *
220  * Token transfer enable (Master mode only)
221  * Append a one-byte special token following the address phase for SPI read transfers. The value of the special token should be selected in TokenValue.
222  * 0x0: Disable the one-byte special token
223  * 0x1: Enable the one-byte special token
224  */
225 #define SPI_TRANSCTRL_TOKENEN_MASK (0x200000UL)
226 #define SPI_TRANSCTRL_TOKENEN_SHIFT (21U)
227 #define SPI_TRANSCTRL_TOKENEN_SET(x) (((uint32_t)(x) << SPI_TRANSCTRL_TOKENEN_SHIFT) & SPI_TRANSCTRL_TOKENEN_MASK)
228 #define SPI_TRANSCTRL_TOKENEN_GET(x) (((uint32_t)(x) & SPI_TRANSCTRL_TOKENEN_MASK) >> SPI_TRANSCTRL_TOKENEN_SHIFT)
229 
230 /*
231  * WRTRANCNT (RW)
232  *
233  * Transfer count for write data
234  * WrTranCnt indicates the number of units of data to be transmitted to the SPI bus from the Data Register. The actual transfer count is (WrTranCnt+1).
235  * WrTranCnt only takes effect when TransMode is 0, 1, 3, 4, 5, 6 or 8.
236  * The size (bit-width) of a data unit is defined by the DataLen field of the Transfer Format Register.
237  * For TransMode 0, WrTranCnt must be equal to RdTranCnt.
238  */
239 #define SPI_TRANSCTRL_WRTRANCNT_MASK (0x1FF000UL)
240 #define SPI_TRANSCTRL_WRTRANCNT_SHIFT (12U)
241 #define SPI_TRANSCTRL_WRTRANCNT_SET(x) (((uint32_t)(x) << SPI_TRANSCTRL_WRTRANCNT_SHIFT) & SPI_TRANSCTRL_WRTRANCNT_MASK)
242 #define SPI_TRANSCTRL_WRTRANCNT_GET(x) (((uint32_t)(x) & SPI_TRANSCTRL_WRTRANCNT_MASK) >> SPI_TRANSCTRL_WRTRANCNT_SHIFT)
243 
244 /*
245  * TOKENVALUE (RW)
246  *
247  * Token value (Master mode only)
248  * The value of the one-byte special token following the address phase for SPI read transfers.
249  * 0x0: token value = 0x00
250  * 0x1: token value = 0x69
251  */
252 #define SPI_TRANSCTRL_TOKENVALUE_MASK (0x800U)
253 #define SPI_TRANSCTRL_TOKENVALUE_SHIFT (11U)
254 #define SPI_TRANSCTRL_TOKENVALUE_SET(x) (((uint32_t)(x) << SPI_TRANSCTRL_TOKENVALUE_SHIFT) & SPI_TRANSCTRL_TOKENVALUE_MASK)
255 #define SPI_TRANSCTRL_TOKENVALUE_GET(x) (((uint32_t)(x) & SPI_TRANSCTRL_TOKENVALUE_MASK) >> SPI_TRANSCTRL_TOKENVALUE_SHIFT)
256 
257 /*
258  * DUMMYCNT (RW)
259  *
260  * Dummy data count. The actual dummy count is (DummyCnt +1).
261  * The number of dummy cycles on the SPI interface will be (DummyCnt+1)* ((DataLen+1)/SPI IO width)
262  * The Data pins are put into the high impedance during the dummy data phase.
263  * DummyCnt is only used for TransMode 5, 6, 8 and 9, which has dummy data phases.
264  */
265 #define SPI_TRANSCTRL_DUMMYCNT_MASK (0x600U)
266 #define SPI_TRANSCTRL_DUMMYCNT_SHIFT (9U)
267 #define SPI_TRANSCTRL_DUMMYCNT_SET(x) (((uint32_t)(x) << SPI_TRANSCTRL_DUMMYCNT_SHIFT) & SPI_TRANSCTRL_DUMMYCNT_MASK)
268 #define SPI_TRANSCTRL_DUMMYCNT_GET(x) (((uint32_t)(x) & SPI_TRANSCTRL_DUMMYCNT_MASK) >> SPI_TRANSCTRL_DUMMYCNT_SHIFT)
269 
270 /*
271  * RDTRANCNT (RW)
272  *
273  * Transfer count for read data
274  * RdTranCnt indicates the number of units of data to be received from SPI bus and stored to the Data Register. The actual received count is (RdTranCnt+1).
275  * RdTransCnt only takes effect when TransMode is 0, 2, 3, 4, 5, 6 or 9.
276  * The size (bit-width) of a data unit is defined by the DataLen field of the Transfer Format Register.
277  * For TransMode 0, WrTranCnt must equal RdTranCnt.
278  */
279 #define SPI_TRANSCTRL_RDTRANCNT_MASK (0x1FFU)
280 #define SPI_TRANSCTRL_RDTRANCNT_SHIFT (0U)
281 #define SPI_TRANSCTRL_RDTRANCNT_SET(x) (((uint32_t)(x) << SPI_TRANSCTRL_RDTRANCNT_SHIFT) & SPI_TRANSCTRL_RDTRANCNT_MASK)
282 #define SPI_TRANSCTRL_RDTRANCNT_GET(x) (((uint32_t)(x) & SPI_TRANSCTRL_RDTRANCNT_MASK) >> SPI_TRANSCTRL_RDTRANCNT_SHIFT)
283 
284 /* Bitfield definition for register: CMD */
285 /*
286  * CMD (RW)
287  *
288  * SPI Command
289  */
290 #define SPI_CMD_CMD_MASK (0xFFU)
291 #define SPI_CMD_CMD_SHIFT (0U)
292 #define SPI_CMD_CMD_SET(x) (((uint32_t)(x) << SPI_CMD_CMD_SHIFT) & SPI_CMD_CMD_MASK)
293 #define SPI_CMD_CMD_GET(x) (((uint32_t)(x) & SPI_CMD_CMD_MASK) >> SPI_CMD_CMD_SHIFT)
294 
295 /* Bitfield definition for register: ADDR */
296 /*
297  * ADDR (RW)
298  *
299  * SPI Address
300  * (Master mode only)
301  */
302 #define SPI_ADDR_ADDR_MASK (0xFFFFFFFFUL)
303 #define SPI_ADDR_ADDR_SHIFT (0U)
304 #define SPI_ADDR_ADDR_SET(x) (((uint32_t)(x) << SPI_ADDR_ADDR_SHIFT) & SPI_ADDR_ADDR_MASK)
305 #define SPI_ADDR_ADDR_GET(x) (((uint32_t)(x) & SPI_ADDR_ADDR_MASK) >> SPI_ADDR_ADDR_SHIFT)
306 
307 /* Bitfield definition for register: DATA */
308 /*
309  * DATA (RW)
310  *
311  * Data to transmit or the received data
312  * For writes, data is enqueued to the TX FIFO. The least significant byte is always transmitted first. If the TX FIFO is full and the SPIActive bit of the status register is 1, the ready signal hready/pready will be deasserted to insert wait states to the transfer.
313  * For reads, data is read and dequeued from the RX FIFO. The least significant byte is the first received byte. If the RX FIFO is empty and the SPIActive bit of the status register is 1, the ready signal hready/pready will be deasserted to insert wait states to the transfer.
314  * The FIFOs decouple the speed of the SPI transfers and the software鈥檚 generation/consumption of data. When the TX FIFO is empty, SPI transfers will hold until more data is written to the TX FIFO; when the RX FIFO is full, SPI transfers will hold until there is more room in the RX FIFO.
315  * If more data is written to the TX FIFO than the write transfer count (WrTranCnt), the remaining data will stay in the TX FIFO for the next transfer or until the TX FIFO is reset.
316  */
317 #define SPI_DATA_DATA_MASK (0xFFFFFFFFUL)
318 #define SPI_DATA_DATA_SHIFT (0U)
319 #define SPI_DATA_DATA_SET(x) (((uint32_t)(x) << SPI_DATA_DATA_SHIFT) & SPI_DATA_DATA_MASK)
320 #define SPI_DATA_DATA_GET(x) (((uint32_t)(x) & SPI_DATA_DATA_MASK) >> SPI_DATA_DATA_SHIFT)
321 
322 /* Bitfield definition for register: CTRL */
323 /*
324  * TXTHRES (RW)
325  *
326  * Transmit (TX) FIFO Threshold
327  * The TXFIFOInt interrupt or DMA request would be issued to replenish the TX FIFO when the TX data count is less than or equal to the TX FIFO threshold.
328  */
329 #define SPI_CTRL_TXTHRES_MASK (0xFF0000UL)
330 #define SPI_CTRL_TXTHRES_SHIFT (16U)
331 #define SPI_CTRL_TXTHRES_SET(x) (((uint32_t)(x) << SPI_CTRL_TXTHRES_SHIFT) & SPI_CTRL_TXTHRES_MASK)
332 #define SPI_CTRL_TXTHRES_GET(x) (((uint32_t)(x) & SPI_CTRL_TXTHRES_MASK) >> SPI_CTRL_TXTHRES_SHIFT)
333 
334 /*
335  * RXTHRES (RW)
336  *
337  * Receive (RX) FIFO Threshold
338  * The RXFIFOInt interrupt or DMA request would be issued for consuming the RX FIFO when the RX data count is more than or equal to the RX FIFO threshold.
339  */
340 #define SPI_CTRL_RXTHRES_MASK (0xFF00U)
341 #define SPI_CTRL_RXTHRES_SHIFT (8U)
342 #define SPI_CTRL_RXTHRES_SET(x) (((uint32_t)(x) << SPI_CTRL_RXTHRES_SHIFT) & SPI_CTRL_RXTHRES_MASK)
343 #define SPI_CTRL_RXTHRES_GET(x) (((uint32_t)(x) & SPI_CTRL_RXTHRES_MASK) >> SPI_CTRL_RXTHRES_SHIFT)
344 
345 /*
346  * TXDMAEN (RW)
347  *
348  * TX DMA enable
349  */
350 #define SPI_CTRL_TXDMAEN_MASK (0x10U)
351 #define SPI_CTRL_TXDMAEN_SHIFT (4U)
352 #define SPI_CTRL_TXDMAEN_SET(x) (((uint32_t)(x) << SPI_CTRL_TXDMAEN_SHIFT) & SPI_CTRL_TXDMAEN_MASK)
353 #define SPI_CTRL_TXDMAEN_GET(x) (((uint32_t)(x) & SPI_CTRL_TXDMAEN_MASK) >> SPI_CTRL_TXDMAEN_SHIFT)
354 
355 /*
356  * RXDMAEN (RW)
357  *
358  * RX DMA enable
359  */
360 #define SPI_CTRL_RXDMAEN_MASK (0x8U)
361 #define SPI_CTRL_RXDMAEN_SHIFT (3U)
362 #define SPI_CTRL_RXDMAEN_SET(x) (((uint32_t)(x) << SPI_CTRL_RXDMAEN_SHIFT) & SPI_CTRL_RXDMAEN_MASK)
363 #define SPI_CTRL_RXDMAEN_GET(x) (((uint32_t)(x) & SPI_CTRL_RXDMAEN_MASK) >> SPI_CTRL_RXDMAEN_SHIFT)
364 
365 /*
366  * TXFIFORST (RW)
367  *
368  * Transmit FIFO reset
369  * Write 1 to reset. It is automatically cleared to 0 after the reset operation completes.
370  */
371 #define SPI_CTRL_TXFIFORST_MASK (0x4U)
372 #define SPI_CTRL_TXFIFORST_SHIFT (2U)
373 #define SPI_CTRL_TXFIFORST_SET(x) (((uint32_t)(x) << SPI_CTRL_TXFIFORST_SHIFT) & SPI_CTRL_TXFIFORST_MASK)
374 #define SPI_CTRL_TXFIFORST_GET(x) (((uint32_t)(x) & SPI_CTRL_TXFIFORST_MASK) >> SPI_CTRL_TXFIFORST_SHIFT)
375 
376 /*
377  * RXFIFORST (RW)
378  *
379  * Receive FIFO reset
380  * Write 1 to reset. It is automatically cleared to 0 after the reset operation completes.
381  */
382 #define SPI_CTRL_RXFIFORST_MASK (0x2U)
383 #define SPI_CTRL_RXFIFORST_SHIFT (1U)
384 #define SPI_CTRL_RXFIFORST_SET(x) (((uint32_t)(x) << SPI_CTRL_RXFIFORST_SHIFT) & SPI_CTRL_RXFIFORST_MASK)
385 #define SPI_CTRL_RXFIFORST_GET(x) (((uint32_t)(x) & SPI_CTRL_RXFIFORST_MASK) >> SPI_CTRL_RXFIFORST_SHIFT)
386 
387 /*
388  * SPIRST (RW)
389  *
390  * SPI reset
391  * Write 1 to reset. It is automatically cleared to 0 after the reset operation completes.
392  */
393 #define SPI_CTRL_SPIRST_MASK (0x1U)
394 #define SPI_CTRL_SPIRST_SHIFT (0U)
395 #define SPI_CTRL_SPIRST_SET(x) (((uint32_t)(x) << SPI_CTRL_SPIRST_SHIFT) & SPI_CTRL_SPIRST_MASK)
396 #define SPI_CTRL_SPIRST_GET(x) (((uint32_t)(x) & SPI_CTRL_SPIRST_MASK) >> SPI_CTRL_SPIRST_SHIFT)
397 
398 /* Bitfield definition for register: STATUS */
399 /*
400  * TXNUM_7_6 (RO)
401  *
402  * Number of valid entries in the Transmit FIFO
403  */
404 #define SPI_STATUS_TXNUM_7_6_MASK (0x30000000UL)
405 #define SPI_STATUS_TXNUM_7_6_SHIFT (28U)
406 #define SPI_STATUS_TXNUM_7_6_GET(x) (((uint32_t)(x) & SPI_STATUS_TXNUM_7_6_MASK) >> SPI_STATUS_TXNUM_7_6_SHIFT)
407 
408 /*
409  * RXNUM_7_6 (RO)
410  *
411  * Number of valid entries in the Receive FIFO
412  */
413 #define SPI_STATUS_RXNUM_7_6_MASK (0x3000000UL)
414 #define SPI_STATUS_RXNUM_7_6_SHIFT (24U)
415 #define SPI_STATUS_RXNUM_7_6_GET(x) (((uint32_t)(x) & SPI_STATUS_RXNUM_7_6_MASK) >> SPI_STATUS_RXNUM_7_6_SHIFT)
416 
417 /*
418  * TXFULL (RO)
419  *
420  * Transmit FIFO Full flag
421  */
422 #define SPI_STATUS_TXFULL_MASK (0x800000UL)
423 #define SPI_STATUS_TXFULL_SHIFT (23U)
424 #define SPI_STATUS_TXFULL_GET(x) (((uint32_t)(x) & SPI_STATUS_TXFULL_MASK) >> SPI_STATUS_TXFULL_SHIFT)
425 
426 /*
427  * TXEMPTY (RO)
428  *
429  * Transmit FIFO Empty flag
430  */
431 #define SPI_STATUS_TXEMPTY_MASK (0x400000UL)
432 #define SPI_STATUS_TXEMPTY_SHIFT (22U)
433 #define SPI_STATUS_TXEMPTY_GET(x) (((uint32_t)(x) & SPI_STATUS_TXEMPTY_MASK) >> SPI_STATUS_TXEMPTY_SHIFT)
434 
435 /*
436  * TXNUM_5_0 (RO)
437  *
438  * Number of valid entries in the Transmit FIFO
439  */
440 #define SPI_STATUS_TXNUM_5_0_MASK (0x3F0000UL)
441 #define SPI_STATUS_TXNUM_5_0_SHIFT (16U)
442 #define SPI_STATUS_TXNUM_5_0_GET(x) (((uint32_t)(x) & SPI_STATUS_TXNUM_5_0_MASK) >> SPI_STATUS_TXNUM_5_0_SHIFT)
443 
444 /*
445  * RXFULL (RO)
446  *
447  * Receive FIFO Full flag
448  */
449 #define SPI_STATUS_RXFULL_MASK (0x8000U)
450 #define SPI_STATUS_RXFULL_SHIFT (15U)
451 #define SPI_STATUS_RXFULL_GET(x) (((uint32_t)(x) & SPI_STATUS_RXFULL_MASK) >> SPI_STATUS_RXFULL_SHIFT)
452 
453 /*
454  * RXEMPTY (RO)
455  *
456  * Receive FIFO Empty flag
457  */
458 #define SPI_STATUS_RXEMPTY_MASK (0x4000U)
459 #define SPI_STATUS_RXEMPTY_SHIFT (14U)
460 #define SPI_STATUS_RXEMPTY_GET(x) (((uint32_t)(x) & SPI_STATUS_RXEMPTY_MASK) >> SPI_STATUS_RXEMPTY_SHIFT)
461 
462 /*
463  * RXNUM_5_0 (RO)
464  *
465  * Number of valid entries in the Receive FIFO
466  */
467 #define SPI_STATUS_RXNUM_5_0_MASK (0x3F00U)
468 #define SPI_STATUS_RXNUM_5_0_SHIFT (8U)
469 #define SPI_STATUS_RXNUM_5_0_GET(x) (((uint32_t)(x) & SPI_STATUS_RXNUM_5_0_MASK) >> SPI_STATUS_RXNUM_5_0_SHIFT)
470 
471 /*
472  * SPIACTIVE (RO)
473  *
474  * SPI register programming is in progress.
475  * In master mode, SPIActive becomes 1 after the SPI command register is written and becomes 0 after the transfer is finished.
476  * In slave mode, SPIActive becomes 1 after the SPI CS signal is asserted and becomes 0 after the SPI CS signal is deasserted.
477  * Note that due to clock synchronization, it may take at most two spi_clock cycles for SPIActive to change when the corresponding condition happens.
478  * Note this bit stays 0 when Direct IO Control or the memory-mapped interface is used.
479  */
480 #define SPI_STATUS_SPIACTIVE_MASK (0x1U)
481 #define SPI_STATUS_SPIACTIVE_SHIFT (0U)
482 #define SPI_STATUS_SPIACTIVE_GET(x) (((uint32_t)(x) & SPI_STATUS_SPIACTIVE_MASK) >> SPI_STATUS_SPIACTIVE_SHIFT)
483 
484 /* Bitfield definition for register: INTREN */
485 /*
486  * SLVCMDEN (RW)
487  *
488  * Enable the Slave Command Interrupt.
489  * Control whether interrupts are triggered whenever slave commands are received.
490  * (Slave mode only)
491  */
492 #define SPI_INTREN_SLVCMDEN_MASK (0x20U)
493 #define SPI_INTREN_SLVCMDEN_SHIFT (5U)
494 #define SPI_INTREN_SLVCMDEN_SET(x) (((uint32_t)(x) << SPI_INTREN_SLVCMDEN_SHIFT) & SPI_INTREN_SLVCMDEN_MASK)
495 #define SPI_INTREN_SLVCMDEN_GET(x) (((uint32_t)(x) & SPI_INTREN_SLVCMDEN_MASK) >> SPI_INTREN_SLVCMDEN_SHIFT)
496 
497 /*
498  * ENDINTEN (RW)
499  *
500  * Enable the End of SPI Transfer interrupt.
501  * Control whether interrupts are triggered when SPI transfers end.
502  * (In slave mode, end of read status transaction doesn鈥檛 trigger this interrupt.)
503  */
504 #define SPI_INTREN_ENDINTEN_MASK (0x10U)
505 #define SPI_INTREN_ENDINTEN_SHIFT (4U)
506 #define SPI_INTREN_ENDINTEN_SET(x) (((uint32_t)(x) << SPI_INTREN_ENDINTEN_SHIFT) & SPI_INTREN_ENDINTEN_MASK)
507 #define SPI_INTREN_ENDINTEN_GET(x) (((uint32_t)(x) & SPI_INTREN_ENDINTEN_MASK) >> SPI_INTREN_ENDINTEN_SHIFT)
508 
509 /*
510  * TXFIFOINTEN (RW)
511  *
512  * Enable the SPI Transmit FIFO Threshold interrupt.
513  * Control whether interrupts are triggered when the valid entries are less than or equal to the TX FIFO threshold.
514  */
515 #define SPI_INTREN_TXFIFOINTEN_MASK (0x8U)
516 #define SPI_INTREN_TXFIFOINTEN_SHIFT (3U)
517 #define SPI_INTREN_TXFIFOINTEN_SET(x) (((uint32_t)(x) << SPI_INTREN_TXFIFOINTEN_SHIFT) & SPI_INTREN_TXFIFOINTEN_MASK)
518 #define SPI_INTREN_TXFIFOINTEN_GET(x) (((uint32_t)(x) & SPI_INTREN_TXFIFOINTEN_MASK) >> SPI_INTREN_TXFIFOINTEN_SHIFT)
519 
520 /*
521  * RXFIFOINTEN (RW)
522  *
523  * Enable the SPI Receive FIFO Threshold interrupt.
524  * Control whether interrupts are triggered when the valid entries are greater than or equal to the RX FIFO threshold.
525  */
526 #define SPI_INTREN_RXFIFOINTEN_MASK (0x4U)
527 #define SPI_INTREN_RXFIFOINTEN_SHIFT (2U)
528 #define SPI_INTREN_RXFIFOINTEN_SET(x) (((uint32_t)(x) << SPI_INTREN_RXFIFOINTEN_SHIFT) & SPI_INTREN_RXFIFOINTEN_MASK)
529 #define SPI_INTREN_RXFIFOINTEN_GET(x) (((uint32_t)(x) & SPI_INTREN_RXFIFOINTEN_MASK) >> SPI_INTREN_RXFIFOINTEN_SHIFT)
530 
531 /*
532  * TXFIFOURINTEN (RW)
533  *
534  * Enable the SPI Transmit FIFO Underrun interrupt.
535  * Control whether interrupts are triggered when the Transmit FIFO run out of data.
536  * (Slave mode only)
537  */
538 #define SPI_INTREN_TXFIFOURINTEN_MASK (0x2U)
539 #define SPI_INTREN_TXFIFOURINTEN_SHIFT (1U)
540 #define SPI_INTREN_TXFIFOURINTEN_SET(x) (((uint32_t)(x) << SPI_INTREN_TXFIFOURINTEN_SHIFT) & SPI_INTREN_TXFIFOURINTEN_MASK)
541 #define SPI_INTREN_TXFIFOURINTEN_GET(x) (((uint32_t)(x) & SPI_INTREN_TXFIFOURINTEN_MASK) >> SPI_INTREN_TXFIFOURINTEN_SHIFT)
542 
543 /*
544  * RXFIFOORINTEN (RW)
545  *
546  * Enable the SPI Receive FIFO Overrun interrupt.
547  * Control whether interrupts are triggered when the Receive FIFO overflows.
548  * (Slave mode only)
549  */
550 #define SPI_INTREN_RXFIFOORINTEN_MASK (0x1U)
551 #define SPI_INTREN_RXFIFOORINTEN_SHIFT (0U)
552 #define SPI_INTREN_RXFIFOORINTEN_SET(x) (((uint32_t)(x) << SPI_INTREN_RXFIFOORINTEN_SHIFT) & SPI_INTREN_RXFIFOORINTEN_MASK)
553 #define SPI_INTREN_RXFIFOORINTEN_GET(x) (((uint32_t)(x) & SPI_INTREN_RXFIFOORINTEN_MASK) >> SPI_INTREN_RXFIFOORINTEN_SHIFT)
554 
555 /* Bitfield definition for register: INTRST */
556 /*
557  * SLVCMDINT (W1C)
558  *
559  * Slave Command Interrupt.
560  * This bit is set when Slave Command interrupts occur.
561  * (Slave mode only)
562  */
563 #define SPI_INTRST_SLVCMDINT_MASK (0x20U)
564 #define SPI_INTRST_SLVCMDINT_SHIFT (5U)
565 #define SPI_INTRST_SLVCMDINT_SET(x) (((uint32_t)(x) << SPI_INTRST_SLVCMDINT_SHIFT) & SPI_INTRST_SLVCMDINT_MASK)
566 #define SPI_INTRST_SLVCMDINT_GET(x) (((uint32_t)(x) & SPI_INTRST_SLVCMDINT_MASK) >> SPI_INTRST_SLVCMDINT_SHIFT)
567 
568 /*
569  * ENDINT (W1C)
570  *
571  * End of SPI Transfer interrupt.
572  * This bit is set when End of SPI Transfer interrupts occur.
573  */
574 #define SPI_INTRST_ENDINT_MASK (0x10U)
575 #define SPI_INTRST_ENDINT_SHIFT (4U)
576 #define SPI_INTRST_ENDINT_SET(x) (((uint32_t)(x) << SPI_INTRST_ENDINT_SHIFT) & SPI_INTRST_ENDINT_MASK)
577 #define SPI_INTRST_ENDINT_GET(x) (((uint32_t)(x) & SPI_INTRST_ENDINT_MASK) >> SPI_INTRST_ENDINT_SHIFT)
578 
579 /*
580  * TXFIFOINT (W1C)
581  *
582  * TX FIFO Threshold interrupt.
583  * This bit is set when TX FIFO Threshold interrupts occur.
584  */
585 #define SPI_INTRST_TXFIFOINT_MASK (0x8U)
586 #define SPI_INTRST_TXFIFOINT_SHIFT (3U)
587 #define SPI_INTRST_TXFIFOINT_SET(x) (((uint32_t)(x) << SPI_INTRST_TXFIFOINT_SHIFT) & SPI_INTRST_TXFIFOINT_MASK)
588 #define SPI_INTRST_TXFIFOINT_GET(x) (((uint32_t)(x) & SPI_INTRST_TXFIFOINT_MASK) >> SPI_INTRST_TXFIFOINT_SHIFT)
589 
590 /*
591  * RXFIFOINT (W1C)
592  *
593  * RX FIFO Threshold interrupt.
594  * This bit is set when RX FIFO Threshold interrupts occur.
595  */
596 #define SPI_INTRST_RXFIFOINT_MASK (0x4U)
597 #define SPI_INTRST_RXFIFOINT_SHIFT (2U)
598 #define SPI_INTRST_RXFIFOINT_SET(x) (((uint32_t)(x) << SPI_INTRST_RXFIFOINT_SHIFT) & SPI_INTRST_RXFIFOINT_MASK)
599 #define SPI_INTRST_RXFIFOINT_GET(x) (((uint32_t)(x) & SPI_INTRST_RXFIFOINT_MASK) >> SPI_INTRST_RXFIFOINT_SHIFT)
600 
601 /*
602  * TXFIFOURINT (W1C)
603  *
604  * TX FIFO Underrun interrupt.
605  * This bit is set when TX FIFO Underrun interrupts occur.
606  * (Slave mode only)
607  */
608 #define SPI_INTRST_TXFIFOURINT_MASK (0x2U)
609 #define SPI_INTRST_TXFIFOURINT_SHIFT (1U)
610 #define SPI_INTRST_TXFIFOURINT_SET(x) (((uint32_t)(x) << SPI_INTRST_TXFIFOURINT_SHIFT) & SPI_INTRST_TXFIFOURINT_MASK)
611 #define SPI_INTRST_TXFIFOURINT_GET(x) (((uint32_t)(x) & SPI_INTRST_TXFIFOURINT_MASK) >> SPI_INTRST_TXFIFOURINT_SHIFT)
612 
613 /*
614  * RXFIFOORINT (W1C)
615  *
616  * RX FIFO Overrun interrupt.
617  * This bit is set when RX FIFO Overrun interrupts occur.
618  * (Slave mode only)
619  */
620 #define SPI_INTRST_RXFIFOORINT_MASK (0x1U)
621 #define SPI_INTRST_RXFIFOORINT_SHIFT (0U)
622 #define SPI_INTRST_RXFIFOORINT_SET(x) (((uint32_t)(x) << SPI_INTRST_RXFIFOORINT_SHIFT) & SPI_INTRST_RXFIFOORINT_MASK)
623 #define SPI_INTRST_RXFIFOORINT_GET(x) (((uint32_t)(x) & SPI_INTRST_RXFIFOORINT_MASK) >> SPI_INTRST_RXFIFOORINT_SHIFT)
624 
625 /* Bitfield definition for register: TIMING */
626 /*
627  * CS2SCLK (RW)
628  *
629  * The minimum time between the edges of SPI CS and the edges of SCLK.
630  * SCLK_period * (CS2SCLK + 1) / 2
631  */
632 #define SPI_TIMING_CS2SCLK_MASK (0x3000U)
633 #define SPI_TIMING_CS2SCLK_SHIFT (12U)
634 #define SPI_TIMING_CS2SCLK_SET(x) (((uint32_t)(x) << SPI_TIMING_CS2SCLK_SHIFT) & SPI_TIMING_CS2SCLK_MASK)
635 #define SPI_TIMING_CS2SCLK_GET(x) (((uint32_t)(x) & SPI_TIMING_CS2SCLK_MASK) >> SPI_TIMING_CS2SCLK_SHIFT)
636 
637 /*
638  * CSHT (RW)
639  *
640  * The minimum time that SPI CS should stay HIGH.
641  * SCLK_period * (CSHT + 1) / 2
642  */
643 #define SPI_TIMING_CSHT_MASK (0xF00U)
644 #define SPI_TIMING_CSHT_SHIFT (8U)
645 #define SPI_TIMING_CSHT_SET(x) (((uint32_t)(x) << SPI_TIMING_CSHT_SHIFT) & SPI_TIMING_CSHT_MASK)
646 #define SPI_TIMING_CSHT_GET(x) (((uint32_t)(x) & SPI_TIMING_CSHT_MASK) >> SPI_TIMING_CSHT_SHIFT)
647 
648 /*
649  * SCLK_DIV (RW)
650  *
651  * The clock frequency ratio between the clock source and SPI interface SCLK.
652  * SCLK_period = ((SCLK_DIV + 1) * 2) * (Period of the SPI clock source)
653  * The SCLK_DIV value 0xff is a special value which indicates that the SCLK frequency should be the same as the spi_clock frequency.
654  */
655 #define SPI_TIMING_SCLK_DIV_MASK (0xFFU)
656 #define SPI_TIMING_SCLK_DIV_SHIFT (0U)
657 #define SPI_TIMING_SCLK_DIV_SET(x) (((uint32_t)(x) << SPI_TIMING_SCLK_DIV_SHIFT) & SPI_TIMING_SCLK_DIV_MASK)
658 #define SPI_TIMING_SCLK_DIV_GET(x) (((uint32_t)(x) & SPI_TIMING_SCLK_DIV_MASK) >> SPI_TIMING_SCLK_DIV_SHIFT)
659 
660 /* Bitfield definition for register: SLVST */
661 /*
662  * UNDERRUN (W1C)
663  *
664  * Data underrun occurs in the last transaction
665  */
666 #define SPI_SLVST_UNDERRUN_MASK (0x40000UL)
667 #define SPI_SLVST_UNDERRUN_SHIFT (18U)
668 #define SPI_SLVST_UNDERRUN_SET(x) (((uint32_t)(x) << SPI_SLVST_UNDERRUN_SHIFT) & SPI_SLVST_UNDERRUN_MASK)
669 #define SPI_SLVST_UNDERRUN_GET(x) (((uint32_t)(x) & SPI_SLVST_UNDERRUN_MASK) >> SPI_SLVST_UNDERRUN_SHIFT)
670 
671 /*
672  * OVERRUN (RW)
673  *
674  * Data overrun occurs in the last transaction
675  */
676 #define SPI_SLVST_OVERRUN_MASK (0x20000UL)
677 #define SPI_SLVST_OVERRUN_SHIFT (17U)
678 #define SPI_SLVST_OVERRUN_SET(x) (((uint32_t)(x) << SPI_SLVST_OVERRUN_SHIFT) & SPI_SLVST_OVERRUN_MASK)
679 #define SPI_SLVST_OVERRUN_GET(x) (((uint32_t)(x) & SPI_SLVST_OVERRUN_MASK) >> SPI_SLVST_OVERRUN_SHIFT)
680 
681 /*
682  * READY (RW)
683  *
684  * Set this bit to indicate that the ATCSPI200 is ready for data transaction.
685  * When an SPI transaction other than slave status-reading command ends, this bit will be cleared to 0.
686  */
687 #define SPI_SLVST_READY_MASK (0x10000UL)
688 #define SPI_SLVST_READY_SHIFT (16U)
689 #define SPI_SLVST_READY_SET(x) (((uint32_t)(x) << SPI_SLVST_READY_SHIFT) & SPI_SLVST_READY_MASK)
690 #define SPI_SLVST_READY_GET(x) (((uint32_t)(x) & SPI_SLVST_READY_MASK) >> SPI_SLVST_READY_SHIFT)
691 
692 /*
693  * USR_STATUS (RW)
694  *
695  * User defined status flags
696  */
697 #define SPI_SLVST_USR_STATUS_MASK (0xFFFFU)
698 #define SPI_SLVST_USR_STATUS_SHIFT (0U)
699 #define SPI_SLVST_USR_STATUS_SET(x) (((uint32_t)(x) << SPI_SLVST_USR_STATUS_SHIFT) & SPI_SLVST_USR_STATUS_MASK)
700 #define SPI_SLVST_USR_STATUS_GET(x) (((uint32_t)(x) & SPI_SLVST_USR_STATUS_MASK) >> SPI_SLVST_USR_STATUS_SHIFT)
701 
702 /* Bitfield definition for register: SLVDATACNT */
703 /*
704  * WCNT (RO)
705  *
706  * Slave transmitted data count
707  */
708 #define SPI_SLVDATACNT_WCNT_MASK (0x3FF0000UL)
709 #define SPI_SLVDATACNT_WCNT_SHIFT (16U)
710 #define SPI_SLVDATACNT_WCNT_GET(x) (((uint32_t)(x) & SPI_SLVDATACNT_WCNT_MASK) >> SPI_SLVDATACNT_WCNT_SHIFT)
711 
712 /*
713  * RCNT (RO)
714  *
715  * Slave received data count
716  */
717 #define SPI_SLVDATACNT_RCNT_MASK (0x3FFU)
718 #define SPI_SLVDATACNT_RCNT_SHIFT (0U)
719 #define SPI_SLVDATACNT_RCNT_GET(x) (((uint32_t)(x) & SPI_SLVDATACNT_RCNT_MASK) >> SPI_SLVDATACNT_RCNT_SHIFT)
720 
721 /* Bitfield definition for register: CONFIG */
722 /*
723  * SLAVE (RO)
724  *
725  * Support for SPI Slave mode
726  */
727 #define SPI_CONFIG_SLAVE_MASK (0x4000U)
728 #define SPI_CONFIG_SLAVE_SHIFT (14U)
729 #define SPI_CONFIG_SLAVE_GET(x) (((uint32_t)(x) & SPI_CONFIG_SLAVE_MASK) >> SPI_CONFIG_SLAVE_SHIFT)
730 
731 /*
732  * QUADSPI (RO)
733  *
734  * Support for Quad I/O SPI
735  */
736 #define SPI_CONFIG_QUADSPI_MASK (0x200U)
737 #define SPI_CONFIG_QUADSPI_SHIFT (9U)
738 #define SPI_CONFIG_QUADSPI_GET(x) (((uint32_t)(x) & SPI_CONFIG_QUADSPI_MASK) >> SPI_CONFIG_QUADSPI_SHIFT)
739 
740 /*
741  * DUALSPI (RO)
742  *
743  * Support for Dual I/O SPI
744  */
745 #define SPI_CONFIG_DUALSPI_MASK (0x100U)
746 #define SPI_CONFIG_DUALSPI_SHIFT (8U)
747 #define SPI_CONFIG_DUALSPI_GET(x) (((uint32_t)(x) & SPI_CONFIG_DUALSPI_MASK) >> SPI_CONFIG_DUALSPI_SHIFT)
748 
749 /*
750  * TXFIFOSIZE (RO)
751  *
752  * Depth of TX FIFO
753  * 0x0: 2 words
754  * 0x1: 4 words
755  * 0x2: 8 words
756  * 0x3: 16 words
757  * 0x4: 32 words
758  * 0x5: 64 words
759  * 0x6: 128 words
760  */
761 #define SPI_CONFIG_TXFIFOSIZE_MASK (0xF0U)
762 #define SPI_CONFIG_TXFIFOSIZE_SHIFT (4U)
763 #define SPI_CONFIG_TXFIFOSIZE_GET(x) (((uint32_t)(x) & SPI_CONFIG_TXFIFOSIZE_MASK) >> SPI_CONFIG_TXFIFOSIZE_SHIFT)
764 
765 /*
766  * RXFIFOSIZE (RO)
767  *
768  * Depth of RX FIFO
769  * 0x0: 2 words
770  * 0x1: 4 words
771  * 0x2: 8 words
772  * 0x3: 16 words
773  * 0x4: 32 words
774  * 0x5: 64 words
775  * 0x6: 128 words
776  */
777 #define SPI_CONFIG_RXFIFOSIZE_MASK (0xFU)
778 #define SPI_CONFIG_RXFIFOSIZE_SHIFT (0U)
779 #define SPI_CONFIG_RXFIFOSIZE_GET(x) (((uint32_t)(x) & SPI_CONFIG_RXFIFOSIZE_MASK) >> SPI_CONFIG_RXFIFOSIZE_SHIFT)
780 
781 
782 
783 
784 #endif /* HPM_SPI_H */
Definition: hpm_spi_regs.h:12