1
0
Fork 0
mirror of https://github.com/betaflight/betaflight.git synced 2025-07-24 00:35:39 +03:00

Remove need to specify ADC Channel (only 1 per pin).

This commit is contained in:
blckmn 2016-06-19 21:45:03 +10:00 committed by blckmn
parent 7e6fb8db65
commit 71353066b8
37 changed files with 160 additions and 294 deletions

View file

@ -23,6 +23,7 @@
#include "system.h"
#include "io.h"
#include "io_impl.h"
#include "rcc.h"
#include "sensors/sensors.h" // FIXME dependency into the main code
@ -38,8 +39,38 @@
#endif
const adcDevice_t adcHardware[] = {
{ .ADCx = ADC1, .rccADC = RCC_APB2(ADC1), .rccDMA = RCC_AHB1(DMA2), .DMAy_Streamx = DMA2_Stream4 },
//{ .ADCx = ADC2, .rccADC = RCC_APB2(ADC2), .rccDMA = RCC_AHB1(DMA2), .DMAy_Streamx = DMA2_Stream1 }
{ .ADCx = ADC1, .rccADC = RCC_APB2(ADC1), .rccDMA = RCC_AHB1(DMA2), .DMAy_Streamx = DMA2_Stream4, .channel = DMA_Channel_0 },
//{ .ADCx = ADC2, .rccADC = RCC_APB2(ADC2), .rccDMA = RCC_AHB1(DMA2), .DMAy_Streamx = DMA2_Stream1, .channel = DMA_Channel_0 }
};
/* note these could be packed up for saving space */
const adcPinMap_t adcPinMap[] = {
/*
{ .pin = DEFIO_TAG_E__PF3, .channel = ADC_Channel_9 },
{ .pin = DEFIO_TAG_E__PF4, .channel = ADC_Channel_14 },
{ .pin = DEFIO_TAG_E__PF5, .channel = ADC_Channel_15 },
{ .pin = DEFIO_TAG_E__PF6, .channel = ADC_Channel_4 },
{ .pin = DEFIO_TAG_E__PF7, .channel = ADC_Channel_5 },
{ .pin = DEFIO_TAG_E__PF8, .channel = ADC_Channel_6 },
{ .pin = DEFIO_TAG_E__PF9, .channel = ADC_Channel_7 },
{ .pin = DEFIO_TAG_E__PF10, .channel = ADC_Channel_8 },
*/
{ .pin = DEFIO_TAG_E__PC0, .channel = ADC_Channel_10 },
{ .pin = DEFIO_TAG_E__PC1, .channel = ADC_Channel_11 },
{ .pin = DEFIO_TAG_E__PC2, .channel = ADC_Channel_12 },
{ .pin = DEFIO_TAG_E__PC3, .channel = ADC_Channel_13 },
{ .pin = DEFIO_TAG_E__PC4, .channel = ADC_Channel_14 },
{ .pin = DEFIO_TAG_E__PC5, .channel = ADC_Channel_15 },
{ .pin = DEFIO_TAG_E__PB0, .channel = ADC_Channel_8 },
{ .pin = DEFIO_TAG_E__PB1, .channel = ADC_Channel_9 },
{ .pin = DEFIO_TAG_E__PA0, .channel = ADC_Channel_0 },
{ .pin = DEFIO_TAG_E__PA1, .channel = ADC_Channel_1 },
{ .pin = DEFIO_TAG_E__PA2, .channel = ADC_Channel_2 },
{ .pin = DEFIO_TAG_E__PA3, .channel = ADC_Channel_3 },
{ .pin = DEFIO_TAG_E__PA4, .channel = ADC_Channel_4 },
{ .pin = DEFIO_TAG_E__PA5, .channel = ADC_Channel_5 },
{ .pin = DEFIO_TAG_E__PA6, .channel = ADC_Channel_6 },
{ .pin = DEFIO_TAG_E__PA7, .channel = ADC_Channel_7 },
};
ADCDevice adcDeviceByInstance(ADC_TypeDef *instance)
@ -47,11 +78,12 @@ ADCDevice adcDeviceByInstance(ADC_TypeDef *instance)
if (instance == ADC1)
return ADCDEV_1;
/*
if (instance == ADC2)
if (instance == ADC2) // TODO add ADC2 and 3
return ADCDEV_2;
*/
return ADCINVALID;
}
void adcInit(drv_adc_config_t *init)
{
ADC_InitTypeDef ADC_InitStructure;
@ -70,7 +102,7 @@ void adcInit(drv_adc_config_t *init)
if (init->enableVBat) {
IOInit(IOGetByTag(IO_TAG(VBAT_ADC_PIN)), OWNER_SYSTEM, RESOURCE_ADC);
IOConfigGPIO(IOGetByTag(IO_TAG(VBAT_ADC_PIN)), IO_CONFIG(GPIO_Mode_AN, 0, GPIO_OType_OD, GPIO_PuPd_NOPULL));
adcConfig[ADC_BATTERY].adcChannel = VBAT_ADC_CHANNEL;
adcConfig[ADC_BATTERY].adcChannel = adcChannelByPin(IO_TAG(VBAT_ADC_PIN)); //VBAT_ADC_CHANNEL;
adcConfig[ADC_BATTERY].dmaIndex = configuredAdcChannels++;
adcConfig[ADC_BATTERY].enabled = true;
adcConfig[ADC_BATTERY].sampleTime = ADC_SampleTime_480Cycles;
@ -81,7 +113,7 @@ void adcInit(drv_adc_config_t *init)
if (init->enableExternal1) {
IOInit(IOGetByTag(IO_TAG(EXTERNAL1_ADC_PIN)), OWNER_SYSTEM, RESOURCE_ADC);
IOConfigGPIO(IOGetByTag(IO_TAG(EXTERNAL1_ADC_PIN)), IO_CONFIG(GPIO_Mode_AN, 0, GPIO_OType_OD, GPIO_PuPd_NOPULL));
adcConfig[ADC_EXTERNAL1].adcChannel = EXTERNAL1_ADC_CHANNEL;
adcConfig[ADC_EXTERNAL1].adcChannel = adcChannelByPin(IO_TAG(EXTERNAL1_ADC_PIN)); //EXTERNAL1_ADC_CHANNEL;
adcConfig[ADC_EXTERNAL1].dmaIndex = configuredAdcChannels++;
adcConfig[ADC_EXTERNAL1].enabled = true;
adcConfig[ADC_EXTERNAL1].sampleTime = ADC_SampleTime_480Cycles;
@ -92,7 +124,7 @@ void adcInit(drv_adc_config_t *init)
if (init->enableRSSI) {
IOInit(IOGetByTag(IO_TAG(RSSI_ADC_PIN)), OWNER_SYSTEM, RESOURCE_ADC);
IOConfigGPIO(IOGetByTag(IO_TAG(RSSI_ADC_PIN)), IO_CONFIG(GPIO_Mode_AN, 0, GPIO_OType_OD, GPIO_PuPd_NOPULL));
adcConfig[ADC_RSSI].adcChannel = RSSI_ADC_CHANNEL;
adcConfig[ADC_RSSI].adcChannel = adcChannelByPin(IO_TAG(RSSI_ADC_PIN)); //RSSI_ADC_CHANNEL;
adcConfig[ADC_RSSI].dmaIndex = configuredAdcChannels++;
adcConfig[ADC_RSSI].enabled = true;
adcConfig[ADC_RSSI].sampleTime = ADC_SampleTime_480Cycles;
@ -103,7 +135,7 @@ void adcInit(drv_adc_config_t *init)
if (init->enableCurrentMeter) {
IOInit(IOGetByTag(IO_TAG(CURRENT_METER_ADC_PIN)), OWNER_SYSTEM, RESOURCE_ADC);
IOConfigGPIO(IOGetByTag(IO_TAG(CURRENT_METER_ADC_PIN)), IO_CONFIG(GPIO_Mode_AN, 0, GPIO_OType_OD, GPIO_PuPd_NOPULL));
adcConfig[ADC_CURRENT].adcChannel = CURRENT_METER_ADC_CHANNEL;
adcConfig[ADC_CURRENT].adcChannel = adcChannelByPin(IO_TAG(CURRENT_METER_ADC_PIN)); //CURRENT_METER_ADC_CHANNEL;
adcConfig[ADC_CURRENT].dmaIndex = configuredAdcChannels++;
adcConfig[ADC_CURRENT].enabled = true;
adcConfig[ADC_CURRENT].sampleTime = ADC_SampleTime_480Cycles;
@ -125,7 +157,7 @@ void adcInit(drv_adc_config_t *init)
DMA_StructInit(&DMA_InitStructure);
DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&adc.ADCx->DR;
DMA_InitStructure.DMA_Channel = DMA_Channel_0;
DMA_InitStructure.DMA_Channel = adc.channel;
DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)adcValues;
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory;
DMA_InitStructure.DMA_BufferSize = configuredAdcChannels;