mirror of
https://github.com/betaflight/betaflight.git
synced 2025-07-15 12:25:20 +03:00
Configurable ADC
This commit is contained in:
parent
bad2b7a949
commit
7a57468c8c
13 changed files with 231 additions and 154 deletions
|
@ -34,60 +34,63 @@
|
|||
#include "adc.h"
|
||||
#include "adc_impl.h"
|
||||
|
||||
#ifndef ADC_INSTANCE
|
||||
#define ADC_INSTANCE ADC1
|
||||
#endif
|
||||
|
||||
#ifndef ADC1_DMA_STREAM
|
||||
#define ADC1_DMA_STREAM DMA2_Stream4
|
||||
#endif
|
||||
|
||||
const adcDevice_t adcHardware[] = {
|
||||
{ .ADCx = ADC1, .rccADC = RCC_APB2(ADC1), .DMAy_Streamx = ADC1_DMA_STREAM, .channel = DMA_Channel_0 },
|
||||
//{ .ADCx = ADC2, .rccADC = RCC_APB2(ADC2), .DMAy_Streamx = DMA2_Stream1, .channel = DMA_Channel_0 }
|
||||
#if !defined(STM32F411xE)
|
||||
{ .ADCx = ADC2, .rccADC = RCC_APB2(ADC2), .DMAy_Streamx = ADC2_DMA_STREAM, .channel = DMA_Channel_1 },
|
||||
{ .ADCx = ADC3, .rccADC = RCC_APB2(ADC3), .DMAy_Streamx = ADC3_DMA_STREAM, .channel = DMA_Channel_2 }
|
||||
#endif
|
||||
};
|
||||
|
||||
/* note these could be packed up for saving space */
|
||||
const adcTagMap_t adcTagMap[] = {
|
||||
/*
|
||||
{ DEFIO_TAG_E__PF3, ADC_Channel_9 },
|
||||
{ DEFIO_TAG_E__PF4, ADC_Channel_14 },
|
||||
{ DEFIO_TAG_E__PF5, ADC_Channel_15 },
|
||||
{ DEFIO_TAG_E__PF6, ADC_Channel_4 },
|
||||
{ DEFIO_TAG_E__PF7, ADC_Channel_5 },
|
||||
{ DEFIO_TAG_E__PF8, ADC_Channel_6 },
|
||||
{ DEFIO_TAG_E__PF9, ADC_Channel_7 },
|
||||
{ DEFIO_TAG_E__PF10, ADC_Channel_8 },
|
||||
{ DEFIO_TAG_E__PF3, ADC_DEVICES_3, ADC_Channel_9 },
|
||||
{ DEFIO_TAG_E__PF4, ADC_DEVICES_3, ADC_Channel_14 },
|
||||
{ DEFIO_TAG_E__PF5, ADC_DEVICES_3, ADC_Channel_15 },
|
||||
{ DEFIO_TAG_E__PF6, ADC_DEVICES_3, ADC_Channel_4 },
|
||||
{ DEFIO_TAG_E__PF7, ADC_DEVICES_3, ADC_Channel_5 },
|
||||
{ DEFIO_TAG_E__PF8, ADC_DEVICES_3, ADC_Channel_6 },
|
||||
{ DEFIO_TAG_E__PF9, ADC_DEVICES_3, ADC_Channel_7 },
|
||||
{ DEFIO_TAG_E__PF10,ADC_DEVICES_3, ADC_Channel_8 },
|
||||
*/
|
||||
{ DEFIO_TAG_E__PC0, ADC_Channel_10 },
|
||||
{ DEFIO_TAG_E__PC1, ADC_Channel_11 },
|
||||
{ DEFIO_TAG_E__PC2, ADC_Channel_12 },
|
||||
{ DEFIO_TAG_E__PC3, ADC_Channel_13 },
|
||||
{ DEFIO_TAG_E__PC4, ADC_Channel_14 },
|
||||
{ DEFIO_TAG_E__PC5, ADC_Channel_15 },
|
||||
{ DEFIO_TAG_E__PB0, ADC_Channel_8 },
|
||||
{ DEFIO_TAG_E__PB1, ADC_Channel_9 },
|
||||
{ DEFIO_TAG_E__PA0, ADC_Channel_0 },
|
||||
{ DEFIO_TAG_E__PA1, ADC_Channel_1 },
|
||||
{ DEFIO_TAG_E__PA2, ADC_Channel_2 },
|
||||
{ DEFIO_TAG_E__PA3, ADC_Channel_3 },
|
||||
{ DEFIO_TAG_E__PA4, ADC_Channel_4 },
|
||||
{ DEFIO_TAG_E__PA5, ADC_Channel_5 },
|
||||
{ DEFIO_TAG_E__PA6, ADC_Channel_6 },
|
||||
{ DEFIO_TAG_E__PA7, ADC_Channel_7 },
|
||||
#if defined(STM32F411xE)
|
||||
{ DEFIO_TAG_E__PC0, ADC_DEVICES_1, ADC_Channel_10 },
|
||||
{ DEFIO_TAG_E__PC1, ADC_DEVICES_1, ADC_Channel_11 },
|
||||
{ DEFIO_TAG_E__PC2, ADC_DEVICES_1, ADC_Channel_12 },
|
||||
{ DEFIO_TAG_E__PC3, ADC_DEVICES_1, ADC_Channel_13 },
|
||||
{ DEFIO_TAG_E__PC4, ADC_DEVICES_1, ADC_Channel_14 },
|
||||
{ DEFIO_TAG_E__PC5, ADC_DEVICES_1, ADC_Channel_15 },
|
||||
{ DEFIO_TAG_E__PB0, ADC_DEVICES_1, ADC_Channel_8 },
|
||||
{ DEFIO_TAG_E__PB1, ADC_DEVICES_1, ADC_Channel_9 },
|
||||
{ DEFIO_TAG_E__PA0, ADC_DEVICES_1, ADC_Channel_0 },
|
||||
{ DEFIO_TAG_E__PA1, ADC_DEVICES_1, ADC_Channel_1 },
|
||||
{ DEFIO_TAG_E__PA2, ADC_DEVICES_1, ADC_Channel_2 },
|
||||
{ DEFIO_TAG_E__PA3, ADC_DEVICES_1, ADC_Channel_3 },
|
||||
{ DEFIO_TAG_E__PA4, ADC_DEVICES_1, ADC_Channel_4 },
|
||||
{ DEFIO_TAG_E__PA5, ADC_DEVICES_1, ADC_Channel_5 },
|
||||
{ DEFIO_TAG_E__PA6, ADC_DEVICES_1, ADC_Channel_6 },
|
||||
{ DEFIO_TAG_E__PA7, ADC_DEVICES_1, ADC_Channel_7 },
|
||||
#else
|
||||
{ DEFIO_TAG_E__PC0, ADC_DEVICES_123, ADC_Channel_10 },
|
||||
{ DEFIO_TAG_E__PC1, ADC_DEVICES_123, ADC_Channel_11 },
|
||||
{ DEFIO_TAG_E__PC2, ADC_DEVICES_123, ADC_Channel_12 },
|
||||
{ DEFIO_TAG_E__PC3, ADC_DEVICES_123, ADC_Channel_13 },
|
||||
{ DEFIO_TAG_E__PC4, ADC_DEVICES_12, ADC_Channel_14 },
|
||||
{ DEFIO_TAG_E__PC5, ADC_DEVICES_12, ADC_Channel_15 },
|
||||
{ DEFIO_TAG_E__PB0, ADC_DEVICES_12, ADC_Channel_8 },
|
||||
{ DEFIO_TAG_E__PB1, ADC_DEVICES_12, ADC_Channel_9 },
|
||||
{ DEFIO_TAG_E__PA0, ADC_DEVICES_123, ADC_Channel_0 },
|
||||
{ DEFIO_TAG_E__PA1, ADC_DEVICES_123, ADC_Channel_1 },
|
||||
{ DEFIO_TAG_E__PA2, ADC_DEVICES_123, ADC_Channel_2 },
|
||||
{ DEFIO_TAG_E__PA3, ADC_DEVICES_123, ADC_Channel_3 },
|
||||
{ DEFIO_TAG_E__PA4, ADC_DEVICES_12, ADC_Channel_4 },
|
||||
{ DEFIO_TAG_E__PA5, ADC_DEVICES_12, ADC_Channel_5 },
|
||||
{ DEFIO_TAG_E__PA6, ADC_DEVICES_12, ADC_Channel_6 },
|
||||
{ DEFIO_TAG_E__PA7, ADC_DEVICES_12, ADC_Channel_7 },
|
||||
#endif
|
||||
};
|
||||
|
||||
ADCDevice adcDeviceByInstance(ADC_TypeDef *instance)
|
||||
{
|
||||
if (instance == ADC1)
|
||||
return ADCDEV_1;
|
||||
/*
|
||||
if (instance == ADC2) // TODO add ADC2 and 3
|
||||
return ADCDEV_2;
|
||||
*/
|
||||
return ADCINVALID;
|
||||
}
|
||||
|
||||
void adcInit(const adcConfig_t *config)
|
||||
{
|
||||
ADC_InitTypeDef ADC_InitStructure;
|
||||
|
@ -114,7 +117,7 @@ void adcInit(const adcConfig_t *config)
|
|||
adcOperatingConfig[ADC_CURRENT].tag = config->current.ioTag; //CURRENT_METER_ADC_CHANNEL;
|
||||
}
|
||||
|
||||
ADCDevice device = adcDeviceByInstance(ADC_INSTANCE);
|
||||
ADCDevice device = ADC_CFG_TO_DEV(config->device);
|
||||
if (device == ADCINVALID)
|
||||
return;
|
||||
|
||||
|
@ -122,8 +125,9 @@ void adcInit(const adcConfig_t *config)
|
|||
|
||||
bool adcActive = false;
|
||||
for (int i = 0; i < ADC_CHANNEL_COUNT; i++) {
|
||||
if (!adcOperatingConfig[i].tag)
|
||||
if (!adcVerifyPin(adcOperatingConfig[i].tag, device)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
adcActive = true;
|
||||
IOInit(IOGetByTag(adcOperatingConfig[i].tag), OWNER_ADC_BATT + i, 0);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue