hpm_acmp_regs.h 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264
  1. /*
  2. * Copyright (c) 2021-2023 HPMicro
  3. *
  4. * SPDX-License-Identifier: BSD-3-Clause
  5. *
  6. */
  7. #ifndef HPM_ACMP_H
  8. #define HPM_ACMP_H
  9. typedef struct {
  10. struct {
  11. __RW uint32_t CFG; /* 0x0: Configure Register */
  12. __RW uint32_t DACCFG; /* 0x4: DAC configure register */
  13. __R uint8_t RESERVED0[8]; /* 0x8 - 0xF: Reserved */
  14. __RW uint32_t SR; /* 0x10: Status register */
  15. __RW uint32_t IRQEN; /* 0x14: Interrupt request enable register */
  16. __RW uint32_t DMAEN; /* 0x18: DMA request enable register */
  17. __R uint8_t RESERVED1[4]; /* 0x1C - 0x1F: Reserved */
  18. } CHANNEL[4];
  19. } ACMP_Type;
  20. /* Bitfield definition for register of struct array CHANNEL: CFG */
  21. /*
  22. * HYST (RW)
  23. *
  24. * This bitfield configure the comparator hysteresis.
  25. * 00: Hysteresis level 0
  26. * 01: Hysteresis level 1
  27. * 10: Hysteresis level 2
  28. * 11: Hysteresis level 3
  29. */
  30. #define ACMP_CHANNEL_CFG_HYST_MASK (0xC0000000UL)
  31. #define ACMP_CHANNEL_CFG_HYST_SHIFT (30U)
  32. #define ACMP_CHANNEL_CFG_HYST_SET(x) (((uint32_t)(x) << ACMP_CHANNEL_CFG_HYST_SHIFT) & ACMP_CHANNEL_CFG_HYST_MASK)
  33. #define ACMP_CHANNEL_CFG_HYST_GET(x) (((uint32_t)(x) & ACMP_CHANNEL_CFG_HYST_MASK) >> ACMP_CHANNEL_CFG_HYST_SHIFT)
  34. /*
  35. * DACEN (RW)
  36. *
  37. * This bit enable the comparator internal DAC
  38. * 0: DAC disabled
  39. * 1: DAC enabled
  40. */
  41. #define ACMP_CHANNEL_CFG_DACEN_MASK (0x20000000UL)
  42. #define ACMP_CHANNEL_CFG_DACEN_SHIFT (29U)
  43. #define ACMP_CHANNEL_CFG_DACEN_SET(x) (((uint32_t)(x) << ACMP_CHANNEL_CFG_DACEN_SHIFT) & ACMP_CHANNEL_CFG_DACEN_MASK)
  44. #define ACMP_CHANNEL_CFG_DACEN_GET(x) (((uint32_t)(x) & ACMP_CHANNEL_CFG_DACEN_MASK) >> ACMP_CHANNEL_CFG_DACEN_SHIFT)
  45. /*
  46. * HPMODE (RW)
  47. *
  48. * This bit enable the comparator high performance mode.
  49. * 0: HP mode disabled
  50. * 1: HP mode enabled
  51. */
  52. #define ACMP_CHANNEL_CFG_HPMODE_MASK (0x10000000UL)
  53. #define ACMP_CHANNEL_CFG_HPMODE_SHIFT (28U)
  54. #define ACMP_CHANNEL_CFG_HPMODE_SET(x) (((uint32_t)(x) << ACMP_CHANNEL_CFG_HPMODE_SHIFT) & ACMP_CHANNEL_CFG_HPMODE_MASK)
  55. #define ACMP_CHANNEL_CFG_HPMODE_GET(x) (((uint32_t)(x) & ACMP_CHANNEL_CFG_HPMODE_MASK) >> ACMP_CHANNEL_CFG_HPMODE_SHIFT)
  56. /*
  57. * CMPEN (RW)
  58. *
  59. * This bit enable the comparator.
  60. * 0: ACMP disabled
  61. * 1: ACMP enabled
  62. */
  63. #define ACMP_CHANNEL_CFG_CMPEN_MASK (0x8000000UL)
  64. #define ACMP_CHANNEL_CFG_CMPEN_SHIFT (27U)
  65. #define ACMP_CHANNEL_CFG_CMPEN_SET(x) (((uint32_t)(x) << ACMP_CHANNEL_CFG_CMPEN_SHIFT) & ACMP_CHANNEL_CFG_CMPEN_MASK)
  66. #define ACMP_CHANNEL_CFG_CMPEN_GET(x) (((uint32_t)(x) & ACMP_CHANNEL_CFG_CMPEN_MASK) >> ACMP_CHANNEL_CFG_CMPEN_SHIFT)
  67. /*
  68. * MINSEL (RW)
  69. *
  70. * PIN select, from pad_ai_acmp[7:1] and dac_out
  71. */
  72. #define ACMP_CHANNEL_CFG_MINSEL_MASK (0x7000000UL)
  73. #define ACMP_CHANNEL_CFG_MINSEL_SHIFT (24U)
  74. #define ACMP_CHANNEL_CFG_MINSEL_SET(x) (((uint32_t)(x) << ACMP_CHANNEL_CFG_MINSEL_SHIFT) & ACMP_CHANNEL_CFG_MINSEL_MASK)
  75. #define ACMP_CHANNEL_CFG_MINSEL_GET(x) (((uint32_t)(x) & ACMP_CHANNEL_CFG_MINSEL_MASK) >> ACMP_CHANNEL_CFG_MINSEL_SHIFT)
  76. /*
  77. * PINSEL (RW)
  78. *
  79. * MIN select, from pad_ai_acmp[7:1] and dac_out
  80. */
  81. #define ACMP_CHANNEL_CFG_PINSEL_MASK (0x700000UL)
  82. #define ACMP_CHANNEL_CFG_PINSEL_SHIFT (20U)
  83. #define ACMP_CHANNEL_CFG_PINSEL_SET(x) (((uint32_t)(x) << ACMP_CHANNEL_CFG_PINSEL_SHIFT) & ACMP_CHANNEL_CFG_PINSEL_MASK)
  84. #define ACMP_CHANNEL_CFG_PINSEL_GET(x) (((uint32_t)(x) & ACMP_CHANNEL_CFG_PINSEL_MASK) >> ACMP_CHANNEL_CFG_PINSEL_SHIFT)
  85. /*
  86. * CMPOEN (RW)
  87. *
  88. * This bit enable the comparator output on pad.
  89. * 0: ACMP output disabled
  90. * 1: ACMP output enabled
  91. */
  92. #define ACMP_CHANNEL_CFG_CMPOEN_MASK (0x80000UL)
  93. #define ACMP_CHANNEL_CFG_CMPOEN_SHIFT (19U)
  94. #define ACMP_CHANNEL_CFG_CMPOEN_SET(x) (((uint32_t)(x) << ACMP_CHANNEL_CFG_CMPOEN_SHIFT) & ACMP_CHANNEL_CFG_CMPOEN_MASK)
  95. #define ACMP_CHANNEL_CFG_CMPOEN_GET(x) (((uint32_t)(x) & ACMP_CHANNEL_CFG_CMPOEN_MASK) >> ACMP_CHANNEL_CFG_CMPOEN_SHIFT)
  96. /*
  97. * FLTBYPS (RW)
  98. *
  99. * This bit bypass the comparator output digital filter.
  100. * 0: The ACMP output need pass digital filter
  101. * 1: The ACMP output digital filter is bypassed.
  102. */
  103. #define ACMP_CHANNEL_CFG_FLTBYPS_MASK (0x40000UL)
  104. #define ACMP_CHANNEL_CFG_FLTBYPS_SHIFT (18U)
  105. #define ACMP_CHANNEL_CFG_FLTBYPS_SET(x) (((uint32_t)(x) << ACMP_CHANNEL_CFG_FLTBYPS_SHIFT) & ACMP_CHANNEL_CFG_FLTBYPS_MASK)
  106. #define ACMP_CHANNEL_CFG_FLTBYPS_GET(x) (((uint32_t)(x) & ACMP_CHANNEL_CFG_FLTBYPS_MASK) >> ACMP_CHANNEL_CFG_FLTBYPS_SHIFT)
  107. /*
  108. * WINEN (RW)
  109. *
  110. * This bit enable the comparator window mode.
  111. * 0: Window mode is disabled
  112. * 1: Window mode is enabled
  113. */
  114. #define ACMP_CHANNEL_CFG_WINEN_MASK (0x20000UL)
  115. #define ACMP_CHANNEL_CFG_WINEN_SHIFT (17U)
  116. #define ACMP_CHANNEL_CFG_WINEN_SET(x) (((uint32_t)(x) << ACMP_CHANNEL_CFG_WINEN_SHIFT) & ACMP_CHANNEL_CFG_WINEN_MASK)
  117. #define ACMP_CHANNEL_CFG_WINEN_GET(x) (((uint32_t)(x) & ACMP_CHANNEL_CFG_WINEN_MASK) >> ACMP_CHANNEL_CFG_WINEN_SHIFT)
  118. /*
  119. * OPOL (RW)
  120. *
  121. * The output polarity control bit.
  122. * 0: The ACMP output remain un-changed.
  123. * 1: The ACMP output is inverted.
  124. */
  125. #define ACMP_CHANNEL_CFG_OPOL_MASK (0x10000UL)
  126. #define ACMP_CHANNEL_CFG_OPOL_SHIFT (16U)
  127. #define ACMP_CHANNEL_CFG_OPOL_SET(x) (((uint32_t)(x) << ACMP_CHANNEL_CFG_OPOL_SHIFT) & ACMP_CHANNEL_CFG_OPOL_MASK)
  128. #define ACMP_CHANNEL_CFG_OPOL_GET(x) (((uint32_t)(x) & ACMP_CHANNEL_CFG_OPOL_MASK) >> ACMP_CHANNEL_CFG_OPOL_SHIFT)
  129. /*
  130. * FLTMODE (RW)
  131. *
  132. * This bitfield define the ACMP output digital filter mode:
  133. * 000-bypass
  134. * 100-change immediately;
  135. * 101-change after filter;
  136. * 110-stalbe low;
  137. * 111-stable high
  138. */
  139. #define ACMP_CHANNEL_CFG_FLTMODE_MASK (0xE000U)
  140. #define ACMP_CHANNEL_CFG_FLTMODE_SHIFT (13U)
  141. #define ACMP_CHANNEL_CFG_FLTMODE_SET(x) (((uint32_t)(x) << ACMP_CHANNEL_CFG_FLTMODE_SHIFT) & ACMP_CHANNEL_CFG_FLTMODE_MASK)
  142. #define ACMP_CHANNEL_CFG_FLTMODE_GET(x) (((uint32_t)(x) & ACMP_CHANNEL_CFG_FLTMODE_MASK) >> ACMP_CHANNEL_CFG_FLTMODE_SHIFT)
  143. /*
  144. * SYNCEN (RW)
  145. *
  146. * This bit enable the comparator output synchronization.
  147. * 0: ACMP output not synchronized with ACMP clock.
  148. * 1: ACMP output synchronized with ACMP clock.
  149. */
  150. #define ACMP_CHANNEL_CFG_SYNCEN_MASK (0x1000U)
  151. #define ACMP_CHANNEL_CFG_SYNCEN_SHIFT (12U)
  152. #define ACMP_CHANNEL_CFG_SYNCEN_SET(x) (((uint32_t)(x) << ACMP_CHANNEL_CFG_SYNCEN_SHIFT) & ACMP_CHANNEL_CFG_SYNCEN_MASK)
  153. #define ACMP_CHANNEL_CFG_SYNCEN_GET(x) (((uint32_t)(x) & ACMP_CHANNEL_CFG_SYNCEN_MASK) >> ACMP_CHANNEL_CFG_SYNCEN_SHIFT)
  154. /*
  155. * FLTLEN (RW)
  156. *
  157. * This bitfield define the ACMP output digital filter length. The unit is ACMP clock cycle.
  158. */
  159. #define ACMP_CHANNEL_CFG_FLTLEN_MASK (0xFFFU)
  160. #define ACMP_CHANNEL_CFG_FLTLEN_SHIFT (0U)
  161. #define ACMP_CHANNEL_CFG_FLTLEN_SET(x) (((uint32_t)(x) << ACMP_CHANNEL_CFG_FLTLEN_SHIFT) & ACMP_CHANNEL_CFG_FLTLEN_MASK)
  162. #define ACMP_CHANNEL_CFG_FLTLEN_GET(x) (((uint32_t)(x) & ACMP_CHANNEL_CFG_FLTLEN_MASK) >> ACMP_CHANNEL_CFG_FLTLEN_SHIFT)
  163. /* Bitfield definition for register of struct array CHANNEL: DACCFG */
  164. /*
  165. * DACCFG (RW)
  166. *
  167. * 8bit DAC digital value
  168. */
  169. #define ACMP_CHANNEL_DACCFG_DACCFG_MASK (0xFFU)
  170. #define ACMP_CHANNEL_DACCFG_DACCFG_SHIFT (0U)
  171. #define ACMP_CHANNEL_DACCFG_DACCFG_SET(x) (((uint32_t)(x) << ACMP_CHANNEL_DACCFG_DACCFG_SHIFT) & ACMP_CHANNEL_DACCFG_DACCFG_MASK)
  172. #define ACMP_CHANNEL_DACCFG_DACCFG_GET(x) (((uint32_t)(x) & ACMP_CHANNEL_DACCFG_DACCFG_MASK) >> ACMP_CHANNEL_DACCFG_DACCFG_SHIFT)
  173. /* Bitfield definition for register of struct array CHANNEL: SR */
  174. /*
  175. * FEDGF (RW)
  176. *
  177. * Output falling edge flag. Write 1 to clear this flag.
  178. */
  179. #define ACMP_CHANNEL_SR_FEDGF_MASK (0x2U)
  180. #define ACMP_CHANNEL_SR_FEDGF_SHIFT (1U)
  181. #define ACMP_CHANNEL_SR_FEDGF_SET(x) (((uint32_t)(x) << ACMP_CHANNEL_SR_FEDGF_SHIFT) & ACMP_CHANNEL_SR_FEDGF_MASK)
  182. #define ACMP_CHANNEL_SR_FEDGF_GET(x) (((uint32_t)(x) & ACMP_CHANNEL_SR_FEDGF_MASK) >> ACMP_CHANNEL_SR_FEDGF_SHIFT)
  183. /*
  184. * REDGF (RW)
  185. *
  186. * Output rising edge flag. Write 1 to clear this flag.
  187. */
  188. #define ACMP_CHANNEL_SR_REDGF_MASK (0x1U)
  189. #define ACMP_CHANNEL_SR_REDGF_SHIFT (0U)
  190. #define ACMP_CHANNEL_SR_REDGF_SET(x) (((uint32_t)(x) << ACMP_CHANNEL_SR_REDGF_SHIFT) & ACMP_CHANNEL_SR_REDGF_MASK)
  191. #define ACMP_CHANNEL_SR_REDGF_GET(x) (((uint32_t)(x) & ACMP_CHANNEL_SR_REDGF_MASK) >> ACMP_CHANNEL_SR_REDGF_SHIFT)
  192. /* Bitfield definition for register of struct array CHANNEL: IRQEN */
  193. /*
  194. * FEDGEN (RW)
  195. *
  196. * Output falling edge flag interrupt enable bit.
  197. */
  198. #define ACMP_CHANNEL_IRQEN_FEDGEN_MASK (0x2U)
  199. #define ACMP_CHANNEL_IRQEN_FEDGEN_SHIFT (1U)
  200. #define ACMP_CHANNEL_IRQEN_FEDGEN_SET(x) (((uint32_t)(x) << ACMP_CHANNEL_IRQEN_FEDGEN_SHIFT) & ACMP_CHANNEL_IRQEN_FEDGEN_MASK)
  201. #define ACMP_CHANNEL_IRQEN_FEDGEN_GET(x) (((uint32_t)(x) & ACMP_CHANNEL_IRQEN_FEDGEN_MASK) >> ACMP_CHANNEL_IRQEN_FEDGEN_SHIFT)
  202. /*
  203. * REDGEN (RW)
  204. *
  205. * Output rising edge flag interrupt enable bit.
  206. */
  207. #define ACMP_CHANNEL_IRQEN_REDGEN_MASK (0x1U)
  208. #define ACMP_CHANNEL_IRQEN_REDGEN_SHIFT (0U)
  209. #define ACMP_CHANNEL_IRQEN_REDGEN_SET(x) (((uint32_t)(x) << ACMP_CHANNEL_IRQEN_REDGEN_SHIFT) & ACMP_CHANNEL_IRQEN_REDGEN_MASK)
  210. #define ACMP_CHANNEL_IRQEN_REDGEN_GET(x) (((uint32_t)(x) & ACMP_CHANNEL_IRQEN_REDGEN_MASK) >> ACMP_CHANNEL_IRQEN_REDGEN_SHIFT)
  211. /* Bitfield definition for register of struct array CHANNEL: DMAEN */
  212. /*
  213. * FEDGEN (RW)
  214. *
  215. * Output falling edge flag DMA request enable bit.
  216. */
  217. #define ACMP_CHANNEL_DMAEN_FEDGEN_MASK (0x2U)
  218. #define ACMP_CHANNEL_DMAEN_FEDGEN_SHIFT (1U)
  219. #define ACMP_CHANNEL_DMAEN_FEDGEN_SET(x) (((uint32_t)(x) << ACMP_CHANNEL_DMAEN_FEDGEN_SHIFT) & ACMP_CHANNEL_DMAEN_FEDGEN_MASK)
  220. #define ACMP_CHANNEL_DMAEN_FEDGEN_GET(x) (((uint32_t)(x) & ACMP_CHANNEL_DMAEN_FEDGEN_MASK) >> ACMP_CHANNEL_DMAEN_FEDGEN_SHIFT)
  221. /*
  222. * REDGEN (RW)
  223. *
  224. * Output rising edge flag DMA request enable bit.
  225. */
  226. #define ACMP_CHANNEL_DMAEN_REDGEN_MASK (0x1U)
  227. #define ACMP_CHANNEL_DMAEN_REDGEN_SHIFT (0U)
  228. #define ACMP_CHANNEL_DMAEN_REDGEN_SET(x) (((uint32_t)(x) << ACMP_CHANNEL_DMAEN_REDGEN_SHIFT) & ACMP_CHANNEL_DMAEN_REDGEN_MASK)
  229. #define ACMP_CHANNEL_DMAEN_REDGEN_GET(x) (((uint32_t)(x) & ACMP_CHANNEL_DMAEN_REDGEN_MASK) >> ACMP_CHANNEL_DMAEN_REDGEN_SHIFT)
  230. /* CHANNEL register group index macro definition */
  231. #define ACMP_CHANNEL_CHN0 (0UL)
  232. #define ACMP_CHANNEL_CHN1 (1UL)
  233. #define ACMP_CHANNEL_CHN2 (2UL)
  234. #define ACMP_CHANNEL_CHN3 (3UL)
  235. #endif /* HPM_ACMP_H */