hpm_pdm_regs.h 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492
  1. /*
  2. * Copyright (c) 2021-2023 HPMicro
  3. *
  4. * SPDX-License-Identifier: BSD-3-Clause
  5. *
  6. */
  7. #ifndef HPM_PDM_H
  8. #define HPM_PDM_H
  9. typedef struct {
  10. __RW uint32_t CTRL; /* 0x0: Control Register */
  11. __RW uint32_t CH_CTRL; /* 0x4: Channel Control Register */
  12. __W uint32_t ST; /* 0x8: Status Register */
  13. __RW uint32_t CH_CFG; /* 0xC: Channel Configuration Register */
  14. __RW uint32_t CIC_CFG; /* 0x10: CIC configuration register */
  15. __RW uint32_t CTRL_INBUF; /* 0x14: In Buf Control Register */
  16. __RW uint32_t CTRL_FILT0; /* 0x18: Filter 0 Control Register */
  17. __RW uint32_t CTRL_FILT1; /* 0x1C: Filter 1 Control Register */
  18. __RW uint32_t RUN; /* 0x20: Run Register */
  19. __RW uint32_t MEMADDR; /* 0x24: Memory Access Address */
  20. __RW uint32_t MEMDATA; /* 0x28: Memory Access Data */
  21. __RW uint32_t HPF_MA; /* 0x2C: HPF A Coef Register */
  22. __RW uint32_t HPF_B; /* 0x30: HPF B Coef Register */
  23. } PDM_Type;
  24. /* Bitfield definition for register: CTRL */
  25. /*
  26. * SFTRST (RW)
  27. *
  28. * software reset the module. Self-clear.
  29. */
  30. #define PDM_CTRL_SFTRST_MASK (0x80000000UL)
  31. #define PDM_CTRL_SFTRST_SHIFT (31U)
  32. #define PDM_CTRL_SFTRST_SET(x) (((uint32_t)(x) << PDM_CTRL_SFTRST_SHIFT) & PDM_CTRL_SFTRST_MASK)
  33. #define PDM_CTRL_SFTRST_GET(x) (((uint32_t)(x) & PDM_CTRL_SFTRST_MASK) >> PDM_CTRL_SFTRST_SHIFT)
  34. /*
  35. * SOF_FEDGE (RW)
  36. *
  37. * asserted if the falling edge of the ref fclk from DAO is the start of a new frame. This is used to to align DAO feedback signal.
  38. */
  39. #define PDM_CTRL_SOF_FEDGE_MASK (0x800000UL)
  40. #define PDM_CTRL_SOF_FEDGE_SHIFT (23U)
  41. #define PDM_CTRL_SOF_FEDGE_SET(x) (((uint32_t)(x) << PDM_CTRL_SOF_FEDGE_SHIFT) & PDM_CTRL_SOF_FEDGE_MASK)
  42. #define PDM_CTRL_SOF_FEDGE_GET(x) (((uint32_t)(x) & PDM_CTRL_SOF_FEDGE_MASK) >> PDM_CTRL_SOF_FEDGE_SHIFT)
  43. /*
  44. * USE_COEF_RAM (RW)
  45. *
  46. * Asserted to use Coef RAM instead of Coef ROM
  47. */
  48. #define PDM_CTRL_USE_COEF_RAM_MASK (0x100000UL)
  49. #define PDM_CTRL_USE_COEF_RAM_SHIFT (20U)
  50. #define PDM_CTRL_USE_COEF_RAM_SET(x) (((uint32_t)(x) << PDM_CTRL_USE_COEF_RAM_SHIFT) & PDM_CTRL_USE_COEF_RAM_MASK)
  51. #define PDM_CTRL_USE_COEF_RAM_GET(x) (((uint32_t)(x) & PDM_CTRL_USE_COEF_RAM_MASK) >> PDM_CTRL_USE_COEF_RAM_SHIFT)
  52. /*
  53. * FILT_CRX_ERR_IE (RW)
  54. *
  55. * data accessed out of boundary error interruput enable. The error happens when the module cannot calculate the enough number of data in time.
  56. */
  57. #define PDM_CTRL_FILT_CRX_ERR_IE_MASK (0x80000UL)
  58. #define PDM_CTRL_FILT_CRX_ERR_IE_SHIFT (19U)
  59. #define PDM_CTRL_FILT_CRX_ERR_IE_SET(x) (((uint32_t)(x) << PDM_CTRL_FILT_CRX_ERR_IE_SHIFT) & PDM_CTRL_FILT_CRX_ERR_IE_MASK)
  60. #define PDM_CTRL_FILT_CRX_ERR_IE_GET(x) (((uint32_t)(x) & PDM_CTRL_FILT_CRX_ERR_IE_MASK) >> PDM_CTRL_FILT_CRX_ERR_IE_SHIFT)
  61. /*
  62. * OFIFO_OVFL_ERR_IE (RW)
  63. *
  64. * output fifo overflow error interrupt enable
  65. */
  66. #define PDM_CTRL_OFIFO_OVFL_ERR_IE_MASK (0x40000UL)
  67. #define PDM_CTRL_OFIFO_OVFL_ERR_IE_SHIFT (18U)
  68. #define PDM_CTRL_OFIFO_OVFL_ERR_IE_SET(x) (((uint32_t)(x) << PDM_CTRL_OFIFO_OVFL_ERR_IE_SHIFT) & PDM_CTRL_OFIFO_OVFL_ERR_IE_MASK)
  69. #define PDM_CTRL_OFIFO_OVFL_ERR_IE_GET(x) (((uint32_t)(x) & PDM_CTRL_OFIFO_OVFL_ERR_IE_MASK) >> PDM_CTRL_OFIFO_OVFL_ERR_IE_SHIFT)
  70. /*
  71. * CIC_OVLD_ERR_IE (RW)
  72. *
  73. * CIC overload error interrupt enable
  74. */
  75. #define PDM_CTRL_CIC_OVLD_ERR_IE_MASK (0x20000UL)
  76. #define PDM_CTRL_CIC_OVLD_ERR_IE_SHIFT (17U)
  77. #define PDM_CTRL_CIC_OVLD_ERR_IE_SET(x) (((uint32_t)(x) << PDM_CTRL_CIC_OVLD_ERR_IE_SHIFT) & PDM_CTRL_CIC_OVLD_ERR_IE_MASK)
  78. #define PDM_CTRL_CIC_OVLD_ERR_IE_GET(x) (((uint32_t)(x) & PDM_CTRL_CIC_OVLD_ERR_IE_MASK) >> PDM_CTRL_CIC_OVLD_ERR_IE_SHIFT)
  79. /*
  80. * CIC_SAT_ERR_IE (RW)
  81. *
  82. * Error interrupt enable
  83. * This bit controls the generation of an interrupt when an error condition (CIC saturation) occurs.
  84. * 0: Error interrupt is masked
  85. * 1: Error interrupt is enabled
  86. */
  87. #define PDM_CTRL_CIC_SAT_ERR_IE_MASK (0x10000UL)
  88. #define PDM_CTRL_CIC_SAT_ERR_IE_SHIFT (16U)
  89. #define PDM_CTRL_CIC_SAT_ERR_IE_SET(x) (((uint32_t)(x) << PDM_CTRL_CIC_SAT_ERR_IE_SHIFT) & PDM_CTRL_CIC_SAT_ERR_IE_MASK)
  90. #define PDM_CTRL_CIC_SAT_ERR_IE_GET(x) (((uint32_t)(x) & PDM_CTRL_CIC_SAT_ERR_IE_MASK) >> PDM_CTRL_CIC_SAT_ERR_IE_SHIFT)
  91. /*
  92. * DEC_AFT_CIC (RW)
  93. *
  94. * decimation rate after CIC. Now it is forced to be 3.
  95. */
  96. #define PDM_CTRL_DEC_AFT_CIC_MASK (0xF000U)
  97. #define PDM_CTRL_DEC_AFT_CIC_SHIFT (12U)
  98. #define PDM_CTRL_DEC_AFT_CIC_SET(x) (((uint32_t)(x) << PDM_CTRL_DEC_AFT_CIC_SHIFT) & PDM_CTRL_DEC_AFT_CIC_MASK)
  99. #define PDM_CTRL_DEC_AFT_CIC_GET(x) (((uint32_t)(x) & PDM_CTRL_DEC_AFT_CIC_MASK) >> PDM_CTRL_DEC_AFT_CIC_SHIFT)
  100. /*
  101. * CAPT_DLY (RW)
  102. *
  103. * Capture cycle delay>=0, should be less than PDM_CLK_HFDIV
  104. */
  105. #define PDM_CTRL_CAPT_DLY_MASK (0x780U)
  106. #define PDM_CTRL_CAPT_DLY_SHIFT (7U)
  107. #define PDM_CTRL_CAPT_DLY_SET(x) (((uint32_t)(x) << PDM_CTRL_CAPT_DLY_SHIFT) & PDM_CTRL_CAPT_DLY_MASK)
  108. #define PDM_CTRL_CAPT_DLY_GET(x) (((uint32_t)(x) & PDM_CTRL_CAPT_DLY_MASK) >> PDM_CTRL_CAPT_DLY_SHIFT)
  109. /*
  110. * PDM_CLK_HFDIV (RW)
  111. *
  112. * The clock divider will work at least 4.
  113. * 0: div-by-2,
  114. * 1: div-by-4
  115. * . . .
  116. * n: div-by-2*(n+1)
  117. */
  118. #define PDM_CTRL_PDM_CLK_HFDIV_MASK (0x78U)
  119. #define PDM_CTRL_PDM_CLK_HFDIV_SHIFT (3U)
  120. #define PDM_CTRL_PDM_CLK_HFDIV_SET(x) (((uint32_t)(x) << PDM_CTRL_PDM_CLK_HFDIV_SHIFT) & PDM_CTRL_PDM_CLK_HFDIV_MASK)
  121. #define PDM_CTRL_PDM_CLK_HFDIV_GET(x) (((uint32_t)(x) & PDM_CTRL_PDM_CLK_HFDIV_MASK) >> PDM_CTRL_PDM_CLK_HFDIV_SHIFT)
  122. /*
  123. * PDM_CLK_DIV_BYPASS (RW)
  124. *
  125. * asserted to bypass the pdm clock divider
  126. */
  127. #define PDM_CTRL_PDM_CLK_DIV_BYPASS_MASK (0x4U)
  128. #define PDM_CTRL_PDM_CLK_DIV_BYPASS_SHIFT (2U)
  129. #define PDM_CTRL_PDM_CLK_DIV_BYPASS_SET(x) (((uint32_t)(x) << PDM_CTRL_PDM_CLK_DIV_BYPASS_SHIFT) & PDM_CTRL_PDM_CLK_DIV_BYPASS_MASK)
  130. #define PDM_CTRL_PDM_CLK_DIV_BYPASS_GET(x) (((uint32_t)(x) & PDM_CTRL_PDM_CLK_DIV_BYPASS_MASK) >> PDM_CTRL_PDM_CLK_DIV_BYPASS_SHIFT)
  131. /*
  132. * PDM_CLK_OE (RW)
  133. *
  134. * pdm_clk_output_en
  135. */
  136. #define PDM_CTRL_PDM_CLK_OE_MASK (0x2U)
  137. #define PDM_CTRL_PDM_CLK_OE_SHIFT (1U)
  138. #define PDM_CTRL_PDM_CLK_OE_SET(x) (((uint32_t)(x) << PDM_CTRL_PDM_CLK_OE_SHIFT) & PDM_CTRL_PDM_CLK_OE_MASK)
  139. #define PDM_CTRL_PDM_CLK_OE_GET(x) (((uint32_t)(x) & PDM_CTRL_PDM_CLK_OE_MASK) >> PDM_CTRL_PDM_CLK_OE_SHIFT)
  140. /*
  141. * HPF_EN (RW)
  142. *
  143. * pdm high pass filter enable. This order-1 HPF only applies to the PDM mic data.
  144. */
  145. #define PDM_CTRL_HPF_EN_MASK (0x1U)
  146. #define PDM_CTRL_HPF_EN_SHIFT (0U)
  147. #define PDM_CTRL_HPF_EN_SET(x) (((uint32_t)(x) << PDM_CTRL_HPF_EN_SHIFT) & PDM_CTRL_HPF_EN_MASK)
  148. #define PDM_CTRL_HPF_EN_GET(x) (((uint32_t)(x) & PDM_CTRL_HPF_EN_MASK) >> PDM_CTRL_HPF_EN_SHIFT)
  149. /* Bitfield definition for register: CH_CTRL */
  150. /*
  151. * CH_POL (RW)
  152. *
  153. * Asserted to select PDM_CLK high level captured, otherwise to select PDM_CLK low level captured.
  154. */
  155. #define PDM_CH_CTRL_CH_POL_MASK (0xFF0000UL)
  156. #define PDM_CH_CTRL_CH_POL_SHIFT (16U)
  157. #define PDM_CH_CTRL_CH_POL_SET(x) (((uint32_t)(x) << PDM_CH_CTRL_CH_POL_SHIFT) & PDM_CH_CTRL_CH_POL_MASK)
  158. #define PDM_CH_CTRL_CH_POL_GET(x) (((uint32_t)(x) & PDM_CH_CTRL_CH_POL_MASK) >> PDM_CH_CTRL_CH_POL_SHIFT)
  159. /*
  160. * CH_EN (RW)
  161. *
  162. * Asserted to enable the channel.
  163. * Ch8 & 9 are refs.
  164. * Ch0-7 are pdm mics.
  165. */
  166. #define PDM_CH_CTRL_CH_EN_MASK (0x3FFU)
  167. #define PDM_CH_CTRL_CH_EN_SHIFT (0U)
  168. #define PDM_CH_CTRL_CH_EN_SET(x) (((uint32_t)(x) << PDM_CH_CTRL_CH_EN_SHIFT) & PDM_CH_CTRL_CH_EN_MASK)
  169. #define PDM_CH_CTRL_CH_EN_GET(x) (((uint32_t)(x) & PDM_CH_CTRL_CH_EN_MASK) >> PDM_CH_CTRL_CH_EN_SHIFT)
  170. /* Bitfield definition for register: ST */
  171. /*
  172. * FILT_CRX_ERR (W1C)
  173. *
  174. * data accessed out of boundary error
  175. */
  176. #define PDM_ST_FILT_CRX_ERR_MASK (0x8U)
  177. #define PDM_ST_FILT_CRX_ERR_SHIFT (3U)
  178. #define PDM_ST_FILT_CRX_ERR_SET(x) (((uint32_t)(x) << PDM_ST_FILT_CRX_ERR_SHIFT) & PDM_ST_FILT_CRX_ERR_MASK)
  179. #define PDM_ST_FILT_CRX_ERR_GET(x) (((uint32_t)(x) & PDM_ST_FILT_CRX_ERR_MASK) >> PDM_ST_FILT_CRX_ERR_SHIFT)
  180. /*
  181. * OFIFO_OVFL_ERR (W1C)
  182. *
  183. * output fifo overflow error. The reason may be sampling frequency mismatch, either fast or slow.
  184. */
  185. #define PDM_ST_OFIFO_OVFL_ERR_MASK (0x4U)
  186. #define PDM_ST_OFIFO_OVFL_ERR_SHIFT (2U)
  187. #define PDM_ST_OFIFO_OVFL_ERR_SET(x) (((uint32_t)(x) << PDM_ST_OFIFO_OVFL_ERR_SHIFT) & PDM_ST_OFIFO_OVFL_ERR_MASK)
  188. #define PDM_ST_OFIFO_OVFL_ERR_GET(x) (((uint32_t)(x) & PDM_ST_OFIFO_OVFL_ERR_MASK) >> PDM_ST_OFIFO_OVFL_ERR_SHIFT)
  189. /*
  190. * CIC_OVLD_ERR (W1C)
  191. *
  192. * CIC overload error. write 1 clear
  193. */
  194. #define PDM_ST_CIC_OVLD_ERR_MASK (0x2U)
  195. #define PDM_ST_CIC_OVLD_ERR_SHIFT (1U)
  196. #define PDM_ST_CIC_OVLD_ERR_SET(x) (((uint32_t)(x) << PDM_ST_CIC_OVLD_ERR_SHIFT) & PDM_ST_CIC_OVLD_ERR_MASK)
  197. #define PDM_ST_CIC_OVLD_ERR_GET(x) (((uint32_t)(x) & PDM_ST_CIC_OVLD_ERR_MASK) >> PDM_ST_CIC_OVLD_ERR_SHIFT)
  198. /*
  199. * CIC_SAT_ERR (W1C)
  200. *
  201. * CIC saturation. Write 1 clear
  202. */
  203. #define PDM_ST_CIC_SAT_ERR_MASK (0x1U)
  204. #define PDM_ST_CIC_SAT_ERR_SHIFT (0U)
  205. #define PDM_ST_CIC_SAT_ERR_SET(x) (((uint32_t)(x) << PDM_ST_CIC_SAT_ERR_SHIFT) & PDM_ST_CIC_SAT_ERR_MASK)
  206. #define PDM_ST_CIC_SAT_ERR_GET(x) (((uint32_t)(x) & PDM_ST_CIC_SAT_ERR_MASK) >> PDM_ST_CIC_SAT_ERR_SHIFT)
  207. /* Bitfield definition for register: CH_CFG */
  208. /*
  209. * CH9_TYPE (RW)
  210. *
  211. */
  212. #define PDM_CH_CFG_CH9_TYPE_MASK (0xC0000UL)
  213. #define PDM_CH_CFG_CH9_TYPE_SHIFT (18U)
  214. #define PDM_CH_CFG_CH9_TYPE_SET(x) (((uint32_t)(x) << PDM_CH_CFG_CH9_TYPE_SHIFT) & PDM_CH_CFG_CH9_TYPE_MASK)
  215. #define PDM_CH_CFG_CH9_TYPE_GET(x) (((uint32_t)(x) & PDM_CH_CFG_CH9_TYPE_MASK) >> PDM_CH_CFG_CH9_TYPE_SHIFT)
  216. /*
  217. * CH8_TYPE (RW)
  218. *
  219. */
  220. #define PDM_CH_CFG_CH8_TYPE_MASK (0x30000UL)
  221. #define PDM_CH_CFG_CH8_TYPE_SHIFT (16U)
  222. #define PDM_CH_CFG_CH8_TYPE_SET(x) (((uint32_t)(x) << PDM_CH_CFG_CH8_TYPE_SHIFT) & PDM_CH_CFG_CH8_TYPE_MASK)
  223. #define PDM_CH_CFG_CH8_TYPE_GET(x) (((uint32_t)(x) & PDM_CH_CFG_CH8_TYPE_MASK) >> PDM_CH_CFG_CH8_TYPE_SHIFT)
  224. /*
  225. * CH7_TYPE (RW)
  226. *
  227. */
  228. #define PDM_CH_CFG_CH7_TYPE_MASK (0xC000U)
  229. #define PDM_CH_CFG_CH7_TYPE_SHIFT (14U)
  230. #define PDM_CH_CFG_CH7_TYPE_SET(x) (((uint32_t)(x) << PDM_CH_CFG_CH7_TYPE_SHIFT) & PDM_CH_CFG_CH7_TYPE_MASK)
  231. #define PDM_CH_CFG_CH7_TYPE_GET(x) (((uint32_t)(x) & PDM_CH_CFG_CH7_TYPE_MASK) >> PDM_CH_CFG_CH7_TYPE_SHIFT)
  232. /*
  233. * CH6_TYPE (RW)
  234. *
  235. */
  236. #define PDM_CH_CFG_CH6_TYPE_MASK (0x3000U)
  237. #define PDM_CH_CFG_CH6_TYPE_SHIFT (12U)
  238. #define PDM_CH_CFG_CH6_TYPE_SET(x) (((uint32_t)(x) << PDM_CH_CFG_CH6_TYPE_SHIFT) & PDM_CH_CFG_CH6_TYPE_MASK)
  239. #define PDM_CH_CFG_CH6_TYPE_GET(x) (((uint32_t)(x) & PDM_CH_CFG_CH6_TYPE_MASK) >> PDM_CH_CFG_CH6_TYPE_SHIFT)
  240. /*
  241. * CH5_TYPE (RW)
  242. *
  243. */
  244. #define PDM_CH_CFG_CH5_TYPE_MASK (0xC00U)
  245. #define PDM_CH_CFG_CH5_TYPE_SHIFT (10U)
  246. #define PDM_CH_CFG_CH5_TYPE_SET(x) (((uint32_t)(x) << PDM_CH_CFG_CH5_TYPE_SHIFT) & PDM_CH_CFG_CH5_TYPE_MASK)
  247. #define PDM_CH_CFG_CH5_TYPE_GET(x) (((uint32_t)(x) & PDM_CH_CFG_CH5_TYPE_MASK) >> PDM_CH_CFG_CH5_TYPE_SHIFT)
  248. /*
  249. * CH4_TYPE (RW)
  250. *
  251. */
  252. #define PDM_CH_CFG_CH4_TYPE_MASK (0x300U)
  253. #define PDM_CH_CFG_CH4_TYPE_SHIFT (8U)
  254. #define PDM_CH_CFG_CH4_TYPE_SET(x) (((uint32_t)(x) << PDM_CH_CFG_CH4_TYPE_SHIFT) & PDM_CH_CFG_CH4_TYPE_MASK)
  255. #define PDM_CH_CFG_CH4_TYPE_GET(x) (((uint32_t)(x) & PDM_CH_CFG_CH4_TYPE_MASK) >> PDM_CH_CFG_CH4_TYPE_SHIFT)
  256. /*
  257. * CH3_TYPE (RW)
  258. *
  259. */
  260. #define PDM_CH_CFG_CH3_TYPE_MASK (0xC0U)
  261. #define PDM_CH_CFG_CH3_TYPE_SHIFT (6U)
  262. #define PDM_CH_CFG_CH3_TYPE_SET(x) (((uint32_t)(x) << PDM_CH_CFG_CH3_TYPE_SHIFT) & PDM_CH_CFG_CH3_TYPE_MASK)
  263. #define PDM_CH_CFG_CH3_TYPE_GET(x) (((uint32_t)(x) & PDM_CH_CFG_CH3_TYPE_MASK) >> PDM_CH_CFG_CH3_TYPE_SHIFT)
  264. /*
  265. * CH2_TYPE (RW)
  266. *
  267. */
  268. #define PDM_CH_CFG_CH2_TYPE_MASK (0x30U)
  269. #define PDM_CH_CFG_CH2_TYPE_SHIFT (4U)
  270. #define PDM_CH_CFG_CH2_TYPE_SET(x) (((uint32_t)(x) << PDM_CH_CFG_CH2_TYPE_SHIFT) & PDM_CH_CFG_CH2_TYPE_MASK)
  271. #define PDM_CH_CFG_CH2_TYPE_GET(x) (((uint32_t)(x) & PDM_CH_CFG_CH2_TYPE_MASK) >> PDM_CH_CFG_CH2_TYPE_SHIFT)
  272. /*
  273. * CH1_TYPE (RW)
  274. *
  275. */
  276. #define PDM_CH_CFG_CH1_TYPE_MASK (0xCU)
  277. #define PDM_CH_CFG_CH1_TYPE_SHIFT (2U)
  278. #define PDM_CH_CFG_CH1_TYPE_SET(x) (((uint32_t)(x) << PDM_CH_CFG_CH1_TYPE_SHIFT) & PDM_CH_CFG_CH1_TYPE_MASK)
  279. #define PDM_CH_CFG_CH1_TYPE_GET(x) (((uint32_t)(x) & PDM_CH_CFG_CH1_TYPE_MASK) >> PDM_CH_CFG_CH1_TYPE_SHIFT)
  280. /*
  281. * CH0_TYPE (RW)
  282. *
  283. * Type of Channel 0
  284. * 2'b00: dec-by-3 wiith filter type0 (CIC Compenstation+norm filter)
  285. * 2'b01: dec-by-3 with filter type 1 (No CIC compenstation, only norm filter)
  286. */
  287. #define PDM_CH_CFG_CH0_TYPE_MASK (0x3U)
  288. #define PDM_CH_CFG_CH0_TYPE_SHIFT (0U)
  289. #define PDM_CH_CFG_CH0_TYPE_SET(x) (((uint32_t)(x) << PDM_CH_CFG_CH0_TYPE_SHIFT) & PDM_CH_CFG_CH0_TYPE_MASK)
  290. #define PDM_CH_CFG_CH0_TYPE_GET(x) (((uint32_t)(x) & PDM_CH_CFG_CH0_TYPE_MASK) >> PDM_CH_CFG_CH0_TYPE_SHIFT)
  291. /* Bitfield definition for register: CIC_CFG */
  292. /*
  293. * POST_SCALE (RW)
  294. *
  295. * the shift value after CIC results.
  296. */
  297. #define PDM_CIC_CFG_POST_SCALE_MASK (0xFC00U)
  298. #define PDM_CIC_CFG_POST_SCALE_SHIFT (10U)
  299. #define PDM_CIC_CFG_POST_SCALE_SET(x) (((uint32_t)(x) << PDM_CIC_CFG_POST_SCALE_SHIFT) & PDM_CIC_CFG_POST_SCALE_MASK)
  300. #define PDM_CIC_CFG_POST_SCALE_GET(x) (((uint32_t)(x) & PDM_CIC_CFG_POST_SCALE_MASK) >> PDM_CIC_CFG_POST_SCALE_SHIFT)
  301. /*
  302. * SGD (RW)
  303. *
  304. * Sigma_delta_order[1:0]
  305. * 2'b00: 7
  306. * 2'b01: 6
  307. * 2'b10: 5
  308. * Others: unused
  309. */
  310. #define PDM_CIC_CFG_SGD_MASK (0x300U)
  311. #define PDM_CIC_CFG_SGD_SHIFT (8U)
  312. #define PDM_CIC_CFG_SGD_SET(x) (((uint32_t)(x) << PDM_CIC_CFG_SGD_SHIFT) & PDM_CIC_CFG_SGD_MASK)
  313. #define PDM_CIC_CFG_SGD_GET(x) (((uint32_t)(x) & PDM_CIC_CFG_SGD_MASK) >> PDM_CIC_CFG_SGD_SHIFT)
  314. /*
  315. * CIC_DEC_RATIO (RW)
  316. *
  317. * CIC decimation factor
  318. */
  319. #define PDM_CIC_CFG_CIC_DEC_RATIO_MASK (0xFFU)
  320. #define PDM_CIC_CFG_CIC_DEC_RATIO_SHIFT (0U)
  321. #define PDM_CIC_CFG_CIC_DEC_RATIO_SET(x) (((uint32_t)(x) << PDM_CIC_CFG_CIC_DEC_RATIO_SHIFT) & PDM_CIC_CFG_CIC_DEC_RATIO_MASK)
  322. #define PDM_CIC_CFG_CIC_DEC_RATIO_GET(x) (((uint32_t)(x) & PDM_CIC_CFG_CIC_DEC_RATIO_MASK) >> PDM_CIC_CFG_CIC_DEC_RATIO_SHIFT)
  323. /* Bitfield definition for register: CTRL_INBUF */
  324. /*
  325. * MAX_PTR (RW)
  326. *
  327. * The buf size-1 for each channel
  328. */
  329. #define PDM_CTRL_INBUF_MAX_PTR_MASK (0x3FC00000UL)
  330. #define PDM_CTRL_INBUF_MAX_PTR_SHIFT (22U)
  331. #define PDM_CTRL_INBUF_MAX_PTR_SET(x) (((uint32_t)(x) << PDM_CTRL_INBUF_MAX_PTR_SHIFT) & PDM_CTRL_INBUF_MAX_PTR_MASK)
  332. #define PDM_CTRL_INBUF_MAX_PTR_GET(x) (((uint32_t)(x) & PDM_CTRL_INBUF_MAX_PTR_MASK) >> PDM_CTRL_INBUF_MAX_PTR_SHIFT)
  333. /*
  334. * PITCH (RW)
  335. *
  336. * The spacing between starting address of adjacent channels
  337. */
  338. #define PDM_CTRL_INBUF_PITCH_MASK (0x3FF800UL)
  339. #define PDM_CTRL_INBUF_PITCH_SHIFT (11U)
  340. #define PDM_CTRL_INBUF_PITCH_SET(x) (((uint32_t)(x) << PDM_CTRL_INBUF_PITCH_SHIFT) & PDM_CTRL_INBUF_PITCH_MASK)
  341. #define PDM_CTRL_INBUF_PITCH_GET(x) (((uint32_t)(x) & PDM_CTRL_INBUF_PITCH_MASK) >> PDM_CTRL_INBUF_PITCH_SHIFT)
  342. /*
  343. * START_ADDR (RW)
  344. *
  345. * The starting address of channel 0 in filter data buffer
  346. */
  347. #define PDM_CTRL_INBUF_START_ADDR_MASK (0x7FFU)
  348. #define PDM_CTRL_INBUF_START_ADDR_SHIFT (0U)
  349. #define PDM_CTRL_INBUF_START_ADDR_SET(x) (((uint32_t)(x) << PDM_CTRL_INBUF_START_ADDR_SHIFT) & PDM_CTRL_INBUF_START_ADDR_MASK)
  350. #define PDM_CTRL_INBUF_START_ADDR_GET(x) (((uint32_t)(x) & PDM_CTRL_INBUF_START_ADDR_MASK) >> PDM_CTRL_INBUF_START_ADDR_SHIFT)
  351. /* Bitfield definition for register: CTRL_FILT0 */
  352. /*
  353. * COEF_LEN_M0 (RW)
  354. *
  355. * Coef length of filter type 2'b00 in coef memory
  356. */
  357. #define PDM_CTRL_FILT0_COEF_LEN_M0_MASK (0xFF00U)
  358. #define PDM_CTRL_FILT0_COEF_LEN_M0_SHIFT (8U)
  359. #define PDM_CTRL_FILT0_COEF_LEN_M0_SET(x) (((uint32_t)(x) << PDM_CTRL_FILT0_COEF_LEN_M0_SHIFT) & PDM_CTRL_FILT0_COEF_LEN_M0_MASK)
  360. #define PDM_CTRL_FILT0_COEF_LEN_M0_GET(x) (((uint32_t)(x) & PDM_CTRL_FILT0_COEF_LEN_M0_MASK) >> PDM_CTRL_FILT0_COEF_LEN_M0_SHIFT)
  361. /*
  362. * COEF_START_ADDR (RW)
  363. *
  364. * Starting address of Coef of filter type 2'b00 in coef memory
  365. */
  366. #define PDM_CTRL_FILT0_COEF_START_ADDR_MASK (0xFFU)
  367. #define PDM_CTRL_FILT0_COEF_START_ADDR_SHIFT (0U)
  368. #define PDM_CTRL_FILT0_COEF_START_ADDR_SET(x) (((uint32_t)(x) << PDM_CTRL_FILT0_COEF_START_ADDR_SHIFT) & PDM_CTRL_FILT0_COEF_START_ADDR_MASK)
  369. #define PDM_CTRL_FILT0_COEF_START_ADDR_GET(x) (((uint32_t)(x) & PDM_CTRL_FILT0_COEF_START_ADDR_MASK) >> PDM_CTRL_FILT0_COEF_START_ADDR_SHIFT)
  370. /* Bitfield definition for register: CTRL_FILT1 */
  371. /*
  372. * COEF_LEN_M1 (RW)
  373. *
  374. * Coef length of filter type 2'b01 in coef memory
  375. */
  376. #define PDM_CTRL_FILT1_COEF_LEN_M1_MASK (0xFF00U)
  377. #define PDM_CTRL_FILT1_COEF_LEN_M1_SHIFT (8U)
  378. #define PDM_CTRL_FILT1_COEF_LEN_M1_SET(x) (((uint32_t)(x) << PDM_CTRL_FILT1_COEF_LEN_M1_SHIFT) & PDM_CTRL_FILT1_COEF_LEN_M1_MASK)
  379. #define PDM_CTRL_FILT1_COEF_LEN_M1_GET(x) (((uint32_t)(x) & PDM_CTRL_FILT1_COEF_LEN_M1_MASK) >> PDM_CTRL_FILT1_COEF_LEN_M1_SHIFT)
  380. /*
  381. * COEF_START_ADDR (RW)
  382. *
  383. * Starting address of Coef of filter type 2'b01 in coef memory
  384. */
  385. #define PDM_CTRL_FILT1_COEF_START_ADDR_MASK (0xFFU)
  386. #define PDM_CTRL_FILT1_COEF_START_ADDR_SHIFT (0U)
  387. #define PDM_CTRL_FILT1_COEF_START_ADDR_SET(x) (((uint32_t)(x) << PDM_CTRL_FILT1_COEF_START_ADDR_SHIFT) & PDM_CTRL_FILT1_COEF_START_ADDR_MASK)
  388. #define PDM_CTRL_FILT1_COEF_START_ADDR_GET(x) (((uint32_t)(x) & PDM_CTRL_FILT1_COEF_START_ADDR_MASK) >> PDM_CTRL_FILT1_COEF_START_ADDR_SHIFT)
  389. /* Bitfield definition for register: RUN */
  390. /*
  391. * PDM_EN (RW)
  392. *
  393. * Asserted to enable the module
  394. */
  395. #define PDM_RUN_PDM_EN_MASK (0x1U)
  396. #define PDM_RUN_PDM_EN_SHIFT (0U)
  397. #define PDM_RUN_PDM_EN_SET(x) (((uint32_t)(x) << PDM_RUN_PDM_EN_SHIFT) & PDM_RUN_PDM_EN_MASK)
  398. #define PDM_RUN_PDM_EN_GET(x) (((uint32_t)(x) & PDM_RUN_PDM_EN_MASK) >> PDM_RUN_PDM_EN_SHIFT)
  399. /* Bitfield definition for register: MEMADDR */
  400. /*
  401. * ADDR (RW)
  402. *
  403. * 0--0x0FFFFFFF: COEF_RAM
  404. * 0x10000000--0x1FFFFFFF: DATA_RAM
  405. */
  406. #define PDM_MEMADDR_ADDR_MASK (0xFFFFFFFFUL)
  407. #define PDM_MEMADDR_ADDR_SHIFT (0U)
  408. #define PDM_MEMADDR_ADDR_SET(x) (((uint32_t)(x) << PDM_MEMADDR_ADDR_SHIFT) & PDM_MEMADDR_ADDR_MASK)
  409. #define PDM_MEMADDR_ADDR_GET(x) (((uint32_t)(x) & PDM_MEMADDR_ADDR_MASK) >> PDM_MEMADDR_ADDR_SHIFT)
  410. /* Bitfield definition for register: MEMDATA */
  411. /*
  412. * DATA (RW)
  413. *
  414. * The data write-to/read-from buffer
  415. */
  416. #define PDM_MEMDATA_DATA_MASK (0xFFFFFFFFUL)
  417. #define PDM_MEMDATA_DATA_SHIFT (0U)
  418. #define PDM_MEMDATA_DATA_SET(x) (((uint32_t)(x) << PDM_MEMDATA_DATA_SHIFT) & PDM_MEMDATA_DATA_MASK)
  419. #define PDM_MEMDATA_DATA_GET(x) (((uint32_t)(x) & PDM_MEMDATA_DATA_MASK) >> PDM_MEMDATA_DATA_SHIFT)
  420. /* Bitfield definition for register: HPF_MA */
  421. /*
  422. * COEF (RW)
  423. *
  424. * Composite value of coef A of the Order-1 HPF
  425. */
  426. #define PDM_HPF_MA_COEF_MASK (0xFFFFFFFFUL)
  427. #define PDM_HPF_MA_COEF_SHIFT (0U)
  428. #define PDM_HPF_MA_COEF_SET(x) (((uint32_t)(x) << PDM_HPF_MA_COEF_SHIFT) & PDM_HPF_MA_COEF_MASK)
  429. #define PDM_HPF_MA_COEF_GET(x) (((uint32_t)(x) & PDM_HPF_MA_COEF_MASK) >> PDM_HPF_MA_COEF_SHIFT)
  430. /* Bitfield definition for register: HPF_B */
  431. /*
  432. * COEF (RW)
  433. *
  434. * coef B of the Order-1 HPF
  435. */
  436. #define PDM_HPF_B_COEF_MASK (0xFFFFFFFFUL)
  437. #define PDM_HPF_B_COEF_SHIFT (0U)
  438. #define PDM_HPF_B_COEF_SET(x) (((uint32_t)(x) << PDM_HPF_B_COEF_SHIFT) & PDM_HPF_B_COEF_MASK)
  439. #define PDM_HPF_B_COEF_GET(x) (((uint32_t)(x) & PDM_HPF_B_COEF_MASK) >> PDM_HPF_B_COEF_SHIFT)
  440. #endif /* HPM_PDM_H */