@@ -72,6 +72,7 @@ typedef enum {
72
72
ADC_EOC , // End Of Conversion interrupt.
73
73
ADC_AWD , // Analog WatchDog interrupt
74
74
ADC_JEOC , // Injected End Of Conversion interrupt.
75
+ ADC_OVR , // overrun interrupt
75
76
ADC_LAST_IRQ_ID
76
77
} adc_irq_id ;
77
78
@@ -92,9 +93,10 @@ typedef struct adc_dev
92
93
extern const adc_dev adc1 ;
93
94
extern const adc_dev adc2 ;
94
95
extern const adc_dev adc3 ;
95
- #define ADC1 (&adc1)
96
- #define ADC2 (&adc2)
97
- #define ADC3 (&adc3)
96
+
97
+ #define ADC1 ((adc_dev*) &adc1)
98
+ #define ADC2 ((adc_dev*) &adc2)
99
+ #define ADC3 ((adc_dev*) &adc3)
98
100
99
101
typedef struct adc_common_reg_map {
100
102
__IO uint32 CSR ; ///< Common status register
@@ -303,6 +305,7 @@ extern adc_common_reg_map* const ADC_COMMON;
303
305
#define ADC_CCR_DELAY_SHIFT 8
304
306
#define ADC_CCR_MULTI_SHIFT 0
305
307
308
+
306
309
#define ADC_CCR_TSVREFE (0x1 << ADC_CCR_TSVREFE_BIT)
307
310
#define ADC_CCR_VBATE (0x1 << ADC_CCR_VBATE_BIT)
308
311
#define ADC_CCR_ADCPRE (0x3 << ADC_CCR_ADCPRE_SHIFT)
@@ -311,6 +314,20 @@ extern adc_common_reg_map* const ADC_COMMON;
311
314
#define ADC_CCR_DELAY (0xF << ADC_CCR_DELAY_SHIFT)
312
315
#define ADC_CCR_MULTI (0x1F << ADC_CCR_MULTI_SHIFT)
313
316
317
+ /**
318
+ * @brief STM32F1/F4 ADC prescalers, as divisors of PCLK2.
319
+ */
320
+ typedef enum adc_prescaler {
321
+ /** PCLK2 divided by 2 */
322
+ ADC_PRE_PCLK2_DIV_2 = 0 ,
323
+ /** PCLK2 divided by 4 */
324
+ ADC_PRE_PCLK2_DIV_4 = 1 ,
325
+ /** PCLK2 divided by 6 */
326
+ ADC_PRE_PCLK2_DIV_6 = 2 ,
327
+ /** PCLK2 divided by 8 */
328
+ ADC_PRE_PCLK2_DIV_8 = 3 ,
329
+ } adc_prescaler ;
330
+
314
331
/* Common regular data register */
315
332
316
333
#define ADC_CDR_DATA2 (0xFFFF << 16)
@@ -384,6 +401,7 @@ typedef enum {
384
401
ADC_SMPR_480 , /**< 480 ADC cycles */
385
402
} adc_smp_rate ;
386
403
404
+ void adc_set_prescaler (adc_prescaler pre );
387
405
void adc_set_sampling_time (const adc_dev * dev , adc_smp_rate smp_rate );
388
406
void adc_set_exttrig (const adc_dev * dev , adc_ext_trigger trigger );
389
407
void adc_set_jextrig (const adc_dev * dev , adc_ext_trigger trigger );
@@ -392,6 +410,7 @@ void adc_set_jextsel(const adc_dev *dev, adc_jextsel_event event);
392
410
void adc_foreach (void (* fn )(const adc_dev * ));
393
411
void adc_enable_irq (const adc_dev * dev );
394
412
void adc_disable_irq (const adc_dev * dev );
413
+ void adc_ovr_enable_irq (const adc_dev * dev );
395
414
void adc_attach_interrupt (const adc_dev * dev , adc_irq_id irq_id , voidFuncPtr handler );
396
415
void adc_set_reg_sequence (const adc_dev * dev , uint8 * channels , uint8 len );
397
416
void adc_enable_tsvref (void );
@@ -478,6 +497,11 @@ static inline void adc_awd_enable(const adc_dev * dev)
478
497
dev -> regs -> CR1 |= ADC_CR1_AWDEN ;
479
498
}
480
499
500
+ static inline void adc_awd_disable (const adc_dev * dev )
501
+ {
502
+ dev -> regs -> CR1 &= ~ADC_CR1_AWDEN ;
503
+ }
504
+
481
505
static inline void adc_set_scan_mode (const adc_dev * dev )
482
506
{
483
507
dev -> regs -> CR1 |= ADC_CR1_SCAN ;
@@ -534,6 +558,7 @@ static inline void adc_start_convert(const adc_dev * dev)
534
558
}
535
559
536
560
561
+
537
562
#ifdef __cplusplus
538
563
} // extern "C"
539
564
#endif
0 commit comments