summaryrefslogtreecommitdiff
path: root/nuttx/arch/arm/src/stm32/stm32_adc.h
blob: a9860bebc5e6cf127cf8dac619d11720aeac71e0 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
/************************************************************************************
 * arch/arm/src/stm32/stm32_adc.h
 *
 *   Copyright (C) 2009 Gregory Nutt. All rights reserved.
 *   Author: Gregory Nutt <spudmonkey@racsa.co.cr>
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in
 *    the documentation and/or other materials provided with the
 *    distribution.
 * 3. Neither the name NuttX nor the names of its contributors may be
 *    used to endorse or promote products derived from this software
 *    without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
 * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 ************************************************************************************/

#ifndef __ARCH_ARM_SRC_STM32_STM32_ADC_H
#define __ARCH_ARM_SRC_STM32_STM32_ADC_H

/************************************************************************************
 * Included Files
 ************************************************************************************/

#include <nuttx/config.h>
#include <sys/types.h>
#include "chip.h"

/************************************************************************************
 * Definitions
 ************************************************************************************/

/* Register Offsets *****************************************************************/

#define STM32_ADC_SR_OFFSET      0x0000  /* ADC status register (32-bit) */
#define STM32_ADC_CR1_OFFSET     0x0004  /* ADC control register 1 (32-bit) */
#define STM32_ADC_CR2_OFFSET     0x0008  /* ADC control register 2 (32-bit) */
#define STM32_ADC_SMPR1_OFFSET   0x000c  /* ADC sample time register 1 (32-bit) */
#define STM32_ADC_SMPR2_OFFSET   0x0010  /* ADC sample time register 2 (32-bit) */
#define STM32_ADC_JOFR1_OFFSET   0x0014  /* ADC injected channel data offset register 1 (32-bit) */
#define STM32_ADC_JOFR2_OFFSET   0x0018  /* ADC injected channel data offset register 2 (32-bit) */
#define STM32_ADC_JOFR3_OFFSET   0x001c  /* ADC injected channel data offset register 3 (32-bit) */
#define STM32_ADC_JOFR4_OFFSET   0x0020  /* ADC injected channel data offset register 4 (32-bit) */
#define STM32_ADC_HTR_OFFSET     0x0024  /* ADC watchdog high threshold register (32-bit) */
#define STM32_ADC_LTR_OFFSET     0x0028  /* ADC watchdog low threshold register (32-bit) */
#define STM32_ADC_SQR1_OFFSET    0x002c  /* ADC regular sequence register 1 (32-bit) */
#define STM32_ADC_SQR2_OFFSET    0x0030  /* ADC regular sequence register 2 (32-bit) */
#define STM32_ADC_SQR3_OFFSET    0x0034  /* ADC regular sequence register 3 (32-bit) */
#define STM32_ADC_JSQR_OFFSET    0x0038  /* ADC injected sequence register (32-bit) */
#define STM32_ADC_JDR1_OFFSET    0x003c  /* ADC injected data register 1 (32-bit) */
#define STM32_ADC_JDR2_OFFSET    0x0040  /* ADC injected data register 1 (32-bit) */
#define STM32_ADC_JDR3_OFFSET    0x0044  /* ADC injected data register 1 (32-bit) */
#define STM32_ADC_JDR4_OFFSET    0x0048  /* ADC injected data register 1 (32-bit) */
#define STM32_ADC_DR_OFFSET      0x004c  /* ADC regular data register (32-bit) */

/* Register Addresses ***************************************************************/

