hpm_vad_regs.h 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441
  1. /*
  2. * Copyright (c) 2021-2023 HPMicro
  3. *
  4. * SPDX-License-Identifier: BSD-3-Clause
  5. *
  6. */
  7. #ifndef HPM_VAD_H
  8. #define HPM_VAD_H
  9. typedef struct {
  10. __RW uint32_t CTRL; /* 0x0: Control Register */
  11. __RW uint32_t FILTCTRL; /* 0x4: Filter Control Register */
  12. __RW uint32_t DEC_CTRL0; /* 0x8: Decision Control Register 0 */
  13. __RW uint32_t DEC_CTRL1; /* 0xC: Decision Control Register 1 */
  14. __RW uint32_t DEC_CTRL2; /* 0x10: Decision Control Register 2 */
  15. __R uint8_t RESERVED0[4]; /* 0x14 - 0x17: Reserved */
  16. __RW uint32_t ST; /* 0x18: Status */
  17. __RW uint32_t OFIFO; /* 0x1C: Out FIFO */
  18. __RW uint32_t RUN; /* 0x20: Run Command Register */
  19. __RW uint32_t OFIFO_CTRL; /* 0x24: Out FIFO Control Register */
  20. __RW uint32_t CIC_CFG; /* 0x28: CIC Configuration Register */
  21. __R uint8_t RESERVED1[116]; /* 0x2C - 0x9F: Reserved */
  22. __R uint32_t COEF[1]; /* 0xA0: Short Time Energy Register */
  23. } VAD_Type;
  24. /* Bitfield definition for register: CTRL */
  25. /*
  26. * CAPT_DLY (RW)
  27. *
  28. * Capture cycle delay>=0, should be less than PDM_CLK_HFDIV
  29. */
  30. #define VAD_CTRL_CAPT_DLY_MASK (0xF000000UL)
  31. #define VAD_CTRL_CAPT_DLY_SHIFT (24U)
  32. #define VAD_CTRL_CAPT_DLY_SET(x) (((uint32_t)(x) << VAD_CTRL_CAPT_DLY_SHIFT) & VAD_CTRL_CAPT_DLY_MASK)
  33. #define VAD_CTRL_CAPT_DLY_GET(x) (((uint32_t)(x) & VAD_CTRL_CAPT_DLY_MASK) >> VAD_CTRL_CAPT_DLY_SHIFT)
  34. /*
  35. * PDM_CLK_HFDIV (RW)
  36. *
  37. * The clock divider will work at least 4.
  38. * 0: div-by-2,
  39. * 1: div-by-4
  40. * . . .
  41. * n: div-by-2*(n+1)
  42. */
  43. #define VAD_CTRL_PDM_CLK_HFDIV_MASK (0xF00000UL)
  44. #define VAD_CTRL_PDM_CLK_HFDIV_SHIFT (20U)
  45. #define VAD_CTRL_PDM_CLK_HFDIV_SET(x) (((uint32_t)(x) << VAD_CTRL_PDM_CLK_HFDIV_SHIFT) & VAD_CTRL_PDM_CLK_HFDIV_MASK)
  46. #define VAD_CTRL_PDM_CLK_HFDIV_GET(x) (((uint32_t)(x) & VAD_CTRL_PDM_CLK_HFDIV_MASK) >> VAD_CTRL_PDM_CLK_HFDIV_SHIFT)
  47. /*
  48. * VAD_IE (RW)
  49. *
  50. * VAD event interrupt enable
  51. */
  52. #define VAD_CTRL_VAD_IE_MASK (0x40000UL)
  53. #define VAD_CTRL_VAD_IE_SHIFT (18U)
  54. #define VAD_CTRL_VAD_IE_SET(x) (((uint32_t)(x) << VAD_CTRL_VAD_IE_SHIFT) & VAD_CTRL_VAD_IE_MASK)
  55. #define VAD_CTRL_VAD_IE_GET(x) (((uint32_t)(x) & VAD_CTRL_VAD_IE_MASK) >> VAD_CTRL_VAD_IE_SHIFT)
  56. /*
  57. * OFIFO_AV_IE (RW)
  58. *
  59. * OFIFO data available interrupt enable
  60. */
  61. #define VAD_CTRL_OFIFO_AV_IE_MASK (0x20000UL)
  62. #define VAD_CTRL_OFIFO_AV_IE_SHIFT (17U)
  63. #define VAD_CTRL_OFIFO_AV_IE_SET(x) (((uint32_t)(x) << VAD_CTRL_OFIFO_AV_IE_SHIFT) & VAD_CTRL_OFIFO_AV_IE_MASK)
  64. #define VAD_CTRL_OFIFO_AV_IE_GET(x) (((uint32_t)(x) & VAD_CTRL_OFIFO_AV_IE_MASK) >> VAD_CTRL_OFIFO_AV_IE_SHIFT)
  65. /*
  66. * MEMBUF_EMPTY_IE (RW)
  67. *
  68. * Buf empty interrupt enable
  69. */
  70. #define VAD_CTRL_MEMBUF_EMPTY_IE_MASK (0x10000UL)
  71. #define VAD_CTRL_MEMBUF_EMPTY_IE_SHIFT (16U)
  72. #define VAD_CTRL_MEMBUF_EMPTY_IE_SET(x) (((uint32_t)(x) << VAD_CTRL_MEMBUF_EMPTY_IE_SHIFT) & VAD_CTRL_MEMBUF_EMPTY_IE_MASK)
  73. #define VAD_CTRL_MEMBUF_EMPTY_IE_GET(x) (((uint32_t)(x) & VAD_CTRL_MEMBUF_EMPTY_IE_MASK) >> VAD_CTRL_MEMBUF_EMPTY_IE_SHIFT)
  74. /*
  75. * OFIFO_OVFL_ERR_IE (RW)
  76. *
  77. * OFIFO overflow error interrupt enable
  78. */
  79. #define VAD_CTRL_OFIFO_OVFL_ERR_IE_MASK (0x8000U)
  80. #define VAD_CTRL_OFIFO_OVFL_ERR_IE_SHIFT (15U)
  81. #define VAD_CTRL_OFIFO_OVFL_ERR_IE_SET(x) (((uint32_t)(x) << VAD_CTRL_OFIFO_OVFL_ERR_IE_SHIFT) & VAD_CTRL_OFIFO_OVFL_ERR_IE_MASK)
  82. #define VAD_CTRL_OFIFO_OVFL_ERR_IE_GET(x) (((uint32_t)(x) & VAD_CTRL_OFIFO_OVFL_ERR_IE_MASK) >> VAD_CTRL_OFIFO_OVFL_ERR_IE_SHIFT)
  83. /*
  84. * IIR_OVLD_ERR_IE (RW)
  85. *
  86. * IIR overload error interrupt enable
  87. */
  88. #define VAD_CTRL_IIR_OVLD_ERR_IE_MASK (0x4000U)
  89. #define VAD_CTRL_IIR_OVLD_ERR_IE_SHIFT (14U)
  90. #define VAD_CTRL_IIR_OVLD_ERR_IE_SET(x) (((uint32_t)(x) << VAD_CTRL_IIR_OVLD_ERR_IE_SHIFT) & VAD_CTRL_IIR_OVLD_ERR_IE_MASK)
  91. #define VAD_CTRL_IIR_OVLD_ERR_IE_GET(x) (((uint32_t)(x) & VAD_CTRL_IIR_OVLD_ERR_IE_MASK) >> VAD_CTRL_IIR_OVLD_ERR_IE_SHIFT)
  92. /*
  93. * IIR_OVFL_ERR_IE (RW)
  94. *
  95. * IIR overflow error interrupt enable
  96. */
  97. #define VAD_CTRL_IIR_OVFL_ERR_IE_MASK (0x2000U)
  98. #define VAD_CTRL_IIR_OVFL_ERR_IE_SHIFT (13U)
  99. #define VAD_CTRL_IIR_OVFL_ERR_IE_SET(x) (((uint32_t)(x) << VAD_CTRL_IIR_OVFL_ERR_IE_SHIFT) & VAD_CTRL_IIR_OVFL_ERR_IE_MASK)
  100. #define VAD_CTRL_IIR_OVFL_ERR_IE_GET(x) (((uint32_t)(x) & VAD_CTRL_IIR_OVFL_ERR_IE_MASK) >> VAD_CTRL_IIR_OVFL_ERR_IE_SHIFT)
  101. /*
  102. * CIC_OVLD_ERR_IE (RW)
  103. *
  104. * CIC overload Interrupt Enable
  105. */
  106. #define VAD_CTRL_CIC_OVLD_ERR_IE_MASK (0x1000U)
  107. #define VAD_CTRL_CIC_OVLD_ERR_IE_SHIFT (12U)
  108. #define VAD_CTRL_CIC_OVLD_ERR_IE_SET(x) (((uint32_t)(x) << VAD_CTRL_CIC_OVLD_ERR_IE_SHIFT) & VAD_CTRL_CIC_OVLD_ERR_IE_MASK)
  109. #define VAD_CTRL_CIC_OVLD_ERR_IE_GET(x) (((uint32_t)(x) & VAD_CTRL_CIC_OVLD_ERR_IE_MASK) >> VAD_CTRL_CIC_OVLD_ERR_IE_SHIFT)
  110. /*
  111. * CIC_SAT_ERR_IE (RW)
  112. *
  113. * CIC saturation Interrupt Enable
  114. */
  115. #define VAD_CTRL_CIC_SAT_ERR_IE_MASK (0x800U)
  116. #define VAD_CTRL_CIC_SAT_ERR_IE_SHIFT (11U)
  117. #define VAD_CTRL_CIC_SAT_ERR_IE_SET(x) (((uint32_t)(x) << VAD_CTRL_CIC_SAT_ERR_IE_SHIFT) & VAD_CTRL_CIC_SAT_ERR_IE_MASK)
  118. #define VAD_CTRL_CIC_SAT_ERR_IE_GET(x) (((uint32_t)(x) & VAD_CTRL_CIC_SAT_ERR_IE_MASK) >> VAD_CTRL_CIC_SAT_ERR_IE_SHIFT)
  119. /*
  120. * MEMBUF_DISABLE (RW)
  121. *
  122. * asserted to disable membuf
  123. */
  124. #define VAD_CTRL_MEMBUF_DISABLE_MASK (0x200U)
  125. #define VAD_CTRL_MEMBUF_DISABLE_SHIFT (9U)
  126. #define VAD_CTRL_MEMBUF_DISABLE_SET(x) (((uint32_t)(x) << VAD_CTRL_MEMBUF_DISABLE_SHIFT) & VAD_CTRL_MEMBUF_DISABLE_MASK)
  127. #define VAD_CTRL_MEMBUF_DISABLE_GET(x) (((uint32_t)(x) & VAD_CTRL_MEMBUF_DISABLE_MASK) >> VAD_CTRL_MEMBUF_DISABLE_SHIFT)
  128. /*
  129. * FIFO_THRSH (RW)
  130. *
  131. * OFIFO threshold to generate ofifo_av (when fillings >= threshold) (fifo size: max 16 items, 16*32bits)
  132. */
  133. #define VAD_CTRL_FIFO_THRSH_MASK (0x1E0U)
  134. #define VAD_CTRL_FIFO_THRSH_SHIFT (5U)
  135. #define VAD_CTRL_FIFO_THRSH_SET(x) (((uint32_t)(x) << VAD_CTRL_FIFO_THRSH_SHIFT) & VAD_CTRL_FIFO_THRSH_MASK)
  136. #define VAD_CTRL_FIFO_THRSH_GET(x) (((uint32_t)(x) & VAD_CTRL_FIFO_THRSH_MASK) >> VAD_CTRL_FIFO_THRSH_SHIFT)
  137. /*
  138. * PDM_CLK_DIV_BYPASS (RW)
  139. *
  140. * asserted to bypass the pdm clock divider
  141. */
  142. #define VAD_CTRL_PDM_CLK_DIV_BYPASS_MASK (0x10U)
  143. #define VAD_CTRL_PDM_CLK_DIV_BYPASS_SHIFT (4U)
  144. #define VAD_CTRL_PDM_CLK_DIV_BYPASS_SET(x) (((uint32_t)(x) << VAD_CTRL_PDM_CLK_DIV_BYPASS_SHIFT) & VAD_CTRL_PDM_CLK_DIV_BYPASS_MASK)
  145. #define VAD_CTRL_PDM_CLK_DIV_BYPASS_GET(x) (((uint32_t)(x) & VAD_CTRL_PDM_CLK_DIV_BYPASS_MASK) >> VAD_CTRL_PDM_CLK_DIV_BYPASS_SHIFT)
  146. /*
  147. * PDM_CLK_OE (RW)
  148. *
  149. * pdm_clk_output_en
  150. */
  151. #define VAD_CTRL_PDM_CLK_OE_MASK (0x8U)
  152. #define VAD_CTRL_PDM_CLK_OE_SHIFT (3U)
  153. #define VAD_CTRL_PDM_CLK_OE_SET(x) (((uint32_t)(x) << VAD_CTRL_PDM_CLK_OE_SHIFT) & VAD_CTRL_PDM_CLK_OE_MASK)
  154. #define VAD_CTRL_PDM_CLK_OE_GET(x) (((uint32_t)(x) & VAD_CTRL_PDM_CLK_OE_MASK) >> VAD_CTRL_PDM_CLK_OE_SHIFT)
  155. /*
  156. * CH_POL (RW)
  157. *
  158. * Asserted to select PDM_CLK high level captured, otherwise to select PDM_CLK low level captured.
  159. */
  160. #define VAD_CTRL_CH_POL_MASK (0x6U)
  161. #define VAD_CTRL_CH_POL_SHIFT (1U)
  162. #define VAD_CTRL_CH_POL_SET(x) (((uint32_t)(x) << VAD_CTRL_CH_POL_SHIFT) & VAD_CTRL_CH_POL_MASK)
  163. #define VAD_CTRL_CH_POL_GET(x) (((uint32_t)(x) & VAD_CTRL_CH_POL_MASK) >> VAD_CTRL_CH_POL_SHIFT)
  164. /*
  165. * CHNUM (RW)
  166. *
  167. * the number of channels to be stored in buffer. Asserted to enable 2 channels.
  168. */
  169. #define VAD_CTRL_CHNUM_MASK (0x1U)
  170. #define VAD_CTRL_CHNUM_SHIFT (0U)
  171. #define VAD_CTRL_CHNUM_SET(x) (((uint32_t)(x) << VAD_CTRL_CHNUM_SHIFT) & VAD_CTRL_CHNUM_MASK)
  172. #define VAD_CTRL_CHNUM_GET(x) (((uint32_t)(x) & VAD_CTRL_CHNUM_MASK) >> VAD_CTRL_CHNUM_SHIFT)
  173. /* Bitfield definition for register: FILTCTRL */
  174. /*
  175. * DECRATIO (RW)
  176. *
  177. * the decimation ratio of iir after CIC -1
  178. * 2: means dec-by-3
  179. */
  180. #define VAD_FILTCTRL_DECRATIO_MASK (0x700U)
  181. #define VAD_FILTCTRL_DECRATIO_SHIFT (8U)
  182. #define VAD_FILTCTRL_DECRATIO_SET(x) (((uint32_t)(x) << VAD_FILTCTRL_DECRATIO_SHIFT) & VAD_FILTCTRL_DECRATIO_MASK)
  183. #define VAD_FILTCTRL_DECRATIO_GET(x) (((uint32_t)(x) & VAD_FILTCTRL_DECRATIO_MASK) >> VAD_FILTCTRL_DECRATIO_SHIFT)
  184. /*
  185. * IIR_SLOT_EN (RW)
  186. *
  187. * IIR slot enable
  188. */
  189. #define VAD_FILTCTRL_IIR_SLOT_EN_MASK (0xFFU)
  190. #define VAD_FILTCTRL_IIR_SLOT_EN_SHIFT (0U)
  191. #define VAD_FILTCTRL_IIR_SLOT_EN_SET(x) (((uint32_t)(x) << VAD_FILTCTRL_IIR_SLOT_EN_SHIFT) & VAD_FILTCTRL_IIR_SLOT_EN_MASK)
  192. #define VAD_FILTCTRL_IIR_SLOT_EN_GET(x) (((uint32_t)(x) & VAD_FILTCTRL_IIR_SLOT_EN_MASK) >> VAD_FILTCTRL_IIR_SLOT_EN_SHIFT)
  193. /* Bitfield definition for register: DEC_CTRL0 */
  194. /*
  195. * NOISE_TOL (RW)
  196. *
  197. * the value of amplitude for noise determination when calculationg ZCR
  198. */
  199. #define VAD_DEC_CTRL0_NOISE_TOL_MASK (0xFFFF0000UL)
  200. #define VAD_DEC_CTRL0_NOISE_TOL_SHIFT (16U)
  201. #define VAD_DEC_CTRL0_NOISE_TOL_SET(x) (((uint32_t)(x) << VAD_DEC_CTRL0_NOISE_TOL_SHIFT) & VAD_DEC_CTRL0_NOISE_TOL_MASK)
  202. #define VAD_DEC_CTRL0_NOISE_TOL_GET(x) (((uint32_t)(x) & VAD_DEC_CTRL0_NOISE_TOL_MASK) >> VAD_DEC_CTRL0_NOISE_TOL_SHIFT)
  203. /*
  204. * BLK_CFG (RW)
  205. *
  206. * asserted to have 3 sub-blocks, otherwise to have 2 sub-blocks
  207. */
  208. #define VAD_DEC_CTRL0_BLK_CFG_MASK (0x200U)
  209. #define VAD_DEC_CTRL0_BLK_CFG_SHIFT (9U)
  210. #define VAD_DEC_CTRL0_BLK_CFG_SET(x) (((uint32_t)(x) << VAD_DEC_CTRL0_BLK_CFG_SHIFT) & VAD_DEC_CTRL0_BLK_CFG_MASK)
  211. #define VAD_DEC_CTRL0_BLK_CFG_GET(x) (((uint32_t)(x) & VAD_DEC_CTRL0_BLK_CFG_MASK) >> VAD_DEC_CTRL0_BLK_CFG_SHIFT)
  212. /*
  213. * SUBBLK_LEN (RW)
  214. *
  215. * length of sub-block
  216. */
  217. #define VAD_DEC_CTRL0_SUBBLK_LEN_MASK (0x1FFU)
  218. #define VAD_DEC_CTRL0_SUBBLK_LEN_SHIFT (0U)
  219. #define VAD_DEC_CTRL0_SUBBLK_LEN_SET(x) (((uint32_t)(x) << VAD_DEC_CTRL0_SUBBLK_LEN_SHIFT) & VAD_DEC_CTRL0_SUBBLK_LEN_MASK)
  220. #define VAD_DEC_CTRL0_SUBBLK_LEN_GET(x) (((uint32_t)(x) & VAD_DEC_CTRL0_SUBBLK_LEN_MASK) >> VAD_DEC_CTRL0_SUBBLK_LEN_SHIFT)
  221. /* Bitfield definition for register: DEC_CTRL1 */
  222. /*
  223. * ZCR_HIGH (RW)
  224. *
  225. * ZCR high limit
  226. */
  227. #define VAD_DEC_CTRL1_ZCR_HIGH_MASK (0x3FF800UL)
  228. #define VAD_DEC_CTRL1_ZCR_HIGH_SHIFT (11U)
  229. #define VAD_DEC_CTRL1_ZCR_HIGH_SET(x) (((uint32_t)(x) << VAD_DEC_CTRL1_ZCR_HIGH_SHIFT) & VAD_DEC_CTRL1_ZCR_HIGH_MASK)
  230. #define VAD_DEC_CTRL1_ZCR_HIGH_GET(x) (((uint32_t)(x) & VAD_DEC_CTRL1_ZCR_HIGH_MASK) >> VAD_DEC_CTRL1_ZCR_HIGH_SHIFT)
  231. /*
  232. * ZCR_LOW (RW)
  233. *
  234. * ZCR low limit
  235. */
  236. #define VAD_DEC_CTRL1_ZCR_LOW_MASK (0x7FFU)
  237. #define VAD_DEC_CTRL1_ZCR_LOW_SHIFT (0U)
  238. #define VAD_DEC_CTRL1_ZCR_LOW_SET(x) (((uint32_t)(x) << VAD_DEC_CTRL1_ZCR_LOW_SHIFT) & VAD_DEC_CTRL1_ZCR_LOW_MASK)
  239. #define VAD_DEC_CTRL1_ZCR_LOW_GET(x) (((uint32_t)(x) & VAD_DEC_CTRL1_ZCR_LOW_MASK) >> VAD_DEC_CTRL1_ZCR_LOW_SHIFT)
  240. /* Bitfield definition for register: DEC_CTRL2 */
  241. /*
  242. * AMP_HIGH (RW)
  243. *
  244. * amplitude high limit
  245. */
  246. #define VAD_DEC_CTRL2_AMP_HIGH_MASK (0xFFFF0000UL)
  247. #define VAD_DEC_CTRL2_AMP_HIGH_SHIFT (16U)
  248. #define VAD_DEC_CTRL2_AMP_HIGH_SET(x) (((uint32_t)(x) << VAD_DEC_CTRL2_AMP_HIGH_SHIFT) & VAD_DEC_CTRL2_AMP_HIGH_MASK)
  249. #define VAD_DEC_CTRL2_AMP_HIGH_GET(x) (((uint32_t)(x) & VAD_DEC_CTRL2_AMP_HIGH_MASK) >> VAD_DEC_CTRL2_AMP_HIGH_SHIFT)
  250. /*
  251. * AMP_LOW (RW)
  252. *
  253. * amplitude low limit
  254. */
  255. #define VAD_DEC_CTRL2_AMP_LOW_MASK (0xFFFFU)
  256. #define VAD_DEC_CTRL2_AMP_LOW_SHIFT (0U)
  257. #define VAD_DEC_CTRL2_AMP_LOW_SET(x) (((uint32_t)(x) << VAD_DEC_CTRL2_AMP_LOW_SHIFT) & VAD_DEC_CTRL2_AMP_LOW_MASK)
  258. #define VAD_DEC_CTRL2_AMP_LOW_GET(x) (((uint32_t)(x) & VAD_DEC_CTRL2_AMP_LOW_MASK) >> VAD_DEC_CTRL2_AMP_LOW_SHIFT)
  259. /* Bitfield definition for register: ST */
  260. /*
  261. * VAD (W1C)
  262. *
  263. * VAD event found
  264. */
  265. #define VAD_ST_VAD_MASK (0x80U)
  266. #define VAD_ST_VAD_SHIFT (7U)
  267. #define VAD_ST_VAD_SET(x) (((uint32_t)(x) << VAD_ST_VAD_SHIFT) & VAD_ST_VAD_MASK)
  268. #define VAD_ST_VAD_GET(x) (((uint32_t)(x) & VAD_ST_VAD_MASK) >> VAD_ST_VAD_SHIFT)
  269. /*
  270. * OFIFO_AV (RO)
  271. *
  272. * OFIFO data available
  273. */
  274. #define VAD_ST_OFIFO_AV_MASK (0x40U)
  275. #define VAD_ST_OFIFO_AV_SHIFT (6U)
  276. #define VAD_ST_OFIFO_AV_GET(x) (((uint32_t)(x) & VAD_ST_OFIFO_AV_MASK) >> VAD_ST_OFIFO_AV_SHIFT)
  277. /*
  278. * MEMBUF_EMPTY (W1C)
  279. *
  280. * Buf empty
  281. */
  282. #define VAD_ST_MEMBUF_EMPTY_MASK (0x20U)
  283. #define VAD_ST_MEMBUF_EMPTY_SHIFT (5U)
  284. #define VAD_ST_MEMBUF_EMPTY_SET(x) (((uint32_t)(x) << VAD_ST_MEMBUF_EMPTY_SHIFT) & VAD_ST_MEMBUF_EMPTY_MASK)
  285. #define VAD_ST_MEMBUF_EMPTY_GET(x) (((uint32_t)(x) & VAD_ST_MEMBUF_EMPTY_MASK) >> VAD_ST_MEMBUF_EMPTY_SHIFT)
  286. /*
  287. * OFIFO_OVFL (W1C)
  288. *
  289. * OFIFO overflow
  290. */
  291. #define VAD_ST_OFIFO_OVFL_MASK (0x10U)
  292. #define VAD_ST_OFIFO_OVFL_SHIFT (4U)
  293. #define VAD_ST_OFIFO_OVFL_SET(x) (((uint32_t)(x) << VAD_ST_OFIFO_OVFL_SHIFT) & VAD_ST_OFIFO_OVFL_MASK)
  294. #define VAD_ST_OFIFO_OVFL_GET(x) (((uint32_t)(x) & VAD_ST_OFIFO_OVFL_MASK) >> VAD_ST_OFIFO_OVFL_SHIFT)
  295. /*
  296. * IIR_OVLD (W1C)
  297. *
  298. * IIR overloading
  299. */
  300. #define VAD_ST_IIR_OVLD_MASK (0x8U)
  301. #define VAD_ST_IIR_OVLD_SHIFT (3U)
  302. #define VAD_ST_IIR_OVLD_SET(x) (((uint32_t)(x) << VAD_ST_IIR_OVLD_SHIFT) & VAD_ST_IIR_OVLD_MASK)
  303. #define VAD_ST_IIR_OVLD_GET(x) (((uint32_t)(x) & VAD_ST_IIR_OVLD_MASK) >> VAD_ST_IIR_OVLD_SHIFT)
  304. /*
  305. * IIR_OVFL (W1C)
  306. *
  307. * IIR oberflow
  308. */
  309. #define VAD_ST_IIR_OVFL_MASK (0x4U)
  310. #define VAD_ST_IIR_OVFL_SHIFT (2U)
  311. #define VAD_ST_IIR_OVFL_SET(x) (((uint32_t)(x) << VAD_ST_IIR_OVFL_SHIFT) & VAD_ST_IIR_OVFL_MASK)
  312. #define VAD_ST_IIR_OVFL_GET(x) (((uint32_t)(x) & VAD_ST_IIR_OVFL_MASK) >> VAD_ST_IIR_OVFL_SHIFT)
  313. /*
  314. * CIC_OVLD_ERR (W1C)
  315. *
  316. * CIC overload
  317. */
  318. #define VAD_ST_CIC_OVLD_ERR_MASK (0x2U)
  319. #define VAD_ST_CIC_OVLD_ERR_SHIFT (1U)
  320. #define VAD_ST_CIC_OVLD_ERR_SET(x) (((uint32_t)(x) << VAD_ST_CIC_OVLD_ERR_SHIFT) & VAD_ST_CIC_OVLD_ERR_MASK)
  321. #define VAD_ST_CIC_OVLD_ERR_GET(x) (((uint32_t)(x) & VAD_ST_CIC_OVLD_ERR_MASK) >> VAD_ST_CIC_OVLD_ERR_SHIFT)
  322. /*
  323. * CIC_SAT_ERR (W1C)
  324. *
  325. * CIC saturation
  326. */
  327. #define VAD_ST_CIC_SAT_ERR_MASK (0x1U)
  328. #define VAD_ST_CIC_SAT_ERR_SHIFT (0U)
  329. #define VAD_ST_CIC_SAT_ERR_SET(x) (((uint32_t)(x) << VAD_ST_CIC_SAT_ERR_SHIFT) & VAD_ST_CIC_SAT_ERR_MASK)
  330. #define VAD_ST_CIC_SAT_ERR_GET(x) (((uint32_t)(x) & VAD_ST_CIC_SAT_ERR_MASK) >> VAD_ST_CIC_SAT_ERR_SHIFT)
  331. /* Bitfield definition for register: OFIFO */
  332. /*
  333. * D (RW)
  334. *
  335. * The PCM data.
  336. * When there is only one channel, the samples are from Ch0, and the 2 samples in the 32-bits are: bit [31:16]: the samples earlier in time ([T-1]). Bit [15:0]: the samples later in time ([T]).
  337. * When there is two channels, the samples in the 32-bits are: bit [31:16]: the samples belong to Ch 1 (when ch_pol[1:0]==2, the data is captured at the positive part of the pdm clk). bit [15:0]: the samples belong to Ch 0 (when ch_pol[1:0]==2, the data is captured at the negtive part of the pdm clk).
  338. */
  339. #define VAD_OFIFO_D_MASK (0xFFFFFFFFUL)
  340. #define VAD_OFIFO_D_SHIFT (0U)
  341. #define VAD_OFIFO_D_SET(x) (((uint32_t)(x) << VAD_OFIFO_D_SHIFT) & VAD_OFIFO_D_MASK)
  342. #define VAD_OFIFO_D_GET(x) (((uint32_t)(x) & VAD_OFIFO_D_MASK) >> VAD_OFIFO_D_SHIFT)
  343. /* Bitfield definition for register: RUN */
  344. /*
  345. * SFTRST (RW)
  346. *
  347. * software reset. Self-clear
  348. */
  349. #define VAD_RUN_SFTRST_MASK (0x2U)
  350. #define VAD_RUN_SFTRST_SHIFT (1U)
  351. #define VAD_RUN_SFTRST_SET(x) (((uint32_t)(x) << VAD_RUN_SFTRST_SHIFT) & VAD_RUN_SFTRST_MASK)
  352. #define VAD_RUN_SFTRST_GET(x) (((uint32_t)(x) & VAD_RUN_SFTRST_MASK) >> VAD_RUN_SFTRST_SHIFT)
  353. /*
  354. * VAD_EN (RW)
  355. *
  356. * module enable
  357. */
  358. #define VAD_RUN_VAD_EN_MASK (0x1U)
  359. #define VAD_RUN_VAD_EN_SHIFT (0U)
  360. #define VAD_RUN_VAD_EN_SET(x) (((uint32_t)(x) << VAD_RUN_VAD_EN_SHIFT) & VAD_RUN_VAD_EN_MASK)
  361. #define VAD_RUN_VAD_EN_GET(x) (((uint32_t)(x) & VAD_RUN_VAD_EN_MASK) >> VAD_RUN_VAD_EN_SHIFT)
  362. /* Bitfield definition for register: OFIFO_CTRL */
  363. /*
  364. * EN (RW)
  365. *
  366. * Asserted to enable OFIFO
  367. */
  368. #define VAD_OFIFO_CTRL_EN_MASK (0x1U)
  369. #define VAD_OFIFO_CTRL_EN_SHIFT (0U)
  370. #define VAD_OFIFO_CTRL_EN_SET(x) (((uint32_t)(x) << VAD_OFIFO_CTRL_EN_SHIFT) & VAD_OFIFO_CTRL_EN_MASK)
  371. #define VAD_OFIFO_CTRL_EN_GET(x) (((uint32_t)(x) & VAD_OFIFO_CTRL_EN_MASK) >> VAD_OFIFO_CTRL_EN_SHIFT)
  372. /* Bitfield definition for register: CIC_CFG */
  373. /*
  374. * POST_SCALE (RW)
  375. *
  376. * the shift value after CIC results.
  377. */
  378. #define VAD_CIC_CFG_POST_SCALE_MASK (0xFC00U)
  379. #define VAD_CIC_CFG_POST_SCALE_SHIFT (10U)
  380. #define VAD_CIC_CFG_POST_SCALE_SET(x) (((uint32_t)(x) << VAD_CIC_CFG_POST_SCALE_SHIFT) & VAD_CIC_CFG_POST_SCALE_MASK)
  381. #define VAD_CIC_CFG_POST_SCALE_GET(x) (((uint32_t)(x) & VAD_CIC_CFG_POST_SCALE_MASK) >> VAD_CIC_CFG_POST_SCALE_SHIFT)
  382. /* Bitfield definition for register array: COEF */
  383. /*
  384. * VAL (RO)
  385. *
  386. * The current detected short time energy
  387. */
  388. #define VAD_COEF_VAL_MASK (0xFFFFFFFFUL)
  389. #define VAD_COEF_VAL_SHIFT (0U)
  390. #define VAD_COEF_VAL_GET(x) (((uint32_t)(x) & VAD_COEF_VAL_MASK) >> VAD_COEF_VAL_SHIFT)
  391. /* COEF register group index macro definition */
  392. #define VAD_COEF_STE_ACT (0UL)
  393. #endif /* HPM_VAD_H */