Remove ADC_* defines in favor of hardware-specific mapping
This commit is contained in:
parent
f819a18791
commit
84b65cb699
@ -23,6 +23,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "watch_adc.h"
|
#include "watch_adc.h"
|
||||||
|
#include "driver_init.h"
|
||||||
|
|
||||||
static void _watch_sync_adc(void) {
|
static void _watch_sync_adc(void) {
|
||||||
while (ADC->SYNCBUSY.reg);
|
while (ADC->SYNCBUSY.reg);
|
||||||
@ -138,13 +139,30 @@ void watch_set_analog_sampling_length(uint8_t cycles) {
|
|||||||
_watch_sync_adc();
|
_watch_sync_adc();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline uint32_t _watch_adc_get_reference_voltage(const watch_adc_reference_voltage reference) {
|
||||||
|
switch (reference) {
|
||||||
|
case ADC_REFERENCE_INTREF:
|
||||||
|
return ADC_REFCTRL_REFSEL_INTREF_Val;
|
||||||
|
break;
|
||||||
|
case ADC_REFERENCE_VCC_DIV1POINT6:
|
||||||
|
return ADC_REFCTRL_REFSEL_INTVCC0_Val;
|
||||||
|
break;
|
||||||
|
case ADC_REFERENCE_VCC_DIV2:
|
||||||
|
return ADC_REFCTRL_REFSEL_INTVCC1_Val;
|
||||||
|
break;
|
||||||
|
case ADC_REFERENCE_VCC:
|
||||||
|
return ADC_REFCTRL_REFSEL_INTVCC2_Val;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void watch_set_analog_reference_voltage(watch_adc_reference_voltage reference) {
|
void watch_set_analog_reference_voltage(watch_adc_reference_voltage reference) {
|
||||||
ADC->CTRLA.bit.ENABLE = 0;
|
ADC->CTRLA.bit.ENABLE = 0;
|
||||||
|
|
||||||
if (reference == ADC_REFERENCE_INTREF) SUPC->VREF.bit.VREFOE = 1;
|
if (reference == ADC_REFERENCE_INTREF) SUPC->VREF.bit.VREFOE = 1;
|
||||||
else SUPC->VREF.bit.VREFOE = 0;
|
else SUPC->VREF.bit.VREFOE = 0;
|
||||||
|
|
||||||
ADC->REFCTRL.bit.REFSEL = reference;
|
ADC->REFCTRL.bit.REFSEL = _watch_adc_get_reference_voltage(reference);
|
||||||
ADC->CTRLA.bit.ENABLE = 1;
|
ADC->CTRLA.bit.ENABLE = 1;
|
||||||
_watch_sync_adc();
|
_watch_sync_adc();
|
||||||
// throw away one measurement after reference change (the channel doesn't matter).
|
// throw away one measurement after reference change (the channel doesn't matter).
|
||||||
|
@ -27,23 +27,6 @@
|
|||||||
|
|
||||||
#include "watch.h"
|
#include "watch.h"
|
||||||
|
|
||||||
// matches adc.h
|
|
||||||
#ifndef ADC_REFCTRL_REFSEL_INTREF_Val
|
|
||||||
#define ADC_REFCTRL_REFSEL_INTREF_Val 0x0
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef ADC_REFCTRL_REFSEL_INTVCC0_Val
|
|
||||||
#define ADC_REFCTRL_REFSEL_INTVCC0_Val 0x1
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef ADC_REFCTRL_REFSEL_INTVCC1_Val
|
|
||||||
#define ADC_REFCTRL_REFSEL_INTVCC1_Val 0x2
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef ADC_REFCTRL_REFSEL_INTVCC2_Val
|
|
||||||
#define ADC_REFCTRL_REFSEL_INTVCC2_Val 0x5
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/** @addtogroup adc Analog Input
|
/** @addtogroup adc Analog Input
|
||||||
* @brief This section covers functions related to the SAM L22's analog-to-digital converter,
|
* @brief This section covers functions related to the SAM L22's analog-to-digital converter,
|
||||||
* as well as configuring and reading values from the five analog-capable pins on the
|
* as well as configuring and reading values from the five analog-capable pins on the
|
||||||
@ -112,10 +95,10 @@ void watch_set_analog_num_samples(uint16_t samples);
|
|||||||
void watch_set_analog_sampling_length(uint8_t cycles);
|
void watch_set_analog_sampling_length(uint8_t cycles);
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
ADC_REFERENCE_INTREF = ADC_REFCTRL_REFSEL_INTREF_Val,
|
ADC_REFERENCE_INTREF = 0,
|
||||||
ADC_REFERENCE_VCC_DIV1POINT6 = ADC_REFCTRL_REFSEL_INTVCC0_Val,
|
ADC_REFERENCE_VCC_DIV1POINT6,
|
||||||
ADC_REFERENCE_VCC_DIV2 = ADC_REFCTRL_REFSEL_INTVCC1_Val,
|
ADC_REFERENCE_VCC_DIV2,
|
||||||
ADC_REFERENCE_VCC = ADC_REFCTRL_REFSEL_INTVCC2_Val,
|
ADC_REFERENCE_VCC,
|
||||||
} watch_adc_reference_voltage;
|
} watch_adc_reference_voltage;
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user