#if STM32_NADC > 0
#  define STM32_ADC1_SR          (STM32_ADC1_BASE+STM32_ADC_SR_OFFSET)
#  define STM32_ADC1_CR1         (STM32_ADC1_BASE+STM32_ADC_CR1_OFFSET)
#  define STM32_ADC1_CR2         (STM32_ADC1_BASE+STM32_ADC_CR2_OFFSET)
#  define STM32_ADC1_SMPR1       (STM32_ADC1_BASE+STM32_ADC_SMPR1_OFFSET)
#  define STM32_ADC1_SMPR2       (STM32_ADC1_BASE+STM32_ADC_SMPR2_OFFSET)
#  define STM32_ADC1_JOFR1       (STM32_ADC1_BASE+STM32_ADC_JOFR1_OFFSET)
#  define STM32_ADC1_JOFR2       (STM32_ADC1_BASE+STM32_ADC_JOFR2_OFFSET)
#  define STM32_ADC1_JOFR3       (STM32_ADC1_BASE+STM32_ADC_JOFR3_OFFSET)
#  define STM32_ADC1_JOFR4       (STM32_ADC1_BASE+STM32_ADC_JOFR4_OFFSET)
#  define STM32_ADC1_HTR         (STM32_ADC1_BASE+STM32_ADC_HTR_OFFSET)
#  define STM32_ADC1_LTR         (STM32_ADC1_BASE+STM32_ADC_LTR_OFFSET)
#  define STM32_ADC1_SQR1        (STM32_ADC1_BASE+STM32_ADC_SQR1_OFFSET)
#  define STM32_ADC1_SQR2        (STM32_ADC1_BASE+STM32_ADC_SQR2_OFFSET)
#  define STM32_ADC1_SQR3        (STM32_ADC1_BASE+STM32_ADC_SQR3_OFFSET)
#  define STM32_ADC1_JSQR        (STM32_ADC1_BASE+STM32_ADC_JSQR_OFFSET)
#  define STM32_ADC1_JDR1        (STM32_ADC1_BASE+STM32_ADC_JDR1_OFFSET)
#  define STM32_ADC1_JDR2        (STM32_ADC1_BASE+STM32_ADC_JDR2_OFFSET)
#  define STM32_ADC1_JDR3        (STM32_ADC1_BASE+STM32_ADC_JDR3_OFFSET)
#  define STM32_ADC1_JDR4        (STM32_ADC1_BASE+STM32_ADC_JDR4_OFFSET)
#  define STM32_ADC1_DR          (STM32_ADC1_BASE+STM32_ADC_DR_OFFSET)
#endif

#if STM32_NADC > 1
#  define STM32_ADC2_SR          (STM32_ADC2_BASE+STM32_ADC_SR_OFFSET)
#  define STM32_ADC2_CR1         (STM32_ADC2_BASE+STM32_ADC_CR1_OFFSET)
#  define STM32_ADC2_CR2         (STM32_ADC2_BASE+STM32_ADC_CR2_OFFSET)
#  define STM32_ADC2_SMPR1       (STM32_ADC2_BASE+STM32_ADC_SMPR1_OFFSET)
#  define STM32_ADC2_SMPR2       (STM32_ADC2_BASE+STM32_ADC_SMPR2_OFFSET)
#  define STM32_ADC2_JOFR1       (STM32_ADC2_BASE+STM32_ADC_JOFR1_OFFSET)
#  define STM32_ADC2_JOFR2       (STM32_ADC2_BASE+STM32_ADC_JOFR2_OFFSET)
#  define STM32_ADC2_JOFR3       (STM32_ADC2_BASE+STM32_ADC_JOFR3_OFFSET)
#  define STM32_ADC2_JOFR4       (STM32_ADC2_BASE+STM32_ADC_JOFR4_OFFSET)
#  define STM32_ADC2_HTR         (STM32_ADC2_BASE+STM32_ADC_HTR_OFFSET)
#  define STM32_ADC2_LTR         (STM32_ADC2_BASE+STM32_ADC_LTR_OFFSET)
#  define STM32_ADC2_SQR1        (STM32_ADC2_BASE+STM32_ADC_SQR1_OFFSET)
#  define STM32_ADC2_SQR2        (STM32_ADC2_BASE+STM32_ADC_SQR2_OFFSET)
#  define STM32_ADC2_SQR3        (STM32_ADC2_BASE+STM32_ADC_SQR3_OFFSET)
#  define STM32_ADC2_JSQR        (STM32_ADC2_BASE+STM32_ADC_JSQR_OFFSET)
#  define STM32_ADC2_JDR1        (STM32_ADC2_BASE+STM32_ADC_JDR1_OFFSET)
#  define STM32_ADC2_JDR2        (STM32_ADC2_BASE+STM32_ADC_JDR2_OFFSET)
#  define STM32_ADC2_JDR3        (STM32_ADC2_BASE+STM32_ADC_JDR3_OFFSET)
#  define STM32_ADC2_JDR4        (STM32_ADC2_BASE+STM32_ADC_JDR4_OFFSET)
#  define STM32_ADC2_DR          (STM32_ADC2_BASE+STM32_ADC_DR_OFFSET)
#endif

