hpm_dao_regs.h 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  1. /*
  2. * Copyright (c) 2021-2023 HPMicro
  3. *
  4. * SPDX-License-Identifier: BSD-3-Clause
  5. *
  6. */
  7. #ifndef HPM_DAO_H
  8. #define HPM_DAO_H
  9. typedef struct {
  10. __RW uint32_t CTRL; /* 0x0: Control Register */
  11. __R uint8_t RESERVED0[4]; /* 0x4 - 0x7: Reserved */
  12. __RW uint32_t CMD; /* 0x8: Command Register */
  13. __RW uint32_t RX_CFGR; /* 0xC: Configuration Register */
  14. __RW uint32_t RXSLT; /* 0x10: RX Slot Control Register */
  15. __RW uint32_t HPF_MA; /* 0x14: HPF A Coef Register */
  16. __RW uint32_t HPF_B; /* 0x18: HPF B Coef Register */
  17. } DAO_Type;
  18. /* Bitfield definition for register: CTRL */
  19. /*
  20. * HPF_EN (RW)
  21. *
  22. * Whether HPF is enabled. This HPF is used to filter out the DC part.
  23. */
  24. #define DAO_CTRL_HPF_EN_MASK (0x20000UL)
  25. #define DAO_CTRL_HPF_EN_SHIFT (17U)
  26. #define DAO_CTRL_HPF_EN_SET(x) (((uint32_t)(x) << DAO_CTRL_HPF_EN_SHIFT) & DAO_CTRL_HPF_EN_MASK)
  27. #define DAO_CTRL_HPF_EN_GET(x) (((uint32_t)(x) & DAO_CTRL_HPF_EN_MASK) >> DAO_CTRL_HPF_EN_SHIFT)
  28. /*
  29. * MONO (RW)
  30. *
  31. * Asserted to let the left and right channel output the same value.
  32. */
  33. #define DAO_CTRL_MONO_MASK (0x80U)
  34. #define DAO_CTRL_MONO_SHIFT (7U)
  35. #define DAO_CTRL_MONO_SET(x) (((uint32_t)(x) << DAO_CTRL_MONO_SHIFT) & DAO_CTRL_MONO_MASK)
  36. #define DAO_CTRL_MONO_GET(x) (((uint32_t)(x) & DAO_CTRL_MONO_MASK) >> DAO_CTRL_MONO_SHIFT)
  37. /*
  38. * RIGHT_EN (RW)
  39. *
  40. * Asserted to enable the right channel
  41. */
  42. #define DAO_CTRL_RIGHT_EN_MASK (0x40U)
  43. #define DAO_CTRL_RIGHT_EN_SHIFT (6U)
  44. #define DAO_CTRL_RIGHT_EN_SET(x) (((uint32_t)(x) << DAO_CTRL_RIGHT_EN_SHIFT) & DAO_CTRL_RIGHT_EN_MASK)
  45. #define DAO_CTRL_RIGHT_EN_GET(x) (((uint32_t)(x) & DAO_CTRL_RIGHT_EN_MASK) >> DAO_CTRL_RIGHT_EN_SHIFT)
  46. /*
  47. * LEFT_EN (RW)
  48. *
  49. * Asserted to enable the left channel
  50. */
  51. #define DAO_CTRL_LEFT_EN_MASK (0x20U)
  52. #define DAO_CTRL_LEFT_EN_SHIFT (5U)
  53. #define DAO_CTRL_LEFT_EN_SET(x) (((uint32_t)(x) << DAO_CTRL_LEFT_EN_SHIFT) & DAO_CTRL_LEFT_EN_MASK)
  54. #define DAO_CTRL_LEFT_EN_GET(x) (((uint32_t)(x) & DAO_CTRL_LEFT_EN_MASK) >> DAO_CTRL_LEFT_EN_SHIFT)
  55. /*
  56. * REMAP (RW)
  57. *
  58. * 1: Use remap pwm version. The remap version is a version that one pwm output is tied to zero when the input pcm signal is positive or negative
  59. * 0: Don't use remap pwm version
  60. */
  61. #define DAO_CTRL_REMAP_MASK (0x10U)
  62. #define DAO_CTRL_REMAP_SHIFT (4U)
  63. #define DAO_CTRL_REMAP_SET(x) (((uint32_t)(x) << DAO_CTRL_REMAP_SHIFT) & DAO_CTRL_REMAP_MASK)
  64. #define DAO_CTRL_REMAP_GET(x) (((uint32_t)(x) & DAO_CTRL_REMAP_MASK) >> DAO_CTRL_REMAP_SHIFT)
  65. /*
  66. * INVERT (RW)
  67. *
  68. * all the outputs are inverted before sending to pad
  69. */
  70. #define DAO_CTRL_INVERT_MASK (0x8U)
  71. #define DAO_CTRL_INVERT_SHIFT (3U)
  72. #define DAO_CTRL_INVERT_SET(x) (((uint32_t)(x) << DAO_CTRL_INVERT_SHIFT) & DAO_CTRL_INVERT_MASK)
  73. #define DAO_CTRL_INVERT_GET(x) (((uint32_t)(x) & DAO_CTRL_INVERT_MASK) >> DAO_CTRL_INVERT_SHIFT)
  74. /*
  75. * FALSE_LEVEL (RW)
  76. *
  77. * the pad output in False run mode, or when the module is disabled
  78. * 0: all low
  79. * 1: all high
  80. * 2: P-high, N-low
  81. * 3. output is not enabled
  82. */
  83. #define DAO_CTRL_FALSE_LEVEL_MASK (0x6U)
  84. #define DAO_CTRL_FALSE_LEVEL_SHIFT (1U)
  85. #define DAO_CTRL_FALSE_LEVEL_SET(x) (((uint32_t)(x) << DAO_CTRL_FALSE_LEVEL_SHIFT) & DAO_CTRL_FALSE_LEVEL_MASK)
  86. #define DAO_CTRL_FALSE_LEVEL_GET(x) (((uint32_t)(x) & DAO_CTRL_FALSE_LEVEL_MASK) >> DAO_CTRL_FALSE_LEVEL_SHIFT)
  87. /*
  88. * FALSE_RUN (RW)
  89. *
  90. * the module continues to comsume data, but all the pads are constant, thus no audio out
  91. */
  92. #define DAO_CTRL_FALSE_RUN_MASK (0x1U)
  93. #define DAO_CTRL_FALSE_RUN_SHIFT (0U)
  94. #define DAO_CTRL_FALSE_RUN_SET(x) (((uint32_t)(x) << DAO_CTRL_FALSE_RUN_SHIFT) & DAO_CTRL_FALSE_RUN_MASK)
  95. #define DAO_CTRL_FALSE_RUN_GET(x) (((uint32_t)(x) & DAO_CTRL_FALSE_RUN_MASK) >> DAO_CTRL_FALSE_RUN_SHIFT)
  96. /* Bitfield definition for register: CMD */
  97. /*
  98. * SFTRST (RW)
  99. *
  100. * Self-clear
  101. */
  102. #define DAO_CMD_SFTRST_MASK (0x2U)
  103. #define DAO_CMD_SFTRST_SHIFT (1U)
  104. #define DAO_CMD_SFTRST_SET(x) (((uint32_t)(x) << DAO_CMD_SFTRST_SHIFT) & DAO_CMD_SFTRST_MASK)
  105. #define DAO_CMD_SFTRST_GET(x) (((uint32_t)(x) & DAO_CMD_SFTRST_MASK) >> DAO_CMD_SFTRST_SHIFT)
  106. /*
  107. * RUN (RW)
  108. *
  109. * Enable this module to run.
  110. */
  111. #define DAO_CMD_RUN_MASK (0x1U)
  112. #define DAO_CMD_RUN_SHIFT (0U)
  113. #define DAO_CMD_RUN_SET(x) (((uint32_t)(x) << DAO_CMD_RUN_SHIFT) & DAO_CMD_RUN_MASK)
  114. #define DAO_CMD_RUN_GET(x) (((uint32_t)(x) & DAO_CMD_RUN_MASK) >> DAO_CMD_RUN_SHIFT)
  115. /* Bitfield definition for register: RX_CFGR */
  116. /*
  117. * CH_MAX (RW)
  118. *
  119. * CH_MAX[3:0] is the number if channels supported in TDM mode. When not in TDM mode, it must be set as 2.
  120. * It must be an even number, so CH_MAX[0] is always 0.
  121. * 4'h2: 2 channels
  122. * 4'h4: 4 channels
  123. * etc
  124. */
  125. #define DAO_RX_CFGR_CH_MAX_MASK (0x7C0U)
  126. #define DAO_RX_CFGR_CH_MAX_SHIFT (6U)
  127. #define DAO_RX_CFGR_CH_MAX_SET(x) (((uint32_t)(x) << DAO_RX_CFGR_CH_MAX_SHIFT) & DAO_RX_CFGR_CH_MAX_MASK)
  128. #define DAO_RX_CFGR_CH_MAX_GET(x) (((uint32_t)(x) & DAO_RX_CFGR_CH_MAX_MASK) >> DAO_RX_CFGR_CH_MAX_SHIFT)
  129. /* Bitfield definition for register: RXSLT */
  130. /*
  131. * EN (RW)
  132. *
  133. * Slot enable for the channels.
  134. */
  135. #define DAO_RXSLT_EN_MASK (0xFFFFFFFFUL)
  136. #define DAO_RXSLT_EN_SHIFT (0U)
  137. #define DAO_RXSLT_EN_SET(x) (((uint32_t)(x) << DAO_RXSLT_EN_SHIFT) & DAO_RXSLT_EN_MASK)
  138. #define DAO_RXSLT_EN_GET(x) (((uint32_t)(x) & DAO_RXSLT_EN_MASK) >> DAO_RXSLT_EN_SHIFT)
  139. /* Bitfield definition for register: HPF_MA */
  140. /*
  141. * COEF (RW)
  142. *
  143. * Composite value of coef A of the Order-1 HPF
  144. */
  145. #define DAO_HPF_MA_COEF_MASK (0xFFFFFFFFUL)
  146. #define DAO_HPF_MA_COEF_SHIFT (0U)
  147. #define DAO_HPF_MA_COEF_SET(x) (((uint32_t)(x) << DAO_HPF_MA_COEF_SHIFT) & DAO_HPF_MA_COEF_MASK)
  148. #define DAO_HPF_MA_COEF_GET(x) (((uint32_t)(x) & DAO_HPF_MA_COEF_MASK) >> DAO_HPF_MA_COEF_SHIFT)
  149. /* Bitfield definition for register: HPF_B */
  150. /*
  151. * COEF (RW)
  152. *
  153. * coef B of the Order-1 HPF
  154. */
  155. #define DAO_HPF_B_COEF_MASK (0xFFFFFFFFUL)
  156. #define DAO_HPF_B_COEF_SHIFT (0U)
  157. #define DAO_HPF_B_COEF_SET(x) (((uint32_t)(x) << DAO_HPF_B_COEF_SHIFT) & DAO_HPF_B_COEF_MASK)
  158. #define DAO_HPF_B_COEF_GET(x) (((uint32_t)(x) & DAO_HPF_B_COEF_MASK) >> DAO_HPF_B_COEF_SHIFT)
  159. #endif /* HPM_DAO_H */