hpm_i2s_regs.h 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591
  1. /*
  2. * Copyright (c) 2021-2023 HPMicro
  3. *
  4. * SPDX-License-Identifier: BSD-3-Clause
  5. *
  6. */
  7. #ifndef HPM_I2S_H
  8. #define HPM_I2S_H
  9. typedef struct {
  10. __RW uint32_t CTRL; /* 0x0: Control Register */
  11. __R uint32_t RFIFO_FILLINGS; /* 0x4: Rx FIFO Filling Level */
  12. __R uint32_t TFIFO_FILLINGS; /* 0x8: Tx FIFO Filling Level */
  13. __RW uint32_t FIFO_THRESH; /* 0xC: TX/RX FIFO Threshold setting. */
  14. __RW uint32_t STA; /* 0x10: Status Registers */
  15. __R uint8_t RESERVED0[12]; /* 0x14 - 0x1F: Reserved */
  16. __R uint32_t RXD[4]; /* 0x20 - 0x2C: Rx Data0 */
  17. __W uint32_t TXD[4]; /* 0x30 - 0x3C: Tx Data0 */
  18. __R uint8_t RESERVED1[16]; /* 0x40 - 0x4F: Reserved */
  19. __RW uint32_t CFGR; /* 0x50: Configruation Regsiters */
  20. __R uint8_t RESERVED2[4]; /* 0x54 - 0x57: Reserved */
  21. __RW uint32_t MISC_CFGR; /* 0x58: Misc configuration Registers */
  22. __R uint8_t RESERVED3[4]; /* 0x5C - 0x5F: Reserved */
  23. __RW uint32_t RXDSLOT[4]; /* 0x60 - 0x6C: Rx Slots Enable for Rx Data0 */
  24. __RW uint32_t TXDSLOT[4]; /* 0x70 - 0x7C: Tx Slots Enable for Tx Data0. */
  25. } I2S_Type;
  26. /* Bitfield definition for register: CTRL */
  27. /*
  28. * SFTRST_RX (RW)
  29. *
  30. * software reset the RX module if asserted to be 1'b1. Self-clear.
  31. */
  32. #define I2S_CTRL_SFTRST_RX_MASK (0x40000UL)
  33. #define I2S_CTRL_SFTRST_RX_SHIFT (18U)
  34. #define I2S_CTRL_SFTRST_RX_SET(x) (((uint32_t)(x) << I2S_CTRL_SFTRST_RX_SHIFT) & I2S_CTRL_SFTRST_RX_MASK)
  35. #define I2S_CTRL_SFTRST_RX_GET(x) (((uint32_t)(x) & I2S_CTRL_SFTRST_RX_MASK) >> I2S_CTRL_SFTRST_RX_SHIFT)
  36. /*
  37. * SFTRST_TX (RW)
  38. *
  39. * software reset the TX module if asserted to be 1'b1. Self-clear.
  40. */
  41. #define I2S_CTRL_SFTRST_TX_MASK (0x20000UL)
  42. #define I2S_CTRL_SFTRST_TX_SHIFT (17U)
  43. #define I2S_CTRL_SFTRST_TX_SET(x) (((uint32_t)(x) << I2S_CTRL_SFTRST_TX_SHIFT) & I2S_CTRL_SFTRST_TX_MASK)
  44. #define I2S_CTRL_SFTRST_TX_GET(x) (((uint32_t)(x) & I2S_CTRL_SFTRST_TX_MASK) >> I2S_CTRL_SFTRST_TX_SHIFT)
  45. /*
  46. * SFTRST_CLKGEN (RW)
  47. *
  48. * software reset the CLK GEN module if asserted to be 1'b1. Self-clear.
  49. */
  50. #define I2S_CTRL_SFTRST_CLKGEN_MASK (0x10000UL)
  51. #define I2S_CTRL_SFTRST_CLKGEN_SHIFT (16U)
  52. #define I2S_CTRL_SFTRST_CLKGEN_SET(x) (((uint32_t)(x) << I2S_CTRL_SFTRST_CLKGEN_SHIFT) & I2S_CTRL_SFTRST_CLKGEN_MASK)
  53. #define I2S_CTRL_SFTRST_CLKGEN_GET(x) (((uint32_t)(x) & I2S_CTRL_SFTRST_CLKGEN_MASK) >> I2S_CTRL_SFTRST_CLKGEN_SHIFT)
  54. /*
  55. * TXDNIE (RW)
  56. *
  57. * TX buffer data needed interrupt enable
  58. * 0: TXE interrupt masked
  59. * 1: TXE interrupt not masked. Used to generate an interrupt request when the TXE flag is set.
  60. */
  61. #define I2S_CTRL_TXDNIE_MASK (0x8000U)
  62. #define I2S_CTRL_TXDNIE_SHIFT (15U)
  63. #define I2S_CTRL_TXDNIE_SET(x) (((uint32_t)(x) << I2S_CTRL_TXDNIE_SHIFT) & I2S_CTRL_TXDNIE_MASK)
  64. #define I2S_CTRL_TXDNIE_GET(x) (((uint32_t)(x) & I2S_CTRL_TXDNIE_MASK) >> I2S_CTRL_TXDNIE_SHIFT)
  65. /*
  66. * RXDAIE (RW)
  67. *
  68. * RX buffer data available interrupt enable
  69. * 0: RXNE interrupt masked
  70. * 1: RXNE interrupt not masked. Used to generate an interrupt request when the RXNE flag is set.
  71. */
  72. #define I2S_CTRL_RXDAIE_MASK (0x4000U)
  73. #define I2S_CTRL_RXDAIE_SHIFT (14U)
  74. #define I2S_CTRL_RXDAIE_SET(x) (((uint32_t)(x) << I2S_CTRL_RXDAIE_SHIFT) & I2S_CTRL_RXDAIE_MASK)
  75. #define I2S_CTRL_RXDAIE_GET(x) (((uint32_t)(x) & I2S_CTRL_RXDAIE_MASK) >> I2S_CTRL_RXDAIE_SHIFT)
  76. /*
  77. * ERRIE (RW)
  78. *
  79. * Error interrupt enable
  80. * This bit controls the generation of an interrupt when an error condition (UD, OV) occurs.
  81. * 0: Error interrupt is masked
  82. * 1: Error interrupt is enabled
  83. */
  84. #define I2S_CTRL_ERRIE_MASK (0x2000U)
  85. #define I2S_CTRL_ERRIE_SHIFT (13U)
  86. #define I2S_CTRL_ERRIE_SET(x) (((uint32_t)(x) << I2S_CTRL_ERRIE_SHIFT) & I2S_CTRL_ERRIE_MASK)
  87. #define I2S_CTRL_ERRIE_GET(x) (((uint32_t)(x) & I2S_CTRL_ERRIE_MASK) >> I2S_CTRL_ERRIE_SHIFT)
  88. /*
  89. * TX_DMA_EN (RW)
  90. *
  91. * Asserted to use DMA, else to use interrupt
  92. */
  93. #define I2S_CTRL_TX_DMA_EN_MASK (0x1000U)
  94. #define I2S_CTRL_TX_DMA_EN_SHIFT (12U)
  95. #define I2S_CTRL_TX_DMA_EN_SET(x) (((uint32_t)(x) << I2S_CTRL_TX_DMA_EN_SHIFT) & I2S_CTRL_TX_DMA_EN_MASK)
  96. #define I2S_CTRL_TX_DMA_EN_GET(x) (((uint32_t)(x) & I2S_CTRL_TX_DMA_EN_MASK) >> I2S_CTRL_TX_DMA_EN_SHIFT)
  97. /*
  98. * RX_DMA_EN (RW)
  99. *
  100. * Asserted to use DMA, else to use interrupt
  101. */
  102. #define I2S_CTRL_RX_DMA_EN_MASK (0x800U)
  103. #define I2S_CTRL_RX_DMA_EN_SHIFT (11U)
  104. #define I2S_CTRL_RX_DMA_EN_SET(x) (((uint32_t)(x) << I2S_CTRL_RX_DMA_EN_SHIFT) & I2S_CTRL_RX_DMA_EN_MASK)
  105. #define I2S_CTRL_RX_DMA_EN_GET(x) (((uint32_t)(x) & I2S_CTRL_RX_DMA_EN_MASK) >> I2S_CTRL_RX_DMA_EN_SHIFT)
  106. /*
  107. * TXFIFOCLR (RW)
  108. *
  109. * Self-clear
  110. */
  111. #define I2S_CTRL_TXFIFOCLR_MASK (0x400U)
  112. #define I2S_CTRL_TXFIFOCLR_SHIFT (10U)
  113. #define I2S_CTRL_TXFIFOCLR_SET(x) (((uint32_t)(x) << I2S_CTRL_TXFIFOCLR_SHIFT) & I2S_CTRL_TXFIFOCLR_MASK)
  114. #define I2S_CTRL_TXFIFOCLR_GET(x) (((uint32_t)(x) & I2S_CTRL_TXFIFOCLR_MASK) >> I2S_CTRL_TXFIFOCLR_SHIFT)
  115. /*
  116. * RXFIFOCLR (RW)
  117. *
  118. * Self-clear
  119. */
  120. #define I2S_CTRL_RXFIFOCLR_MASK (0x200U)
  121. #define I2S_CTRL_RXFIFOCLR_SHIFT (9U)
  122. #define I2S_CTRL_RXFIFOCLR_SET(x) (((uint32_t)(x) << I2S_CTRL_RXFIFOCLR_SHIFT) & I2S_CTRL_RXFIFOCLR_MASK)
  123. #define I2S_CTRL_RXFIFOCLR_GET(x) (((uint32_t)(x) & I2S_CTRL_RXFIFOCLR_MASK) >> I2S_CTRL_RXFIFOCLR_SHIFT)
  124. /*
  125. * TX_EN (RW)
  126. *
  127. * enable for each TX data pad
  128. */
  129. #define I2S_CTRL_TX_EN_MASK (0x1E0U)
  130. #define I2S_CTRL_TX_EN_SHIFT (5U)
  131. #define I2S_CTRL_TX_EN_SET(x) (((uint32_t)(x) << I2S_CTRL_TX_EN_SHIFT) & I2S_CTRL_TX_EN_MASK)
  132. #define I2S_CTRL_TX_EN_GET(x) (((uint32_t)(x) & I2S_CTRL_TX_EN_MASK) >> I2S_CTRL_TX_EN_SHIFT)
  133. /*
  134. * RX_EN (RW)
  135. *
  136. * enable for each RX data pad
  137. */
  138. #define I2S_CTRL_RX_EN_MASK (0x1EU)
  139. #define I2S_CTRL_RX_EN_SHIFT (1U)
  140. #define I2S_CTRL_RX_EN_SET(x) (((uint32_t)(x) << I2S_CTRL_RX_EN_SHIFT) & I2S_CTRL_RX_EN_MASK)
  141. #define I2S_CTRL_RX_EN_GET(x) (((uint32_t)(x) & I2S_CTRL_RX_EN_MASK) >> I2S_CTRL_RX_EN_SHIFT)
  142. /*
  143. * I2S_EN (RW)
  144. *
  145. * enable for the module
  146. */
  147. #define I2S_CTRL_I2S_EN_MASK (0x1U)
  148. #define I2S_CTRL_I2S_EN_SHIFT (0U)
  149. #define I2S_CTRL_I2S_EN_SET(x) (((uint32_t)(x) << I2S_CTRL_I2S_EN_SHIFT) & I2S_CTRL_I2S_EN_MASK)
  150. #define I2S_CTRL_I2S_EN_GET(x) (((uint32_t)(x) & I2S_CTRL_I2S_EN_MASK) >> I2S_CTRL_I2S_EN_SHIFT)
  151. /* Bitfield definition for register: RFIFO_FILLINGS */
  152. /*
  153. * RX3 (RO)
  154. *
  155. * RX3 fifo fillings
  156. */
  157. #define I2S_RFIFO_FILLINGS_RX3_MASK (0xFF000000UL)
  158. #define I2S_RFIFO_FILLINGS_RX3_SHIFT (24U)
  159. #define I2S_RFIFO_FILLINGS_RX3_GET(x) (((uint32_t)(x) & I2S_RFIFO_FILLINGS_RX3_MASK) >> I2S_RFIFO_FILLINGS_RX3_SHIFT)
  160. /*
  161. * RX2 (RO)
  162. *
  163. * RX2 fifo fillings
  164. */
  165. #define I2S_RFIFO_FILLINGS_RX2_MASK (0xFF0000UL)
  166. #define I2S_RFIFO_FILLINGS_RX2_SHIFT (16U)
  167. #define I2S_RFIFO_FILLINGS_RX2_GET(x) (((uint32_t)(x) & I2S_RFIFO_FILLINGS_RX2_MASK) >> I2S_RFIFO_FILLINGS_RX2_SHIFT)
  168. /*
  169. * RX1 (RO)
  170. *
  171. * RX1 fifo fillings
  172. */
  173. #define I2S_RFIFO_FILLINGS_RX1_MASK (0xFF00U)
  174. #define I2S_RFIFO_FILLINGS_RX1_SHIFT (8U)
  175. #define I2S_RFIFO_FILLINGS_RX1_GET(x) (((uint32_t)(x) & I2S_RFIFO_FILLINGS_RX1_MASK) >> I2S_RFIFO_FILLINGS_RX1_SHIFT)
  176. /*
  177. * RX0 (RO)
  178. *
  179. * RX0 fifo fillings
  180. */
  181. #define I2S_RFIFO_FILLINGS_RX0_MASK (0xFFU)
  182. #define I2S_RFIFO_FILLINGS_RX0_SHIFT (0U)
  183. #define I2S_RFIFO_FILLINGS_RX0_GET(x) (((uint32_t)(x) & I2S_RFIFO_FILLINGS_RX0_MASK) >> I2S_RFIFO_FILLINGS_RX0_SHIFT)
  184. /* Bitfield definition for register: TFIFO_FILLINGS */
  185. /*
  186. * TX3 (RO)
  187. *
  188. * TX3 fifo fillings
  189. */
  190. #define I2S_TFIFO_FILLINGS_TX3_MASK (0xFF000000UL)
  191. #define I2S_TFIFO_FILLINGS_TX3_SHIFT (24U)
  192. #define I2S_TFIFO_FILLINGS_TX3_GET(x) (((uint32_t)(x) & I2S_TFIFO_FILLINGS_TX3_MASK) >> I2S_TFIFO_FILLINGS_TX3_SHIFT)
  193. /*
  194. * TX2 (RO)
  195. *
  196. * TX2 fifo fillings
  197. */
  198. #define I2S_TFIFO_FILLINGS_TX2_MASK (0xFF0000UL)
  199. #define I2S_TFIFO_FILLINGS_TX2_SHIFT (16U)
  200. #define I2S_TFIFO_FILLINGS_TX2_GET(x) (((uint32_t)(x) & I2S_TFIFO_FILLINGS_TX2_MASK) >> I2S_TFIFO_FILLINGS_TX2_SHIFT)
  201. /*
  202. * TX1 (RO)
  203. *
  204. * TX1 fifo fillings
  205. */
  206. #define I2S_TFIFO_FILLINGS_TX1_MASK (0xFF00U)
  207. #define I2S_TFIFO_FILLINGS_TX1_SHIFT (8U)
  208. #define I2S_TFIFO_FILLINGS_TX1_GET(x) (((uint32_t)(x) & I2S_TFIFO_FILLINGS_TX1_MASK) >> I2S_TFIFO_FILLINGS_TX1_SHIFT)
  209. /*
  210. * TX0 (RO)
  211. *
  212. * TX0 fifo fillings
  213. */
  214. #define I2S_TFIFO_FILLINGS_TX0_MASK (0xFFU)
  215. #define I2S_TFIFO_FILLINGS_TX0_SHIFT (0U)
  216. #define I2S_TFIFO_FILLINGS_TX0_GET(x) (((uint32_t)(x) & I2S_TFIFO_FILLINGS_TX0_MASK) >> I2S_TFIFO_FILLINGS_TX0_SHIFT)
  217. /* Bitfield definition for register: FIFO_THRESH */
  218. /*
  219. * TX (RW)
  220. *
  221. * TX fifo threshold to trigger STA[tx_dn]. When tx fifo filling is smaller than or equal to the threshold, assert the tx_dn flag.
  222. */
  223. #define I2S_FIFO_THRESH_TX_MASK (0xFF00U)
  224. #define I2S_FIFO_THRESH_TX_SHIFT (8U)
  225. #define I2S_FIFO_THRESH_TX_SET(x) (((uint32_t)(x) << I2S_FIFO_THRESH_TX_SHIFT) & I2S_FIFO_THRESH_TX_MASK)
  226. #define I2S_FIFO_THRESH_TX_GET(x) (((uint32_t)(x) & I2S_FIFO_THRESH_TX_MASK) >> I2S_FIFO_THRESH_TX_SHIFT)
  227. /*
  228. * RX (RW)
  229. *
  230. * RX fifo threshold to trigger STA[rx_da]. When rx fifo filling is greater than or equal to the threshold, assert the rx_da flag.
  231. */
  232. #define I2S_FIFO_THRESH_RX_MASK (0xFFU)
  233. #define I2S_FIFO_THRESH_RX_SHIFT (0U)
  234. #define I2S_FIFO_THRESH_RX_SET(x) (((uint32_t)(x) << I2S_FIFO_THRESH_RX_SHIFT) & I2S_FIFO_THRESH_RX_MASK)
  235. #define I2S_FIFO_THRESH_RX_GET(x) (((uint32_t)(x) & I2S_FIFO_THRESH_RX_MASK) >> I2S_FIFO_THRESH_RX_SHIFT)
  236. /* Bitfield definition for register: STA */
  237. /*
  238. * TX_UD (W1C)
  239. *
  240. * Asserted when tx fifo is underflow. Should be ANDed with CTRL[tx_en] the for correct value. Write 1 to any of these 4 bits will clear the underflow error.
  241. */
  242. #define I2S_STA_TX_UD_MASK (0x1E000UL)
  243. #define I2S_STA_TX_UD_SHIFT (13U)
  244. #define I2S_STA_TX_UD_SET(x) (((uint32_t)(x) << I2S_STA_TX_UD_SHIFT) & I2S_STA_TX_UD_MASK)
  245. #define I2S_STA_TX_UD_GET(x) (((uint32_t)(x) & I2S_STA_TX_UD_MASK) >> I2S_STA_TX_UD_SHIFT)
  246. /*
  247. * RX_OV (W1C)
  248. *
  249. * Asserted when rx fifo is overflow. Write 1 to any of these 4 bits will clear the overflow error.
  250. */
  251. #define I2S_STA_RX_OV_MASK (0x1E00U)
  252. #define I2S_STA_RX_OV_SHIFT (9U)
  253. #define I2S_STA_RX_OV_SET(x) (((uint32_t)(x) << I2S_STA_RX_OV_SHIFT) & I2S_STA_RX_OV_MASK)
  254. #define I2S_STA_RX_OV_GET(x) (((uint32_t)(x) & I2S_STA_RX_OV_MASK) >> I2S_STA_RX_OV_SHIFT)
  255. /*
  256. * TX_DN (RO)
  257. *
  258. * Asserted when tx fifo data are needed.
  259. */
  260. #define I2S_STA_TX_DN_MASK (0x1E0U)
  261. #define I2S_STA_TX_DN_SHIFT (5U)
  262. #define I2S_STA_TX_DN_GET(x) (((uint32_t)(x) & I2S_STA_TX_DN_MASK) >> I2S_STA_TX_DN_SHIFT)
  263. /*
  264. * RX_DA (RO)
  265. *
  266. * Asserted when rx fifo data are available.
  267. */
  268. #define I2S_STA_RX_DA_MASK (0x1EU)
  269. #define I2S_STA_RX_DA_SHIFT (1U)
  270. #define I2S_STA_RX_DA_GET(x) (((uint32_t)(x) & I2S_STA_RX_DA_MASK) >> I2S_STA_RX_DA_SHIFT)
  271. /* Bitfield definition for register array: RXD */
  272. /*
  273. * D (RO)
  274. *
  275. */
  276. #define I2S_RXD_D_MASK (0xFFFFFFFFUL)
  277. #define I2S_RXD_D_SHIFT (0U)
  278. #define I2S_RXD_D_GET(x) (((uint32_t)(x) & I2S_RXD_D_MASK) >> I2S_RXD_D_SHIFT)
  279. /* Bitfield definition for register array: TXD */
  280. /*
  281. * D (WO)
  282. *
  283. */
  284. #define I2S_TXD_D_MASK (0xFFFFFFFFUL)
  285. #define I2S_TXD_D_SHIFT (0U)
  286. #define I2S_TXD_D_SET(x) (((uint32_t)(x) << I2S_TXD_D_SHIFT) & I2S_TXD_D_MASK)
  287. #define I2S_TXD_D_GET(x) (((uint32_t)(x) & I2S_TXD_D_MASK) >> I2S_TXD_D_SHIFT)
  288. /* Bitfield definition for register: CFGR */
  289. /*
  290. * BCLK_GATEOFF (RW)
  291. *
  292. * Gate off the bclk. Asserted to gate-off the BCLK.
  293. */
  294. #define I2S_CFGR_BCLK_GATEOFF_MASK (0x40000000UL)
  295. #define I2S_CFGR_BCLK_GATEOFF_SHIFT (30U)
  296. #define I2S_CFGR_BCLK_GATEOFF_SET(x) (((uint32_t)(x) << I2S_CFGR_BCLK_GATEOFF_SHIFT) & I2S_CFGR_BCLK_GATEOFF_MASK)
  297. #define I2S_CFGR_BCLK_GATEOFF_GET(x) (((uint32_t)(x) & I2S_CFGR_BCLK_GATEOFF_MASK) >> I2S_CFGR_BCLK_GATEOFF_SHIFT)
  298. /*
  299. * BCLK_DIV (RW)
  300. *
  301. * Linear prescaler to generate BCLK from MCLK.
  302. * BCLK_DIV [8:0] = 0: BCLK=No CLK.
  303. * BCLK_DIV [8:0] = 1: BCLK=MCLK/1
  304. * BCLK_DIV [8:0] = n: BCLK=MCLK/(n).
  305. * Note: These bits should be configured when the I2S is disabled. It is used only when the I2S is in master mode.
  306. */
  307. #define I2S_CFGR_BCLK_DIV_MASK (0x3FE00000UL)
  308. #define I2S_CFGR_BCLK_DIV_SHIFT (21U)
  309. #define I2S_CFGR_BCLK_DIV_SET(x) (((uint32_t)(x) << I2S_CFGR_BCLK_DIV_SHIFT) & I2S_CFGR_BCLK_DIV_MASK)
  310. #define I2S_CFGR_BCLK_DIV_GET(x) (((uint32_t)(x) & I2S_CFGR_BCLK_DIV_MASK) >> I2S_CFGR_BCLK_DIV_SHIFT)
  311. /*
  312. * INV_BCLK_OUT (RW)
  313. *
  314. * Invert the BCLK before sending it out to pad. Only valid in BCLK master mode
  315. */
  316. #define I2S_CFGR_INV_BCLK_OUT_MASK (0x100000UL)
  317. #define I2S_CFGR_INV_BCLK_OUT_SHIFT (20U)
  318. #define I2S_CFGR_INV_BCLK_OUT_SET(x) (((uint32_t)(x) << I2S_CFGR_INV_BCLK_OUT_SHIFT) & I2S_CFGR_INV_BCLK_OUT_MASK)
  319. #define I2S_CFGR_INV_BCLK_OUT_GET(x) (((uint32_t)(x) & I2S_CFGR_INV_BCLK_OUT_MASK) >> I2S_CFGR_INV_BCLK_OUT_SHIFT)
  320. /*
  321. * INV_BCLK_IN (RW)
  322. *
  323. * Invert the BCLK pad input before using it internally. Only valid in BCLK slave mode
  324. */
  325. #define I2S_CFGR_INV_BCLK_IN_MASK (0x80000UL)
  326. #define I2S_CFGR_INV_BCLK_IN_SHIFT (19U)
  327. #define I2S_CFGR_INV_BCLK_IN_SET(x) (((uint32_t)(x) << I2S_CFGR_INV_BCLK_IN_SHIFT) & I2S_CFGR_INV_BCLK_IN_MASK)
  328. #define I2S_CFGR_INV_BCLK_IN_GET(x) (((uint32_t)(x) & I2S_CFGR_INV_BCLK_IN_MASK) >> I2S_CFGR_INV_BCLK_IN_SHIFT)
  329. /*
  330. * INV_FCLK_OUT (RW)
  331. *
  332. * Invert the FCLK before sending it out to pad. Only valid in FCLK master mode
  333. */
  334. #define I2S_CFGR_INV_FCLK_OUT_MASK (0x40000UL)
  335. #define I2S_CFGR_INV_FCLK_OUT_SHIFT (18U)
  336. #define I2S_CFGR_INV_FCLK_OUT_SET(x) (((uint32_t)(x) << I2S_CFGR_INV_FCLK_OUT_SHIFT) & I2S_CFGR_INV_FCLK_OUT_MASK)
  337. #define I2S_CFGR_INV_FCLK_OUT_GET(x) (((uint32_t)(x) & I2S_CFGR_INV_FCLK_OUT_MASK) >> I2S_CFGR_INV_FCLK_OUT_SHIFT)
  338. /*
  339. * INV_FCLK_IN (RW)
  340. *
  341. * Invert the FCLK pad input before using it internally. Only valid in FCLK slave mode
  342. */
  343. #define I2S_CFGR_INV_FCLK_IN_MASK (0x20000UL)
  344. #define I2S_CFGR_INV_FCLK_IN_SHIFT (17U)
  345. #define I2S_CFGR_INV_FCLK_IN_SET(x) (((uint32_t)(x) << I2S_CFGR_INV_FCLK_IN_SHIFT) & I2S_CFGR_INV_FCLK_IN_MASK)
  346. #define I2S_CFGR_INV_FCLK_IN_GET(x) (((uint32_t)(x) & I2S_CFGR_INV_FCLK_IN_MASK) >> I2S_CFGR_INV_FCLK_IN_SHIFT)
  347. /*
  348. * INV_MCLK_OUT (RW)
  349. *
  350. * Invert the MCLK before sending it out to pad. Only valid in MCLK master mode
  351. */
  352. #define I2S_CFGR_INV_MCLK_OUT_MASK (0x10000UL)
  353. #define I2S_CFGR_INV_MCLK_OUT_SHIFT (16U)
  354. #define I2S_CFGR_INV_MCLK_OUT_SET(x) (((uint32_t)(x) << I2S_CFGR_INV_MCLK_OUT_SHIFT) & I2S_CFGR_INV_MCLK_OUT_MASK)
  355. #define I2S_CFGR_INV_MCLK_OUT_GET(x) (((uint32_t)(x) & I2S_CFGR_INV_MCLK_OUT_MASK) >> I2S_CFGR_INV_MCLK_OUT_SHIFT)
  356. /*
  357. * INV_MCLK_IN (RW)
  358. *
  359. * Invert the MCLK pad input before using it internally. Only valid in MCLK slave mode
  360. */
  361. #define I2S_CFGR_INV_MCLK_IN_MASK (0x8000U)
  362. #define I2S_CFGR_INV_MCLK_IN_SHIFT (15U)
  363. #define I2S_CFGR_INV_MCLK_IN_SET(x) (((uint32_t)(x) << I2S_CFGR_INV_MCLK_IN_SHIFT) & I2S_CFGR_INV_MCLK_IN_MASK)
  364. #define I2S_CFGR_INV_MCLK_IN_GET(x) (((uint32_t)(x) & I2S_CFGR_INV_MCLK_IN_MASK) >> I2S_CFGR_INV_MCLK_IN_SHIFT)
  365. /*
  366. * BCLK_SEL_OP (RW)
  367. *
  368. * asserted to use external clk source
  369. */
  370. #define I2S_CFGR_BCLK_SEL_OP_MASK (0x4000U)
  371. #define I2S_CFGR_BCLK_SEL_OP_SHIFT (14U)
  372. #define I2S_CFGR_BCLK_SEL_OP_SET(x) (((uint32_t)(x) << I2S_CFGR_BCLK_SEL_OP_SHIFT) & I2S_CFGR_BCLK_SEL_OP_MASK)
  373. #define I2S_CFGR_BCLK_SEL_OP_GET(x) (((uint32_t)(x) & I2S_CFGR_BCLK_SEL_OP_MASK) >> I2S_CFGR_BCLK_SEL_OP_SHIFT)
  374. /*
  375. * FCLK_SEL_OP (RW)
  376. *
  377. * asserted to use external clk source
  378. */
  379. #define I2S_CFGR_FCLK_SEL_OP_MASK (0x2000U)
  380. #define I2S_CFGR_FCLK_SEL_OP_SHIFT (13U)
  381. #define I2S_CFGR_FCLK_SEL_OP_SET(x) (((uint32_t)(x) << I2S_CFGR_FCLK_SEL_OP_SHIFT) & I2S_CFGR_FCLK_SEL_OP_MASK)
  382. #define I2S_CFGR_FCLK_SEL_OP_GET(x) (((uint32_t)(x) & I2S_CFGR_FCLK_SEL_OP_MASK) >> I2S_CFGR_FCLK_SEL_OP_SHIFT)
  383. /*
  384. * MCK_SEL_OP (RW)
  385. *
  386. * asserted to use external clk source
  387. */
  388. #define I2S_CFGR_MCK_SEL_OP_MASK (0x1000U)
  389. #define I2S_CFGR_MCK_SEL_OP_SHIFT (12U)
  390. #define I2S_CFGR_MCK_SEL_OP_SET(x) (((uint32_t)(x) << I2S_CFGR_MCK_SEL_OP_SHIFT) & I2S_CFGR_MCK_SEL_OP_MASK)
  391. #define I2S_CFGR_MCK_SEL_OP_GET(x) (((uint32_t)(x) & I2S_CFGR_MCK_SEL_OP_MASK) >> I2S_CFGR_MCK_SEL_OP_SHIFT)
  392. /*
  393. * FRAME_EDGE (RW)
  394. *
  395. * The start edge of a frame
  396. * 0: Falling edge indicates a new frame (Just like standard I2S Philips standard)
  397. * 1: Rising edge indicates a new frame
  398. */
  399. #define I2S_CFGR_FRAME_EDGE_MASK (0x800U)
  400. #define I2S_CFGR_FRAME_EDGE_SHIFT (11U)
  401. #define I2S_CFGR_FRAME_EDGE_SET(x) (((uint32_t)(x) << I2S_CFGR_FRAME_EDGE_SHIFT) & I2S_CFGR_FRAME_EDGE_MASK)
  402. #define I2S_CFGR_FRAME_EDGE_GET(x) (((uint32_t)(x) & I2S_CFGR_FRAME_EDGE_MASK) >> I2S_CFGR_FRAME_EDGE_SHIFT)
  403. /*
  404. * CH_MAX (RW)
  405. *
  406. * CH_MAX[4:0] s the number of channels supported in TDM mode. When not in TDM mode, it must be set as 2.
  407. * It must be an even number, so CH_MAX[0] is always 0.
  408. * 5'h2: 2 channels
  409. * 5'h4: 4 channels
  410. * ...
  411. * 5‘h10: 16 channels (max)
  412. */
  413. #define I2S_CFGR_CH_MAX_MASK (0x7C0U)
  414. #define I2S_CFGR_CH_MAX_SHIFT (6U)
  415. #define I2S_CFGR_CH_MAX_SET(x) (((uint32_t)(x) << I2S_CFGR_CH_MAX_SHIFT) & I2S_CFGR_CH_MAX_MASK)
  416. #define I2S_CFGR_CH_MAX_GET(x) (((uint32_t)(x) & I2S_CFGR_CH_MAX_MASK) >> I2S_CFGR_CH_MAX_SHIFT)
  417. /*
  418. * TDM_EN (RW)
  419. *
  420. * TDM mode
  421. * 0: not TDM mode
  422. * 1: TDM mode
  423. */
  424. #define I2S_CFGR_TDM_EN_MASK (0x20U)
  425. #define I2S_CFGR_TDM_EN_SHIFT (5U)
  426. #define I2S_CFGR_TDM_EN_SET(x) (((uint32_t)(x) << I2S_CFGR_TDM_EN_SHIFT) & I2S_CFGR_TDM_EN_MASK)
  427. #define I2S_CFGR_TDM_EN_GET(x) (((uint32_t)(x) & I2S_CFGR_TDM_EN_MASK) >> I2S_CFGR_TDM_EN_SHIFT)
  428. /*
  429. * STD (RW)
  430. *
  431. * I2S standard selection
  432. * 00: I2S Philips standard.
  433. * 01: MSB justified standard (left justified)
  434. * 10: LSB justified standard (right justified)
  435. * 11: PCM standard
  436. * Note: For correct operation, these bits should be configured when the I2S is disabled.
  437. */
  438. #define I2S_CFGR_STD_MASK (0x18U)
  439. #define I2S_CFGR_STD_SHIFT (3U)
  440. #define I2S_CFGR_STD_SET(x) (((uint32_t)(x) << I2S_CFGR_STD_SHIFT) & I2S_CFGR_STD_MASK)
  441. #define I2S_CFGR_STD_GET(x) (((uint32_t)(x) & I2S_CFGR_STD_MASK) >> I2S_CFGR_STD_SHIFT)
  442. /*
  443. * DATSIZ (RW)
  444. *
  445. * Data length to be transferred
  446. * 00: 16-bit data length
  447. * 01: 24-bit data length
  448. * 10: 32-bit data length
  449. * 11: Not allowed
  450. * Note: For correct operation, these bits should be configured when the I2S is disabled.
  451. */
  452. #define I2S_CFGR_DATSIZ_MASK (0x6U)
  453. #define I2S_CFGR_DATSIZ_SHIFT (1U)
  454. #define I2S_CFGR_DATSIZ_SET(x) (((uint32_t)(x) << I2S_CFGR_DATSIZ_SHIFT) & I2S_CFGR_DATSIZ_MASK)
  455. #define I2S_CFGR_DATSIZ_GET(x) (((uint32_t)(x) & I2S_CFGR_DATSIZ_MASK) >> I2S_CFGR_DATSIZ_SHIFT)
  456. /*
  457. * CHSIZ (RW)
  458. *
  459. * Channel length (number of bits per audio channel)
  460. * 0: 16-bit wide
  461. * 1: 32-bit wide
  462. * The bit write operation has a meaning only if DATLEN = 00 otherwise the channel length is fixed to 32-bit by hardware whatever the value filled in.
  463. * Note: For correct operation, this bit should be configured when the I2S is disabled.
  464. */
  465. #define I2S_CFGR_CHSIZ_MASK (0x1U)
  466. #define I2S_CFGR_CHSIZ_SHIFT (0U)
  467. #define I2S_CFGR_CHSIZ_SET(x) (((uint32_t)(x) << I2S_CFGR_CHSIZ_SHIFT) & I2S_CFGR_CHSIZ_MASK)
  468. #define I2S_CFGR_CHSIZ_GET(x) (((uint32_t)(x) & I2S_CFGR_CHSIZ_MASK) >> I2S_CFGR_CHSIZ_SHIFT)
  469. /* Bitfield definition for register: MISC_CFGR */
  470. /*
  471. * MCLK_GATEOFF (RW)
  472. *
  473. * Gate off the mclk. This mclk is the output of a glitch prone mux, so every time to switch the mclk, the gate off clock should be asserted at first. After the clock is switched, de-assert this bit to ungate off the mclk.
  474. */
  475. #define I2S_MISC_CFGR_MCLK_GATEOFF_MASK (0x2000U)
  476. #define I2S_MISC_CFGR_MCLK_GATEOFF_SHIFT (13U)
  477. #define I2S_MISC_CFGR_MCLK_GATEOFF_SET(x) (((uint32_t)(x) << I2S_MISC_CFGR_MCLK_GATEOFF_SHIFT) & I2S_MISC_CFGR_MCLK_GATEOFF_MASK)
  478. #define I2S_MISC_CFGR_MCLK_GATEOFF_GET(x) (((uint32_t)(x) & I2S_MISC_CFGR_MCLK_GATEOFF_MASK) >> I2S_MISC_CFGR_MCLK_GATEOFF_SHIFT)
  479. /*
  480. * MCLKOE (RW)
  481. *
  482. * Master clock output to pad enable
  483. * 0: Master clock output is disabled
  484. * 1: Master clock output is enabled
  485. * Note: This bit should be configured when the I2S is disabled. It is used only when the I2S is in master mode.
  486. */
  487. #define I2S_MISC_CFGR_MCLKOE_MASK (0x1U)
  488. #define I2S_MISC_CFGR_MCLKOE_SHIFT (0U)
  489. #define I2S_MISC_CFGR_MCLKOE_SET(x) (((uint32_t)(x) << I2S_MISC_CFGR_MCLKOE_SHIFT) & I2S_MISC_CFGR_MCLKOE_MASK)
  490. #define I2S_MISC_CFGR_MCLKOE_GET(x) (((uint32_t)(x) & I2S_MISC_CFGR_MCLKOE_MASK) >> I2S_MISC_CFGR_MCLKOE_SHIFT)
  491. /* Bitfield definition for register array: RXDSLOT */
  492. /*
  493. * EN (RW)
  494. *
  495. */
  496. #define I2S_RXDSLOT_EN_MASK (0xFFFFU)
  497. #define I2S_RXDSLOT_EN_SHIFT (0U)
  498. #define I2S_RXDSLOT_EN_SET(x) (((uint32_t)(x) << I2S_RXDSLOT_EN_SHIFT) & I2S_RXDSLOT_EN_MASK)
  499. #define I2S_RXDSLOT_EN_GET(x) (((uint32_t)(x) & I2S_RXDSLOT_EN_MASK) >> I2S_RXDSLOT_EN_SHIFT)
  500. /* Bitfield definition for register array: TXDSLOT */
  501. /*
  502. * EN (RW)
  503. *
  504. */
  505. #define I2S_TXDSLOT_EN_MASK (0xFFFFU)
  506. #define I2S_TXDSLOT_EN_SHIFT (0U)
  507. #define I2S_TXDSLOT_EN_SET(x) (((uint32_t)(x) << I2S_TXDSLOT_EN_SHIFT) & I2S_TXDSLOT_EN_MASK)
  508. #define I2S_TXDSLOT_EN_GET(x) (((uint32_t)(x) & I2S_TXDSLOT_EN_MASK) >> I2S_TXDSLOT_EN_SHIFT)
  509. /* RXD register group index macro definition */
  510. #define I2S_RXD_DATA0 (0UL)
  511. #define I2S_RXD_DATA1 (1UL)
  512. #define I2S_RXD_DATA2 (2UL)
  513. #define I2S_RXD_DATA3 (3UL)
  514. /* TXD register group index macro definition */
  515. #define I2S_TXD_DATA0 (0UL)
  516. #define I2S_TXD_DATA1 (1UL)
  517. #define I2S_TXD_DATA2 (2UL)
  518. #define I2S_TXD_DATA3 (3UL)
  519. /* RXDSLOT register group index macro definition */
  520. #define I2S_RXDSLOT_DATA0 (0UL)
  521. #define I2S_RXDSLOT_DATA1 (1UL)
  522. #define I2S_RXDSLOT_DATA2 (2UL)
  523. #define I2S_RXDSLOT_DATA3 (3UL)
  524. /* TXDSLOT register group index macro definition */
  525. #define I2S_TXDSLOT_DATA0 (0UL)
  526. #define I2S_TXDSLOT_DATA1 (1UL)
  527. #define I2S_TXDSLOT_DATA2 (2UL)
  528. #define I2S_TXDSLOT_DATA3 (3UL)
  529. #endif /* HPM_I2S_H */