/* Register Bitfield Definitions ****************************************************/

/* ADC status register */

#define ADC_SR_AWD              (1 << 0)  /* Bit 0 : Analog watchdog flag */
#define ADC_SR_EOC              (1 << 1)  /* Bit 1 : End of conversion */
#define ADC_SR_JEOC             (1 << 2)  /* Bit 2 : Injected channel end of conversion */
#define ADC_SR_JSTRT            (1 << 3)  /* Bit 3 : Injected channel Start flag */
#define ADC_SR_STRT             (1 << 4)  /* Bit 4 : Regular channel Start flag */

/* ADC control register 1 */

#define ADC_CR1_AWDCH_SHIFT     (0)       /* Bits 4-0: Analog watchdog channel select bits */
#define ADC_CR1_AWDCH_MASK      (0x1f << ADC_CR1_AWDCH_SHIFT)
#define ADC_CR1_EOCIE           (1 << 5)  /* Bit 5: Interrupt enable for EOC */
#define ADC_CR1_AWDIE           (1 << 6)  /* Bit 6: Analog Watchdog interrupt enable */
#define ADC_CR1_JEOCIE          (1 << 7)  /* Bit 7: Interrupt enable for injected channels */
#define ADC_CR1_SCAN            (1 << 8)  /* Bit 8: Scan mode */
#define ADC_CR1_AWDSGL          (1 << 9)  /* Bit 9: Enable the watchdog on a single channel in scan mode */
#define ADC_CR1_JAUTO           (1 << 10) /* Bit 10: Automatic Injected Group conversion */
#define ADC_CR1_DISCEN          (1 << 11) /* Bit 11: Discontinuous mode on regular channels */
#define ADC_CR1_JDISCEN         (1 << 12) /* Bit 12: Discontinuous mode on injected channels */
#define ADC_CR1_DISCNUM_MASK    (0x07 << ADC_CR1_DISCNUM_SHIFT)
#define ADC_CR1_DISCNUM_SHIFT   (13)      /* Bits 15-13: Discontinuous mode channel count */
#define ADC_CR1_DUALMOD_MASK    (0x0f << ADC_CR1_DUALMOD_SHIFT)
#  define ADC_CR1_IND           (0 << ADC_CR1_DUALMOD_SHIFT) /* 0000: Independent mode */
#  define ADC_CR1_RSIS          (1 << ADC_CR1_DUALMOD_SHIFT) /* 0001: Combined regular simultaneous + injected simultaneous mode */
#  define ADC_CR1_RSAT          (2 << ADC_CR1_DUALMOD_SHIFT) /* 0010: Combined regular simultaneous + alternate trigger mode */
#  define ADC_CR1_ISFI          (3 << ADC_CR1_DUALMOD_SHIFT) /* 0011: Combined injected simultaneous + fast interleaved mode */
#  define ADC_CR1_ISFL          (4 << ADC_CR1_DUALMOD_SHIFT) /* 0100: Combined injected simultaneous + slow Interleaved mode */
#  define ADC_CR1_IS            (5 << ADC_CR1_DUALMOD_SHIFT) /* 0101: Injected simultaneous mode only */
#  define ADC_CR1_RS            (6 << ADC_CR1_DUALMOD_SHIFT) /* 0110: Regular simultaneous mode only */
#  define ADC_CR1_FI            (7 << ADC_CR1_DUALMOD_SHIFT) /* 0111: Fast interleaved mode only */
#  define ADC_CR1_SI            (8 << ADC_CR1_DUALMOD_SHIFT) /* 1000: Slow interleaved mode only */
#  define ADC_CR1_AT            (9 << ADC_CR1_DUALMOD_SHIFT) /* 1001: Alternate trigger mode only */
#define ADC_CR1_DUALMOD_SHIFT   (16)      /* Bits 19-16: Dual mode selection */
#define ADC_CR1_JAWDEN          (1 << 22) /* Bit 22: Analog watchdog enable on injected channels */
#define ADC_CR1_AWDEN           (1 << 23) /* Bit 23: Analog watchdog enable on regular channels */

