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