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 | ||