/* ADC control register 2 */

#define ADC_CR2_ADON            (1 << 0)  /* Bit 0: A/D Converter ON / OFF */
#define ADC_CR2_CONT            (1 << 1)  /* Bit 1: Continuous Conversion */
#define ADC_CR2_CAL             (1 << 2)  /* Bit 2: A/D Calibration */
#define ADC_CR2_RSTCAL          (1 << 3)  /* Bit 3: Reset Calibration */
#define ADC_CR2_DMA             (1 << 8)  /* Bit 8: Direct Memory access mode */
#define ADC_CR2_ALIGN           (1 << 11) /* Bit 11: Data Alignment */
#define ADC_CR2_JEXTSEL_SHIFT   (12)      /* Bits 14-12: External event select for injected group */
#define ADC_CR2_JEXTSEL_MASK    (7 << ADC_CR2_JEXTSEL_SHIFT)
#  define ADC_CR2_T1TRG0        (0 << ADC_CR2_JEXTSEL_SHIFT) /* 000: Timer 1 TRGO event */
#  define ADC_CR2_T1CC4         (1 << ADC_CR2_JEXTSEL_SHIFT) /* 001: Timer 1 CC4 event */
#  define ADC_CR2_T2TRG0        (2 << ADC_CR2_JEXTSEL_SHIFT) /* 010: Timer 2 TRGO event */
#  define ADC_CR2_T2CC1         (3 << ADC_CR2_JEXTSEL_SHIFT) /* 011: Timer 2 CC1 event */
#  define ADC_CR2_T3CC4         (4 << ADC_CR2_JEXTSEL_SHIFT) /* 100: Timer 3 CC4 event */
#  define ADC_CR2_T4TRG0        (5 << ADC_CR2_JEXTSEL_SHIFT) /* 101: Timer 4 TRGO event */
#  define ADC_CR2_EXTI15        (6 << ADC_CR2_JEXTSEL_SHIFT) /* 110: EXTI line15 */
#  define ADC_CR2_JSWSTART      (7 << ADC_CR2_JEXTSEL_SHIFT) /* 111: JSWSTART */
#define ADC_CR2_JEXTTRIG        (1 << 15) /* Bit 15: External Trigger Conversion mode for injected channels */
#define ADC_CR2_EXTSEL_SHIFT    (17)      /* Bits 19-17: External Event Select for regular group */
#define ADC_CR2_EXTSEL_MASK     (7 << ADC_CR2_EXTSEL_SHIFT)
#  define ADC_CR2_T1CC1         (0 << ADC_CR2_EXTSEL_SHIFT) /* 000: Timer 1 CC1 event */
#  define ADC_CR2_T1CC2         (1 << ADC_CR2_EXTSEL_SHIFT) /* 001: Timer 1 CC2 event */
#  define ADC_CR2_T1CC3         (2 << ADC_CR2_EXTSEL_SHIFT) /* 010: Timer 1 CC3 event */
#  define ADC_CR2_T2CC2         (3 << ADC_CR2_EXTSEL_SHIFT) /* 011: Timer 2 CC2 event */
#  define ADC_CR2_T3TRG0        (4 << ADC_CR2_EXTSEL_SHIFT) /* 100: Timer 3 TRGO event */
#  define ADC_CR2_T4CC4         (5 << ADC_CR2_EXTSEL_SHIFT) /* 101: Timer 4 CC4 event */
#  define ADC_CR2_EXTI11        (6 << ADC_CR2_EXTSEL_SHIFT) /* 110: EXTI line11 */
#  define ADC_CR2_SWSTART       (7 << ADC_CR2_EXTSEL_SHIFT) /* 111: SWSTART */
#define ADC_CR2_EXTTRIG         (1 << 20) /* Bit 20: External Trigger Conversion mode for regular channels */
#define ADC_CR2_JSWSTART        (1 << 21) /* Bit 21: Start Conversion of injected channels */
#define ADC_CR2_SWSTART         (1 << 22) /* Bit 22: Start Conversion of regular channels */
#define ADC_CR2_TSVREFE         (1 << 23) /* Bit 23: Temperature Sensor and VREFINT Enable */

