1 /**
2  * Copyright (c) 2021 Raspberry Pi (Trading) Ltd.
3  *
4  * SPDX-License-Identifier: BSD-3-Clause
5  */
6 // =============================================================================
7 // Register block : ADC
8 // Version        : 2
9 // Bus type       : apb
10 // Description    : Control and data interface to SAR ADC
11 // =============================================================================
12 #ifndef HARDWARE_REGS_ADC_DEFINED
13 #define HARDWARE_REGS_ADC_DEFINED
14 // =============================================================================
15 // Register    : ADC_CS
16 // Description : ADC Control and Status
17 #define ADC_CS_OFFSET _u(0x00000000)
18 #define ADC_CS_BITS   _u(0x001f770f)
19 #define ADC_CS_RESET  _u(0x00000000)
20 // -----------------------------------------------------------------------------
21 // Field       : ADC_CS_RROBIN
22 // Description : Round-robin sampling. 1 bit per channel. Set all bits to 0 to
23 //               disable.
24 //               Otherwise, the ADC will cycle through each enabled channel in a
25 //               round-robin fashion.
26 //               The first channel to be sampled will be the one currently
27 //               indicated by AINSEL.
28 //               AINSEL will be updated after each conversion with the
29 //               newly-selected channel.
30 #define ADC_CS_RROBIN_RESET  _u(0x00)
31 #define ADC_CS_RROBIN_BITS   _u(0x001f0000)
32 #define ADC_CS_RROBIN_MSB    _u(20)
33 #define ADC_CS_RROBIN_LSB    _u(16)
34 #define ADC_CS_RROBIN_ACCESS "RW"
35 // -----------------------------------------------------------------------------
36 // Field       : ADC_CS_AINSEL
37 // Description : Select analog mux input. Updated automatically in round-robin
38 //               mode.
39 #define ADC_CS_AINSEL_RESET  _u(0x0)
40 #define ADC_CS_AINSEL_BITS   _u(0x00007000)
41 #define ADC_CS_AINSEL_MSB    _u(14)
42 #define ADC_CS_AINSEL_LSB    _u(12)
43 #define ADC_CS_AINSEL_ACCESS "RW"
44 // -----------------------------------------------------------------------------
45 // Field       : ADC_CS_ERR_STICKY
46 // Description : Some past ADC conversion encountered an error. Write 1 to
47 //               clear.
48 #define ADC_CS_ERR_STICKY_RESET  _u(0x0)
49 #define ADC_CS_ERR_STICKY_BITS   _u(0x00000400)
50 #define ADC_CS_ERR_STICKY_MSB    _u(10)
51 #define ADC_CS_ERR_STICKY_LSB    _u(10)
52 #define ADC_CS_ERR_STICKY_ACCESS "WC"
53 // -----------------------------------------------------------------------------
54 // Field       : ADC_CS_ERR
55 // Description : The most recent ADC conversion encountered an error; result is
56 //               undefined or noisy.
57 #define ADC_CS_ERR_RESET  _u(0x0)
58 #define ADC_CS_ERR_BITS   _u(0x00000200)
59 #define ADC_CS_ERR_MSB    _u(9)
60 #define ADC_CS_ERR_LSB    _u(9)
61 #define ADC_CS_ERR_ACCESS "RO"
62 // -----------------------------------------------------------------------------
63 // Field       : ADC_CS_READY
64 // Description : 1 if the ADC is ready to start a new conversion. Implies any
65 //               previous conversion has completed.
66 //               0 whilst conversion in progress.
67 #define ADC_CS_READY_RESET  _u(0x0)
68 #define ADC_CS_READY_BITS   _u(0x00000100)
69 #define ADC_CS_READY_MSB    _u(8)
70 #define ADC_CS_READY_LSB    _u(8)
71 #define ADC_CS_READY_ACCESS "RO"
72 // -----------------------------------------------------------------------------
73 // Field       : ADC_CS_START_MANY
74 // Description : Continuously perform conversions whilst this bit is 1. A new
75 //               conversion will start immediately after the previous finishes.
76 #define ADC_CS_START_MANY_RESET  _u(0x0)
77 #define ADC_CS_START_MANY_BITS   _u(0x00000008)
78 #define ADC_CS_START_MANY_MSB    _u(3)
79 #define ADC_CS_START_MANY_LSB    _u(3)
80 #define ADC_CS_START_MANY_ACCESS "RW"
81 // -----------------------------------------------------------------------------
82 // Field       : ADC_CS_START_ONCE
83 // Description : Start a single conversion. Self-clearing. Ignored if start_many
84 //               is asserted.
85 #define ADC_CS_START_ONCE_RESET  _u(0x0)
86 #define ADC_CS_START_ONCE_BITS   _u(0x00000004)
87 #define ADC_CS_START_ONCE_MSB    _u(2)
88 #define ADC_CS_START_ONCE_LSB    _u(2)
89 #define ADC_CS_START_ONCE_ACCESS "SC"
90 // -----------------------------------------------------------------------------
91 // Field       : ADC_CS_TS_EN
92 // Description : Power on temperature sensor. 1 - enabled. 0 - disabled.
93 #define ADC_CS_TS_EN_RESET  _u(0x0)
94 #define ADC_CS_TS_EN_BITS   _u(0x00000002)
95 #define ADC_CS_TS_EN_MSB    _u(1)
96 #define ADC_CS_TS_EN_LSB    _u(1)
97 #define ADC_CS_TS_EN_ACCESS "RW"
98 // -----------------------------------------------------------------------------
99 // Field       : ADC_CS_EN
100 // Description : Power on ADC and enable its clock.
101 //               1 - enabled. 0 - disabled.
102 #define ADC_CS_EN_RESET  _u(0x0)
103 #define ADC_CS_EN_BITS   _u(0x00000001)
104 #define ADC_CS_EN_MSB    _u(0)
105 #define ADC_CS_EN_LSB    _u(0)
106 #define ADC_CS_EN_ACCESS "RW"
107 // =============================================================================
108 // Register    : ADC_RESULT
109 // Description : Result of most recent ADC conversion
110 #define ADC_RESULT_OFFSET _u(0x00000004)
111 #define ADC_RESULT_BITS   _u(0x00000fff)
112 #define ADC_RESULT_RESET  _u(0x00000000)
113 #define ADC_RESULT_MSB    _u(11)
114 #define ADC_RESULT_LSB    _u(0)
115 #define ADC_RESULT_ACCESS "RO"
116 // =============================================================================
117 // Register    : ADC_FCS
118 // Description : FIFO control and status
119 #define ADC_FCS_OFFSET _u(0x00000008)
120 #define ADC_FCS_BITS   _u(0x0f0f0f0f)
121 #define ADC_FCS_RESET  _u(0x00000000)
122 // -----------------------------------------------------------------------------
123 // Field       : ADC_FCS_THRESH
124 // Description : DREQ/IRQ asserted when level >= threshold
125 #define ADC_FCS_THRESH_RESET  _u(0x0)
126 #define ADC_FCS_THRESH_BITS   _u(0x0f000000)
127 #define ADC_FCS_THRESH_MSB    _u(27)
128 #define ADC_FCS_THRESH_LSB    _u(24)
129 #define ADC_FCS_THRESH_ACCESS "RW"
130 // -----------------------------------------------------------------------------
131 // Field       : ADC_FCS_LEVEL
132 // Description : The number of conversion results currently waiting in the FIFO
133 #define ADC_FCS_LEVEL_RESET  _u(0x0)
134 #define ADC_FCS_LEVEL_BITS   _u(0x000f0000)
135 #define ADC_FCS_LEVEL_MSB    _u(19)
136 #define ADC_FCS_LEVEL_LSB    _u(16)
137 #define ADC_FCS_LEVEL_ACCESS "RO"
138 // -----------------------------------------------------------------------------
139 // Field       : ADC_FCS_OVER
140 // Description : 1 if the FIFO has been overflowed. Write 1 to clear.
141 #define ADC_FCS_OVER_RESET  _u(0x0)
142 #define ADC_FCS_OVER_BITS   _u(0x00000800)
143 #define ADC_FCS_OVER_MSB    _u(11)
144 #define ADC_FCS_OVER_LSB    _u(11)
145 #define ADC_FCS_OVER_ACCESS "WC"
146 // -----------------------------------------------------------------------------
147 // Field       : ADC_FCS_UNDER
148 // Description : 1 if the FIFO has been underflowed. Write 1 to clear.
149 #define ADC_FCS_UNDER_RESET  _u(0x0)
150 #define ADC_FCS_UNDER_BITS   _u(0x00000400)
151 #define ADC_FCS_UNDER_MSB    _u(10)
152 #define ADC_FCS_UNDER_LSB    _u(10)
153 #define ADC_FCS_UNDER_ACCESS "WC"
154 // -----------------------------------------------------------------------------
155 // Field       : ADC_FCS_FULL
156 // Description : None
157 #define ADC_FCS_FULL_RESET  _u(0x0)
158 #define ADC_FCS_FULL_BITS   _u(0x00000200)
159 #define ADC_FCS_FULL_MSB    _u(9)
160 #define ADC_FCS_FULL_LSB    _u(9)
161 #define ADC_FCS_FULL_ACCESS "RO"
162 // -----------------------------------------------------------------------------
163 // Field       : ADC_FCS_EMPTY
164 // Description : None
165 #define ADC_FCS_EMPTY_RESET  _u(0x0)
166 #define ADC_FCS_EMPTY_BITS   _u(0x00000100)
167 #define ADC_FCS_EMPTY_MSB    _u(8)
168 #define ADC_FCS_EMPTY_LSB    _u(8)
169 #define ADC_FCS_EMPTY_ACCESS "RO"
170 // -----------------------------------------------------------------------------
171 // Field       : ADC_FCS_DREQ_EN
172 // Description : If 1: assert DMA requests when FIFO contains data
173 #define ADC_FCS_DREQ_EN_RESET  _u(0x0)
174 #define ADC_FCS_DREQ_EN_BITS   _u(0x00000008)
175 #define ADC_FCS_DREQ_EN_MSB    _u(3)
176 #define ADC_FCS_DREQ_EN_LSB    _u(3)
177 #define ADC_FCS_DREQ_EN_ACCESS "RW"
178 // -----------------------------------------------------------------------------
179 // Field       : ADC_FCS_ERR
180 // Description : If 1: conversion error bit appears in the FIFO alongside the
181 //               result
182 #define ADC_FCS_ERR_RESET  _u(0x0)
183 #define ADC_FCS_ERR_BITS   _u(0x00000004)
184 #define ADC_FCS_ERR_MSB    _u(2)
185 #define ADC_FCS_ERR_LSB    _u(2)
186 #define ADC_FCS_ERR_ACCESS "RW"
187 // -----------------------------------------------------------------------------
188 // Field       : ADC_FCS_SHIFT
189 // Description : If 1: FIFO results are right-shifted to be one byte in size.
190 //               Enables DMA to byte buffers.
191 #define ADC_FCS_SHIFT_RESET  _u(0x0)
192 #define ADC_FCS_SHIFT_BITS   _u(0x00000002)
193 #define ADC_FCS_SHIFT_MSB    _u(1)
194 #define ADC_FCS_SHIFT_LSB    _u(1)
195 #define ADC_FCS_SHIFT_ACCESS "RW"
196 // -----------------------------------------------------------------------------
197 // Field       : ADC_FCS_EN
198 // Description : If 1: write result to the FIFO after each conversion.
199 #define ADC_FCS_EN_RESET  _u(0x0)
200 #define ADC_FCS_EN_BITS   _u(0x00000001)
201 #define ADC_FCS_EN_MSB    _u(0)
202 #define ADC_FCS_EN_LSB    _u(0)
203 #define ADC_FCS_EN_ACCESS "RW"
204 // =============================================================================
205 // Register    : ADC_FIFO
206 // Description : Conversion result FIFO
207 #define ADC_FIFO_OFFSET _u(0x0000000c)
208 #define ADC_FIFO_BITS   _u(0x00008fff)
209 #define ADC_FIFO_RESET  _u(0x00000000)
210 // -----------------------------------------------------------------------------
211 // Field       : ADC_FIFO_ERR
212 // Description : 1 if this particular sample experienced a conversion error.
213 //               Remains in the same location if the sample is shifted.
214 #define ADC_FIFO_ERR_RESET  "-"
215 #define ADC_FIFO_ERR_BITS   _u(0x00008000)
216 #define ADC_FIFO_ERR_MSB    _u(15)
217 #define ADC_FIFO_ERR_LSB    _u(15)
218 #define ADC_FIFO_ERR_ACCESS "RF"
219 // -----------------------------------------------------------------------------
220 // Field       : ADC_FIFO_VAL
221 // Description : None
222 #define ADC_FIFO_VAL_RESET  "-"
223 #define ADC_FIFO_VAL_BITS   _u(0x00000fff)
224 #define ADC_FIFO_VAL_MSB    _u(11)
225 #define ADC_FIFO_VAL_LSB    _u(0)
226 #define ADC_FIFO_VAL_ACCESS "RF"
227 // =============================================================================
228 // Register    : ADC_DIV
229 // Description : Clock divider. If non-zero, CS_START_MANY will start
230 //               conversions
231 //               at regular intervals rather than back-to-back.
232 //               The divider is reset when either of these fields are written.
233 //               Total period is 1 + INT + FRAC / 256
234 #define ADC_DIV_OFFSET _u(0x00000010)
235 #define ADC_DIV_BITS   _u(0x00ffffff)
236 #define ADC_DIV_RESET  _u(0x00000000)
237 // -----------------------------------------------------------------------------
238 // Field       : ADC_DIV_INT
239 // Description : Integer part of clock divisor.
240 #define ADC_DIV_INT_RESET  _u(0x0000)
241 #define ADC_DIV_INT_BITS   _u(0x00ffff00)
242 #define ADC_DIV_INT_MSB    _u(23)
243 #define ADC_DIV_INT_LSB    _u(8)
244 #define ADC_DIV_INT_ACCESS "RW"
245 // -----------------------------------------------------------------------------
246 // Field       : ADC_DIV_FRAC
247 // Description : Fractional part of clock divisor. First-order delta-sigma.
248 #define ADC_DIV_FRAC_RESET  _u(0x00)
249 #define ADC_DIV_FRAC_BITS   _u(0x000000ff)
250 #define ADC_DIV_FRAC_MSB    _u(7)
251 #define ADC_DIV_FRAC_LSB    _u(0)
252 #define ADC_DIV_FRAC_ACCESS "RW"
253 // =============================================================================
254 // Register    : ADC_INTR
255 // Description : Raw Interrupts
256 #define ADC_INTR_OFFSET _u(0x00000014)
257 #define ADC_INTR_BITS   _u(0x00000001)
258 #define ADC_INTR_RESET  _u(0x00000000)
259 // -----------------------------------------------------------------------------
260 // Field       : ADC_INTR_FIFO
261 // Description : Triggered when the sample FIFO reaches a certain level.
262 //               This level can be programmed via the FCS_THRESH field.
263 #define ADC_INTR_FIFO_RESET  _u(0x0)
264 #define ADC_INTR_FIFO_BITS   _u(0x00000001)
265 #define ADC_INTR_FIFO_MSB    _u(0)
266 #define ADC_INTR_FIFO_LSB    _u(0)
267 #define ADC_INTR_FIFO_ACCESS "RO"
268 // =============================================================================
269 // Register    : ADC_INTE
270 // Description : Interrupt Enable
271 #define ADC_INTE_OFFSET _u(0x00000018)
272 #define ADC_INTE_BITS   _u(0x00000001)
273 #define ADC_INTE_RESET  _u(0x00000000)
274 // -----------------------------------------------------------------------------
275 // Field       : ADC_INTE_FIFO
276 // Description : Triggered when the sample FIFO reaches a certain level.
277 //               This level can be programmed via the FCS_THRESH field.
278 #define ADC_INTE_FIFO_RESET  _u(0x0)
279 #define ADC_INTE_FIFO_BITS   _u(0x00000001)
280 #define ADC_INTE_FIFO_MSB    _u(0)
281 #define ADC_INTE_FIFO_LSB    _u(0)
282 #define ADC_INTE_FIFO_ACCESS "RW"
283 // =============================================================================
284 // Register    : ADC_INTF
285 // Description : Interrupt Force
286 #define ADC_INTF_OFFSET _u(0x0000001c)
287 #define ADC_INTF_BITS   _u(0x00000001)
288 #define ADC_INTF_RESET  _u(0x00000000)
289 // -----------------------------------------------------------------------------
290 // Field       : ADC_INTF_FIFO
291 // Description : Triggered when the sample FIFO reaches a certain level.
292 //               This level can be programmed via the FCS_THRESH field.
293 #define ADC_INTF_FIFO_RESET  _u(0x0)
294 #define ADC_INTF_FIFO_BITS   _u(0x00000001)
295 #define ADC_INTF_FIFO_MSB    _u(0)
296 #define ADC_INTF_FIFO_LSB    _u(0)
297 #define ADC_INTF_FIFO_ACCESS "RW"
298 // =============================================================================
299 // Register    : ADC_INTS
300 // Description : Interrupt status after masking & forcing
301 #define ADC_INTS_OFFSET _u(0x00000020)
302 #define ADC_INTS_BITS   _u(0x00000001)
303 #define ADC_INTS_RESET  _u(0x00000000)
304 // -----------------------------------------------------------------------------
305 // Field       : ADC_INTS_FIFO
306 // Description : Triggered when the sample FIFO reaches a certain level.
307 //               This level can be programmed via the FCS_THRESH field.
308 #define ADC_INTS_FIFO_RESET  _u(0x0)
309 #define ADC_INTS_FIFO_BITS   _u(0x00000001)
310 #define ADC_INTS_FIFO_MSB    _u(0)
311 #define ADC_INTS_FIFO_LSB    _u(0)
312 #define ADC_INTS_FIFO_ACCESS "RO"
313 // =============================================================================
314 #endif // HARDWARE_REGS_ADC_DEFINED
315