42 #ifdef CORTEXM3_STM32W108
45 typedef uint8_t ADCUser;
59 #define NUM_ADC_USERS 3 // make sure to update if the above is adjusted
63 typedef uint8_t ADCReferenceType;
75 typedef uint8_t ADCRateType;
79 ADC_CONVERSION_TIME_US_32 = 0x0,
81 ADC_CONVERSION_TIME_US_64 = 0x1,
83 ADC_CONVERSION_TIME_US_128 = 0x2,
85 ADC_CONVERSION_TIME_US_256 = 0x3,
87 ADC_CONVERSION_TIME_US_512 = 0x4,
89 ADC_CONVERSION_TIME_US_1024 = 0x5,
91 ADC_CONVERSION_TIME_US_2048 = 0x6,
93 ADC_CONVERSION_TIME_US_4096 = 0x7,
97 #if defined (CORTEXM3)
99 #define ADC_MUX_ADC0 0x0
101 #define ADC_MUX_ADC1 0x1
103 #define ADC_MUX_ADC2 0x2
105 #define ADC_MUX_ADC3 0x3
107 #define ADC_MUX_ADC4 0x4
109 #define ADC_MUX_ADC5 0x5
111 #define ADC_MUX_GND 0x8
113 #define ADC_MUX_VREF2 0x9
115 #define ADC_MUX_VREF 0xA
117 #define ADC_MUX_VREG2 0xB
123 ADC_SOURCE_ADC0_VREF2 = ((ADC_MUX_ADC0 <<ADC_MUXN_BITS) + ADC_MUX_VREF2),
124 ADC_SOURCE_ADC0_GND = ((ADC_MUX_ADC0 <<ADC_MUXN_BITS) + ADC_MUX_GND),
126 ADC_SOURCE_ADC1_VREF2 = ((ADC_MUX_ADC1 <<ADC_MUXN_BITS) + ADC_MUX_VREF2),
127 ADC_SOURCE_ADC1_GND = ((ADC_MUX_ADC1 <<ADC_MUXN_BITS) + ADC_MUX_GND),
129 ADC_SOURCE_ADC2_VREF2 = ((ADC_MUX_ADC2 <<ADC_MUXN_BITS) + ADC_MUX_VREF2),
130 ADC_SOURCE_ADC2_GND = ((ADC_MUX_ADC2 <<ADC_MUXN_BITS) + ADC_MUX_GND),
132 ADC_SOURCE_ADC3_VREF2 = ((ADC_MUX_ADC3 <<ADC_MUXN_BITS) + ADC_MUX_VREF2),
133 ADC_SOURCE_ADC3_GND = ((ADC_MUX_ADC3 <<ADC_MUXN_BITS) + ADC_MUX_GND),
135 ADC_SOURCE_ADC4_VREF2 = ((ADC_MUX_ADC4 <<ADC_MUXN_BITS) + ADC_MUX_VREF2),
136 ADC_SOURCE_ADC4_GND = ((ADC_MUX_ADC4 <<ADC_MUXN_BITS) + ADC_MUX_GND),
138 ADC_SOURCE_ADC5_VREF2 = ((ADC_MUX_ADC5 <<ADC_MUXN_BITS) + ADC_MUX_VREF2),
139 ADC_SOURCE_ADC5_GND = ((ADC_MUX_ADC5 <<ADC_MUXN_BITS) + ADC_MUX_GND),
141 ADC_SOURCE_ADC1_ADC0 = ((ADC_MUX_ADC1 <<ADC_MUXN_BITS) + ADC_MUX_ADC0),
142 ADC_SOURCE_ADC0_ADC1 = ((ADC_MUX_ADC1 <<ADC_MUXN_BITS) + ADC_MUX_ADC0),
144 ADC_SOURCE_ADC3_ADC2 = ((ADC_MUX_ADC3 <<ADC_MUXN_BITS) + ADC_MUX_ADC2),
145 ADC_SOURCE_ADC2_ADC3 = ((ADC_MUX_ADC3 <<ADC_MUXN_BITS) + ADC_MUX_ADC2),
147 ADC_SOURCE_ADC5_ADC4 = ((ADC_MUX_ADC5 <<ADC_MUXN_BITS) + ADC_MUX_ADC4),
149 ADC_SOURCE_GND_VREF2 = ((ADC_MUX_GND <<ADC_MUXN_BITS) + ADC_MUX_VREF2),
150 ADC_SOURCE_VGND = ((ADC_MUX_GND <<ADC_MUXN_BITS) + ADC_MUX_GND),
152 ADC_SOURCE_VREF_VREF2 = ((ADC_MUX_VREF <<ADC_MUXN_BITS) + ADC_MUX_VREF2),
153 ADC_SOURCE_VREF = ((ADC_MUX_VREF <<ADC_MUXN_BITS) + ADC_MUX_GND),
161 #ifdef ENABLE_ADC_EXTENDED_RANGE_BROKEN
162 ADC_SOURCE_VREF2_VREF2 = ((ADC_MUX_VREF2 <<ADC_MUXN_BITS) + ADC_MUX_VREF2),
163 ADC_SOURCE_VREF2 = ((ADC_MUX_VREF2 <<ADC_MUXN_BITS) + ADC_MUX_GND),
166 ADC_SOURCE_VREG2_VREF2 = ((ADC_MUX_VREG2 <<ADC_MUXN_BITS) + ADC_MUX_VREF2),
167 ADC_SOURCE_VDD_GND = ((ADC_MUX_VREG2 <<ADC_MUXN_BITS) + ADC_MUX_GND)
173 #define ADC_SOURCE(P,N) (( P << ADC_MUXN_BITS ) + N)
175 #endif // defined (CORTEXM3)
181 typedef uint8_t ADCChannelType;
192 uint8_t halGetADCChannelFromGPIO(uint32_t io);
197 void halInternalInitAdc(
void);
222 StStatus halStartAdcConversion(ADCUser
id,
223 ADCReferenceType reference,
224 ADCChannelType channel,
245 StStatus halRequestAdcData(ADCUser
id, uint16_t *value);
263 StStatus halReadAdcBlocking(ADCUser
id, uint16_t *value);
282 StStatus halAdcCalibrate(ADCUser
id);
296 int16_t halConvertValueToVolts(uint16_t value);
307 void stCalibrateVref(
void);
310 void halAdcSetClock(
boolean fast);
311 void halAdcSetRange(
boolean high);
312 boolean halAdcGetClock(
void);
313 boolean halAdcGetRange(
void);
318 #ifdef CORTEXM3_STM32F103
319 #include "micro/cortexm3/stm32f103ret/adc.h"