/* ADC sample time register 1 */

#define ADC_SMPR1_SMP10_SHIFT   (0)       /* Bits 2-0: Channel 10 Sample time selection */
#define ADC_SMPR1_SMP10_MASK    (7 << ADC_SMPR1_SMP10_SHIFT)
#define ADC_SMPR1_SMP11_SHIFT   (3)       /* Bits 5-3: Channel 11 Sample time selection */
#define ADC_SMPR1_SMP11_MASK    (7 << ADC_SMPR1_SMP11_SHIFT)
#define ADC_SMPR1_SMP12_SHIFT   (6)       /* Bits 8-6: Channel 12 Sample time selection */
#define ADC_SMPR1_SMP12_MASK    (7 << ADC_SMPR1_SMP12_SHIFT)
#define ADC_SMPR1_SMP13_SHIFT   (9)       /* Bits 11-9: Channel 13 Sample time selection */
#define ADC_SMPR1_SMP13_MASK    (7 << ADC_SMPR1_SMP13_SHIFT)
#define ADC_SMPR1_SMP14_SHIFT   (12)      /* Bits 14-12: Channel 14 Sample time selection */
#define ADC_SMPR1_SMP14_MASK    (7 << ADC_SMPR1_SMP14_SHIFT)
#define ADC_SMPR1_SMP15_SHIFT   (15)      /* Bits 17-15: Channel 15 Sample time selection */
#define ADC_SMPR1_SMP15_MASK    (7 << ADC_SMPR1_SMP15_SHIFT)
#define ADC_SMPR1_SMP16_SHIFT   (18)      /* Bits 20-18: Channel 16 Sample time selection */
#define ADC_SMPR1_SMP16_MASK    (7 << ADC_SMPR1_SMP16_SHIFT)
#define ADC_SMPR1_SMP17_SHIFT   (21)      /* Bits 23-21: Channel 17 Sample time selection */
#define ADC_SMPR1_SMP17_MASK    (7 << ADC_SMPR1_SMP17_SHIFT)

#define ADC_SMPR_1p5            0         /* 000: 1.5 cycles */
#define ADC_SMPR_7p5            1         /* 001: 7.5 cycles */
#define ADC_SMPR_13p5           2         /* 010: 13.5 cycles */
#define ADC_SMPR_28p5           3         /* 011: 28.5 cycles */
#define ADC_SMPR_41p5           4         /* 100: 41.5 cycles */
#define ADC_SMPR_55p5           5         /* 101: 55.5 cycles */
#define ADC_SMPR_71p5           6         /* 110: 71.5 cycles */
#define ADC_SMPR_239p5          7         /* 111: 239.5 cycles */

/* ADC sample time register 2 */

#define ADC_SMPR2_SMP0_SHIFT    (0)       /* Bits 2-0: Channel 0 Sample time selection */
#define ADC_SMPR2_SMP0_MASK     (7 << ADC_SMPR1_SMP0_SHIFT)
#define ADC_SMPR2_SMP1_SHIFT    (3)       /* Bits 5-3: Channel 1 Sample time selection */
#define ADC_SMPR2_SMP1_MASK     (7 << ADC_SMPR1_SMP1_SHIFT)
#define ADC_SMPR2_SMP2_SHIFT    (6)       /* Bits 8-6: Channel 2 Sample time selection */
#define ADC_SMPR2_SMP2_MASK     (7 << ADC_SMPR1_SMP2_SHIFT)
#define ADC_SMPR2_SMP3_SHIFT    (9)       /* Bits 11-9: Channel 3 Sample time selection */
#define ADC_SMPR2_SMP3_MASK     (7 << ADC_SMPR1_SMP3_SHIFT)
#define ADC_SMPR2_SMP4_SHIFT    (12)      /* Bits 14-12: Channel 4 Sample time selection */
#define ADC_SMPR2_SMP4_MASK     (7 << ADC_SMPR1_SMP4_SHIFT)
#define ADC_SMPR2_SMP5_SHIFT    (15)      /* Bits 17-15: Channel 5 Sample time selection */
#define ADC_SMPR2_SMP5_MASK     (7 << ADC_SMPR1_SMP5_SHIFT)
#define ADC_SMPR2_SMP6_SHIFT    (18)      /* Bits 20-18: Channel 6 Sample time selection */
#define ADC_SMPR2_SMP6_MASK     (7 << ADC_SMPR1_SMP6_SHIFT)
#define ADC_SMPR2_SMP7_SHIFT    (21)      /* Bits 23-21: Channel 7 Sample time selection */
#define ADC_SMPR2_SMP7_MASK     (7 << ADC_SMPR1_SMP7_SHIFT)
#define ADC_SMPR2_SMP8_SHIFT    (24)      /* Bits 26-24: Channel 8 Sample time selection */
#define ADC_SMPR2_SMP8_MASK     (7 << ADC_SMPR1_SMP8_SHIFT)
#define ADC_SMPR2_SMP9_SHIFT    (27)      /* Bits 29-27: Channel 9 Sample time selection */
#define ADC_SMPR2_SMP9_MASK     (7 << ADC_SMPR1_SMP9_SHIFT)

