1
0
Fork 0
mirror of https://github.com/betaflight/betaflight.git synced 2025-07-25 17:25:20 +03:00
betaflight/src/main/pg/adc.h
Dominic Clifton ea69db0400 Allow H7 targets to specify an ADC device for each channel and a default
ADC device in case of resource re-mapping conflict.

This allows a single ADC device to be used for all channels, which can
free up DMA channels.

For the H7 this makes much more sense because the TEMP and VREF channels
are ALWAYS on ADC3, so using ADC3 for other pins is optimal.

The previous behaviour was to use the first instance for that supported
the pin.  This behavour is only used when the configured default DMA
device does not support the pin.

e.g.

```

possible.

```

The above config would no-longer use ADC1 for anything, as ADC2 and ADC3
can satisfy all the ADC requirements.
2021-12-23 18:42:30 +01:00

53 lines
1.5 KiB
C

/*
* This file is part of Cleanflight and Betaflight.
*
* Cleanflight and Betaflight are free software. You can redistribute
* this software and/or modify this software under the terms of the
* GNU General Public License as published by the Free Software
* Foundation, either version 3 of the License, or (at your option)
* any later version.
*
* Cleanflight and Betaflight are distributed in the hope that they
* will be useful, but WITHOUT ANY WARRANTY; without even the implied
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this software.
*
* If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
#include <stdint.h>
#include <stdbool.h>
#include "pg/pg.h"
#include "drivers/adc.h"
#include "drivers/io_types.h"
#include "drivers/dma_reqmap.h"
typedef struct adcChannelConfig_t {
bool enabled;
ioTag_t ioTag;
#if defined(STM32H7)
int8_t device; // ADCDevice
#endif
} adcChannelConfig_t;
typedef struct adcConfig_s {
adcChannelConfig_t vbat;
adcChannelConfig_t rssi;
adcChannelConfig_t current;
adcChannelConfig_t external1;
int8_t device; // ADCDevice
uint16_t vrefIntCalibration;
uint16_t tempSensorCalibration1;
uint16_t tempSensorCalibration2;
int8_t dmaopt[ADCDEV_COUNT]; // One per ADCDEV_x
} adcConfig_t;
PG_DECLARE(adcConfig_t, adcConfig);