hpm_spi_regs.h 30 KB

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