/* ADC injected channel data offset register 1-4 */

#define ADC_JOFR_SHIFT         (0)        /* Bits 11-0: Data offset for injected channel x */
#define ADC_JOFR_MASK          (0x0fff << ADC_JOFR_SHIFT)

/* ADC watchdog high threshold register */

#define ADC_HTR_SHIFT          (0)        /* Bits 11-0: Analog watchdog high threshold */
#define ADC_HTR_MASK           (0x0fff << ADC_HTR_SHIFT)

/* ADC watchdog low threshold register */

#define ADC_LTR_SHIFT          (0)        /* Bits 11:0: Analog watchdog low threshold */
#define ADC_LTR_MASK           (0x0fff << ADC_LTR_SHIFT)

/* ADC regular sequence register 1 */

#define ADC_SQR1_SQ13_SHIFT   (0)         /* Bits 4-0: 13th conversion in regular sequence */
#define ADC_SQR1_SQ13_MASK    (0x1f << ADC_SQR1_SQ13_SHIFT)
#define ADC_SQR1_SQ14_SHIFT   (5)         /* Bits 9-5: 14th conversion in regular sequence */
#define ADC_SQR1_SQ14_MASK    (0x1f << ADC_SQR1_SQ14_SHIFT)
#define ADC_SQR1_SQ15_SHIFT   (10)        /* Bits 14-10: 15th conversion in regular sequence */
#define ADC_SQR1_SQ15_MASK    (0x1f << ADC_SQR1_SQ15_SHIFT)
#define ADC_SQR1_SQ16_SHIFT   (15)        /* Bits 19-15: 16th conversion in regular sequence */
#define ADC_SQR1_SQ16_MASK    (0x1f << ADC_SQR1_SQ16_SHIFT)
#define ADC_SQR1_L_SHIFT      (20)        /* Bits 23:20 L[3:0]: Regular channel sequence length */
#define ADC_SQR1_L_MASK       (0x0f << ADC_SQR1_L_SHIFT)

/* ADC regular sequence register 2 */

#define ADC_SQR1_SQ7_SHIFT    (0)         /* Bits 4-0: 7th conversion in regular sequence */
#define ADC_SQR2_SQ7_MASK     (0x1f << ADC_SQR2_SQ7_SHIFT)
#define ADC_SQR2_SQ8_SHIFT    (5)         /* Bits 9-5: 8th conversion in regular sequence */
#define ADC_SQR2_SQ8_MASK     (0x1f << ADC_SQR2_SQ8_SHIFT)
#define ADC_SQR2_SQ9_SHIFT    (10)        /* Bits 14-10: 9th conversion in regular sequence */
#define ADC_SQR2_SQ9_MASK     (0x1f << ADC_SQR2_SQ9_SHIFT)
#define ADC_SQR2_SQ10_SHIFT   (15)        /* Bits 19-15: 10th conversion in regular sequence */
#define ADC_SQR2_SQ10_MASK    (0x1f << ADC_SQR2_SQ10_SHIFT)
#define ADC_SQR2_SQ11_SHIFT   (20)        /* Bits 24:20: 11th conversion in regular sequence */
#define ADC_SQR2_SQ11_MASK    (0x1f << ADC_SQR2_SQ11_SHIFT )
#define ADC_SQR2_SQ12_SHIFT   (25)        /* Bits 29:25: 12th conversion in regular sequence */
#define ADC_SQR2_SQ12_MASK    (0x1f << ADC_SQR2_SQ12_SHIFT)

