41 #ifdef CORTEXM3_STM32W108
44 typedef uint8_t ADCUser;
58 #define NUM_ADC_USERS 3 // make sure to update if the above is adjusted
62 typedef uint8_t ADCReferenceType;
74 typedef uint8_t ADCRateType;
78 ADC_CONVERSION_TIME_US_32 = 0x0,
80 ADC_CONVERSION_TIME_US_64 = 0x1,
82 ADC_CONVERSION_TIME_US_128 = 0x2,
84 ADC_CONVERSION_TIME_US_256 = 0x3,
86 ADC_CONVERSION_TIME_US_512 = 0x4,
88 ADC_CONVERSION_TIME_US_1024 = 0x5,
90 ADC_CONVERSION_TIME_US_2048 = 0x6,
92 ADC_CONVERSION_TIME_US_4096 = 0x7,
96 #if defined (CORTEXM3)
98 #define ADC_MUX_ADC0 0x0
100 #define ADC_MUX_ADC1 0x1
102 #define ADC_MUX_ADC2 0x2
104 #define ADC_MUX_ADC3 0x3
106 #define ADC_MUX_ADC4 0x4
108 #define ADC_MUX_ADC5 0x5
110 #define ADC_MUX_GND 0x8
112 #define ADC_MUX_VREF2 0x9
114 #define ADC_MUX_VREF 0xA
116 #define ADC_MUX_VREG2 0xB
122 ADC_SOURCE_ADC0_VREF2 = ((ADC_MUX_ADC0 <<ADC_MUXN_BITS) + ADC_MUX_VREF2),
123 ADC_SOURCE_ADC0_GND = ((ADC_MUX_ADC0 <<ADC_MUXN_BITS) + ADC_MUX_GND),
125 ADC_SOURCE_ADC1_VREF2 = ((ADC_MUX_ADC1 <<ADC_MUXN_BITS) + ADC_MUX_VREF2),
126 ADC_SOURCE_ADC1_GND = ((ADC_MUX_ADC1 <<ADC_MUXN_BITS) + ADC_MUX_GND),
128 ADC_SOURCE_ADC2_VREF2 = ((ADC_MUX_ADC2 <<ADC_MUXN_BITS) + ADC_MUX_VREF2),
129 ADC_SOURCE_ADC2_GND = ((ADC_MUX_ADC2 <<ADC_MUXN_BITS) + ADC_MUX_GND),
131 ADC_SOURCE_ADC3_VREF2 = ((ADC_MUX_ADC3 <<ADC_MUXN_BITS) + ADC_MUX_VREF2),
132 ADC_SOURCE_ADC3_GND = ((ADC_MUX_ADC3 <<ADC_MUXN_BITS) + ADC_MUX_GND),
134 ADC_SOURCE_ADC4_VREF2 = ((ADC_MUX_ADC4 <<ADC_MUXN_BITS) + ADC_MUX_VREF2),
135 ADC_SOURCE_ADC4_GND = ((ADC_MUX_ADC4 <<ADC_MUXN_BITS) + ADC_MUX_GND),
137 ADC_SOURCE_ADC5_VREF2 = ((ADC_MUX_ADC5 <<ADC_MUXN_BITS) + ADC_MUX_VREF2),
138 ADC_SOURCE_ADC5_GND = ((ADC_MUX_ADC5 <<ADC_MUXN_BITS) + ADC_MUX_GND),
140 ADC_SOURCE_ADC1_ADC0 = ((ADC_MUX_ADC1 <<ADC_MUXN_BITS) + ADC_MUX_ADC0),
141 ADC_SOURCE_ADC0_ADC1 = ((ADC_MUX_ADC1 <<ADC_MUXN_BITS) + ADC_MUX_ADC0),
143 ADC_SOURCE_ADC3_ADC2 = ((ADC_MUX_ADC3 <<ADC_MUXN_BITS) + ADC_MUX_ADC2),
144 ADC_SOURCE_ADC2_ADC3 = ((ADC_MUX_ADC3 <<ADC_MUXN_BITS) + ADC_MUX_ADC2),
146 ADC_SOURCE_ADC5_ADC4 = ((ADC_MUX_ADC5 <<ADC_MUXN_BITS) + ADC_MUX_ADC4),
148 ADC_SOURCE_GND_VREF2 = ((ADC_MUX_GND <<ADC_MUXN_BITS) + ADC_MUX_VREF2),
149 ADC_SOURCE_VGND = ((ADC_MUX_GND <<ADC_MUXN_BITS) + ADC_MUX_GND),
151 ADC_SOURCE_VREF_VREF2 = ((ADC_MUX_VREF <<ADC_MUXN_BITS) + ADC_MUX_VREF2),
152 ADC_SOURCE_VREF = ((ADC_MUX_VREF <<ADC_MUXN_BITS) + ADC_MUX_GND),
160 #ifdef ENABLE_ADC_EXTENDED_RANGE_BROKEN
161 ADC_SOURCE_VREF2_VREF2 = ((ADC_MUX_VREF2 <<ADC_MUXN_BITS) + ADC_MUX_VREF2),
162 ADC_SOURCE_VREF2 = ((ADC_MUX_VREF2 <<ADC_MUXN_BITS) + ADC_MUX_GND),
165 ADC_SOURCE_VREG2_VREF2 = ((ADC_MUX_VREG2 <<ADC_MUXN_BITS) + ADC_MUX_VREF2),
166 ADC_SOURCE_VDD_GND = ((ADC_MUX_VREG2 <<ADC_MUXN_BITS) + ADC_MUX_GND)
172 #define ADC_SOURCE(P,N) (( P << ADC_MUXN_BITS ) + N)
174 #endif // defined (CORTEXM3)
180 typedef uint8_t ADCChannelType;
191 uint8_t halGetADCChannelFromGPIO(uint32_t io);
196 void halInternalInitAdc(
void);
221 StStatus halStartAdcConversion(ADCUser
id,
222 ADCReferenceType reference,
223 ADCChannelType channel,
244 StStatus halRequestAdcData(ADCUser
id, uint16_t *value);
262 StStatus halReadAdcBlocking(ADCUser
id, uint16_t *value);
281 StStatus halAdcCalibrate(ADCUser
id);
295 int16_t halConvertValueToVolts(uint16_t value);
306 void stCalibrateVref(
void);
309 void halAdcSetClock(
boolean fast);
310 void halAdcSetRange(
boolean high);
311 boolean halAdcGetClock(
void);
312 boolean halAdcGetRange(
void);
317 #ifdef CORTEXM3_STM32F103
318 #include "micro/cortexm3/stm32f103ret/adc.h"