diff options
Diffstat (limited to 'drivers/chibios/analog.c')
-rw-r--r-- | drivers/chibios/analog.c | 57 |
1 files changed, 51 insertions, 6 deletions
diff --git a/drivers/chibios/analog.c b/drivers/chibios/analog.c index 2b3872afb..b1081623d 100644 --- a/drivers/chibios/analog.c +++ b/drivers/chibios/analog.c | |||
@@ -101,7 +101,11 @@ | |||
101 | 101 | ||
102 | // Options are 12, 10, 8, and 6 bit. | 102 | // Options are 12, 10, 8, and 6 bit. |
103 | #ifndef ADC_RESOLUTION | 103 | #ifndef ADC_RESOLUTION |
104 | # define ADC_RESOLUTION ADC_CFGR1_RES_10BIT | 104 | # ifdef ADC_CFGR_RES_10BITS // ADCv3, ADCv4 |
105 | # define ADC_RESOLUTION ADC_CFGR_RES_10BITS | ||
106 | # else // ADCv1, ADCv5, or the bodge for ADCv2 above | ||
107 | # define ADC_RESOLUTION ADC_CFGR1_RES_10BIT | ||
108 | # endif | ||
105 | #endif | 109 | #endif |
106 | 110 | ||
107 | static ADCConfig adcCfg = {}; | 111 | static ADCConfig adcCfg = {}; |
@@ -161,8 +165,8 @@ __attribute__((weak)) adc_mux pinToMux(pin_t pin) { | |||
161 | case B0: return TO_MUX( ADC_CHANNEL_IN12, 2 ); | 165 | case B0: return TO_MUX( ADC_CHANNEL_IN12, 2 ); |
162 | case B1: return TO_MUX( ADC_CHANNEL_IN1, 2 ); | 166 | case B1: return TO_MUX( ADC_CHANNEL_IN1, 2 ); |
163 | case B2: return TO_MUX( ADC_CHANNEL_IN12, 1 ); | 167 | case B2: return TO_MUX( ADC_CHANNEL_IN12, 1 ); |
164 | case B12: return TO_MUX( ADC_CHANNEL_IN2, 3 ); | 168 | case B12: return TO_MUX( ADC_CHANNEL_IN3, 3 ); |
165 | case B13: return TO_MUX( ADC_CHANNEL_IN3, 3 ); | 169 | case B13: return TO_MUX( ADC_CHANNEL_IN5, 2 ); |
166 | case B14: return TO_MUX( ADC_CHANNEL_IN4, 3 ); | 170 | case B14: return TO_MUX( ADC_CHANNEL_IN4, 3 ); |
167 | case B15: return TO_MUX( ADC_CHANNEL_IN5, 3 ); | 171 | case B15: return TO_MUX( ADC_CHANNEL_IN5, 3 ); |
168 | case C0: return TO_MUX( ADC_CHANNEL_IN6, 0 ); // Can also be ADC2 | 172 | case C0: return TO_MUX( ADC_CHANNEL_IN6, 0 ); // Can also be ADC2 |
@@ -189,11 +193,52 @@ __attribute__((weak)) adc_mux pinToMux(pin_t pin) { | |||
189 | case E15: return TO_MUX( ADC_CHANNEL_IN2, 3 ); | 193 | case E15: return TO_MUX( ADC_CHANNEL_IN2, 3 ); |
190 | case F2: return TO_MUX( ADC_CHANNEL_IN10, 0 ); // Can also be ADC2 | 194 | case F2: return TO_MUX( ADC_CHANNEL_IN10, 0 ); // Can also be ADC2 |
191 | case F4: return TO_MUX( ADC_CHANNEL_IN5, 0 ); | 195 | case F4: return TO_MUX( ADC_CHANNEL_IN5, 0 ); |
192 | #elif defined(STM32F4XX) // TODO: add all pins | 196 | #elif defined(STM32F4XX) |
193 | case A0: return TO_MUX( ADC_CHANNEL_IN0, 0 ); | 197 | case A0: return TO_MUX( ADC_CHANNEL_IN0, 0 ); |
194 | //case A1: return TO_MUX( ADC_CHANNEL_IN1, 0 ); | 198 | case A1: return TO_MUX( ADC_CHANNEL_IN1, 0 ); |
195 | #elif defined(STM32F1XX) // TODO: add all pins | 199 | case A2: return TO_MUX( ADC_CHANNEL_IN2, 0 ); |
200 | case A3: return TO_MUX( ADC_CHANNEL_IN3, 0 ); | ||
201 | case A4: return TO_MUX( ADC_CHANNEL_IN4, 0 ); | ||
202 | case A5: return TO_MUX( ADC_CHANNEL_IN5, 0 ); | ||
203 | case A6: return TO_MUX( ADC_CHANNEL_IN6, 0 ); | ||
204 | case A7: return TO_MUX( ADC_CHANNEL_IN7, 0 ); | ||
205 | case B0: return TO_MUX( ADC_CHANNEL_IN8, 0 ); | ||
206 | case B1: return TO_MUX( ADC_CHANNEL_IN9, 0 ); | ||
207 | case C0: return TO_MUX( ADC_CHANNEL_IN10, 0 ); | ||
208 | case C1: return TO_MUX( ADC_CHANNEL_IN11, 0 ); | ||
209 | case C2: return TO_MUX( ADC_CHANNEL_IN12, 0 ); | ||
210 | case C3: return TO_MUX( ADC_CHANNEL_IN13, 0 ); | ||
211 | case C4: return TO_MUX( ADC_CHANNEL_IN14, 0 ); | ||
212 | case C5: return TO_MUX( ADC_CHANNEL_IN15, 0 ); | ||
213 | # if STM32_ADC_USE_ADC3 | ||
214 | case F3: return TO_MUX( ADC_CHANNEL_IN9, 2 ); | ||
215 | case F4: return TO_MUX( ADC_CHANNEL_IN14, 2 ); | ||
216 | case F5: return TO_MUX( ADC_CHANNEL_IN15, 2 ); | ||
217 | case F6: return TO_MUX( ADC_CHANNEL_IN4, 2 ); | ||
218 | case F7: return TO_MUX( ADC_CHANNEL_IN5, 2 ); | ||
219 | case F8: return TO_MUX( ADC_CHANNEL_IN6, 2 ); | ||
220 | case F9: return TO_MUX( ADC_CHANNEL_IN7, 2 ); | ||
221 | case F10: return TO_MUX( ADC_CHANNEL_IN8, 2 ); | ||
222 | # endif | ||
223 | #elif defined(STM32F1XX) | ||
196 | case A0: return TO_MUX( ADC_CHANNEL_IN0, 0 ); | 224 | case A0: return TO_MUX( ADC_CHANNEL_IN0, 0 ); |
225 | case A1: return TO_MUX( ADC_CHANNEL_IN1, 0 ); | ||
226 | case A2: return TO_MUX( ADC_CHANNEL_IN2, 0 ); | ||
227 | case A3: return TO_MUX( ADC_CHANNEL_IN3, 0 ); | ||
228 | case A4: return TO_MUX( ADC_CHANNEL_IN4, 0 ); | ||
229 | case A5: return TO_MUX( ADC_CHANNEL_IN5, 0 ); | ||
230 | case A6: return TO_MUX( ADC_CHANNEL_IN6, 0 ); | ||
231 | case A7: return TO_MUX( ADC_CHANNEL_IN7, 0 ); | ||
232 | case B0: return TO_MUX( ADC_CHANNEL_IN8, 0 ); | ||
233 | case B1: return TO_MUX( ADC_CHANNEL_IN9, 0 ); | ||
234 | case C0: return TO_MUX( ADC_CHANNEL_IN10, 0 ); | ||
235 | case C1: return TO_MUX( ADC_CHANNEL_IN11, 0 ); | ||
236 | case C2: return TO_MUX( ADC_CHANNEL_IN12, 0 ); | ||
237 | case C3: return TO_MUX( ADC_CHANNEL_IN13, 0 ); | ||
238 | case C4: return TO_MUX( ADC_CHANNEL_IN14, 0 ); | ||
239 | case C5: return TO_MUX( ADC_CHANNEL_IN15, 0 ); | ||
240 | // STM32F103x[C-G] in 144-pin packages also have analog inputs on F6...F10, but they are on ADC3, and the | ||
241 | // ChibiOS ADC driver for STM32F1xx currently supports only ADC1, therefore these pins are not usable. | ||
197 | #endif | 242 | #endif |
198 | } | 243 | } |
199 | 244 | ||