/* ADC regular sequence register 3 */

#define ADC_SQR3_SQ1_SHIFT    (0)         /* Bits 4-0: 1st conversion in regular sequence */
#define ADC_SQR3_SQ1_MASK     (0x1f << ADC_SQR3_SQ1_SHIFT)
#define ADC_SQR3_SQ2_SHIFT    (5)         /* Bits 9-5: 2nd conversion in regular sequence */
#define ADC_SQR3_SQ2_MASK     (0x1f << ADC_SQR3_SQ2_SHIFT)
#define ADC_SQR3_SQ3_SHIFT    (10)        /* Bits 14-10: 3rd conversion in regular sequence */
#define ADC_SQR3_SQ3_MASK     (0x1f << ADC_SQR3_SQ3_SHIFT)
#define ADC_SQR3_SQ4_SHIFT    (15)        /* Bits 19-15: 4th conversion in regular sequence */
#define ADC_SQR3_SQ4_MASK     (0x1f << ADC_SQR3_SQ4_SHIFT)
#define ADC_SQR3_SQ5_SHIFT    (20)        /* Bits 24:20: 5th conversion in regular sequence */
#define ADC_SQR3_SQ5_MASK     (0x1f << ADC_SQR3_SQ5_SHIFT )
#define ADC_SQR3_SQ6_SHIFT    (25)        /* Bits 29:25: 6th conversion in regular sequence */
#define ADC_SQR3_SQ6_MASK     (0x1f << ADC_SQR3_SQ6_SHIFT)

/* ADC injected sequence register */

#define ADC_JSQR_JSQ1_SHIFT   (0)        /* Bits 4:0 JSQ1[4:0]: 1st conversion in injected sequence */
#define ADC_JSQR_JSQ1_MASK    (0x1f << ADC_JSQR_JSQ1_SHIFT)
#define ADC_JSQR_JSQ2_SHIFT   (5)        /* Bits 9:5 JSQ2[4:0]: 2nd conversion in injected sequence */
#define ADC_JSQR_JSQ2_MASK    (0x1f << ADC_JSQR_JSQ2_MASK)
#define ADC_JSQR_JSQ3_SHIFT   (10)       /* Bits 14:10 JSQ3[4:0]: 3rd conversion in injected sequence */
#define ADC_JSQR_JSQ3_MASK    (0x1f << ADC_JSQR_JSQ3_SHIFT)
#define ADC_JSQR_JSQ4_SHIFT   (15)       /* Bits 19:15 JSQ4[4:0]: 4th conversion in injected sequence */
#define ADC_JSQR_JSQ4_MASK    (0x1f << ADC_JSQR_JSQ4_SHIFT)
#define ADC_JSQR_JL_SHIFT     (20)       /* Bits 21:20 JL[1:0]: Injected Sequence length */
#define ADC_JSQR_JL_MASK      (3 << ADC_JSQR_JL_SHIFT)

/* ADC injected data register 1-4 */

#define ADC_JDR_SHIFT         (0)        /* Bits 15-0: Injected data */
#define ADC_JDR_MASK          (0xffff << ADC_JDR_SHIFT)

/* ADC regular data register */

#define ADC_DR_DATA_SHIFT     (0)        /* Bits 15:0 Regular data */
#define ADC_DR_DATA_MASK      (0xffff << yyyy)
#define ADC_DR_ADC2DATA_SHIFT (16)       /* Bits 31:16: ADC2 data */
#define ADC_DR_ADC2DATA_MASK  (0xffff << yyyy)

/************************************************************************************
 * Public Types
 ************************************************************************************/

/************************************************************************************
 * Public Data
 ************************************************************************************/

/************************************************************************************
 * Public Function Prototypes
 ************************************************************************************/

#endif /* __ARCH_ARM_SRC_STM32_STM32_ADC_H */