Define a new RAW ADC type for hidden ADC channels for customize driver use

This commit is contained in:
Richard Li
2025-01-24 19:00:12 +01:00
committed by Malte Langermann
parent a8b3525cd6
commit 6db25b324b
4 changed files with 35 additions and 18 deletions
+12 -12
View File
@@ -78,24 +78,24 @@
#define ADC_GPIO_PIN_STICK_ST LL_GPIO_PIN_2 // PA.02
#define ADC_CHANNEL_STICK_TH LL_ADC_CHANNEL_3 // ADC123_IN3 -> ADC1_IN3
#define ADC_CHANNEL_STICK_ST LL_ADC_CHANNEL_2 // ADC123_IN2 -> ADC1_IN2
#define ADC_GPIO_EXT1 GPIOC
#define ADC_GPIO_RAW1 GPIOC
#define ADC_GPIO_PIN_POT1 LL_GPIO_PIN_2 // PC.02
#define ADC_GPIO_PIN_POT2 LL_GPIO_PIN_7 // PA.07
#define ADC_GPIO_PIN_EXT1 LL_GPIO_PIN_1 // PC.01 (SW1)
#define ADC_GPIO_PIN_EXT2 LL_GPIO_PIN_0 // PC.00 (SW2 SW3)
#define ADC_GPIO_PIN_EXT3 LL_GPIO_PIN_6 // PA.06 (TR1)
#define ADC_GPIO_PIN_EXT4 LL_GPIO_PIN_4 // PC.04 (TR2)
#define ADC_GPIO_PIN_RAW1 LL_GPIO_PIN_1 // PC.01 (SW1)
#define ADC_GPIO_PIN_RAW2 LL_GPIO_PIN_0 // PC.00 (SW2 SW3)
#define ADC_GPIO_PIN_RAW3 LL_GPIO_PIN_6 // PA.06 (TR1)
#define ADC_GPIO_PIN_RAW4 LL_GPIO_PIN_4 // PC.04 (TR2)
#define ADC_GPIO_PIN_BATT LL_GPIO_PIN_5 // PC.05
#define ADC_CHANNEL_POT1 LL_ADC_CHANNEL_12 // ADC123_IN12 -> ADC1_IN12
#define ADC_CHANNEL_POT2 LL_ADC_CHANNEL_7 // ADC12_IN7 -> ADC1_IN7
#define ADC_CHANNEL_EXT1 LL_ADC_CHANNEL_11 // ADC123_IN11 -> ADC1_IN11
#define ADC_CHANNEL_EXT2 LL_ADC_CHANNEL_10 // ADC123_IN10 -> ADC1_IN10
#define ADC_CHANNEL_EXT3 LL_ADC_CHANNEL_6 // ADC12_IN6 -> ADC1_IN6
#define ADC_CHANNEL_EXT4 LL_ADC_CHANNEL_14 // ADC12_IN14 -> ADC1_IN14
#define ADC_CHANNEL_RAW1 LL_ADC_CHANNEL_11 // ADC123_IN11 -> ADC1_IN11
#define ADC_CHANNEL_RAW2 LL_ADC_CHANNEL_10 // ADC123_IN10 -> ADC1_IN10
#define ADC_CHANNEL_RAW3 LL_ADC_CHANNEL_6 // ADC12_IN6 -> ADC1_IN6
#define ADC_CHANNEL_RAW4 LL_ADC_CHANNEL_14 // ADC12_IN14 -> ADC1_IN14
#define ADC_CHANNEL_BATT LL_ADC_CHANNEL_15 // ADC12_IN15 -> ADC1_IN15
#define ADC_CHANNEL_RTC_BAT LL_ADC_CHANNEL_VBAT // ADC1_IN18
#define ADC_GPIOA_PINS (ADC_GPIO_PIN_STICK_TH | ADC_GPIO_PIN_STICK_ST | ADC_GPIO_PIN_POT2 | ADC_GPIO_PIN_EXT3)
#define ADC_GPIOC_PINS (ADC_GPIO_PIN_EXT1 | ADC_GPIO_PIN_EXT2 | ADC_GPIO_PIN_POT1 | ADC_GPIO_PIN_EXT4 | ADC_GPIO_PIN_BATT)
#define ADC_GPIOA_PINS (ADC_GPIO_PIN_STICK_TH | ADC_GPIO_PIN_STICK_ST | ADC_GPIO_PIN_POT2 | ADC_GPIO_PIN_RAW3)
#define ADC_GPIOC_PINS (ADC_GPIO_PIN_RAW1 | ADC_GPIO_PIN_RAW2 | ADC_GPIO_PIN_POT1 | ADC_GPIO_PIN_RAW4 | ADC_GPIO_PIN_BATT)
#define ADC_MAIN ADC1
#define ADC_SAMPTIME LL_ADC_SAMPLINGTIME_28CYCLES
@@ -110,7 +110,7 @@
#define ADC_DIRECTION { \
0,0, /* gimbals */ \
0,0, /* pots */ \
0,0,0,0, /* ext1-4 */ \
0,0,0,0, /* raw1-4 */ \
0, /* vbat */ \
0 /* rtc_bat */ \
}
+5 -5
View File
@@ -59,11 +59,11 @@ void keysInit()
LL_GPIO_InitTypeDef pinInit;
LL_GPIO_StructInit(&pinInit);
pinInit.Pin = ADC_GPIO_PIN_EXT1;
pinInit.Pin = ADC_GPIO_PIN_RAW1;
pinInit.Mode = LL_GPIO_MODE_ANALOG;
pinInit.Pull = LL_GPIO_PULL_NO;
stm32_gpio_enable_clock(ADC_GPIO_EXT1);
LL_GPIO_Init(ADC_GPIO_EXT1, &pinInit);
stm32_gpio_enable_clock(ADC_GPIO_RAW1);
LL_GPIO_Init(ADC_GPIO_RAW1, &pinInit);
// Init ADC clock
uint32_t adc_idx = (((uint32_t) ADC_MAIN) - ADC1_BASE) / 0x100UL;
@@ -102,8 +102,8 @@ void keysInit()
uint16_t _adcRead()
{
// Configure ADC channel
LL_ADC_REG_SetSequencerRanks(ADC_MAIN, LL_ADC_REG_RANK_1, ADC_CHANNEL_EXT1);
LL_ADC_SetChannelSamplingTime(ADC_MAIN, ADC_CHANNEL_EXT1, LL_ADC_SAMPLINGTIME_3CYCLES);
LL_ADC_REG_SetSequencerRanks(ADC_MAIN, LL_ADC_REG_RANK_1, ADC_CHANNEL_RAW1);
LL_ADC_SetChannelSamplingTime(ADC_MAIN, ADC_CHANNEL_RAW1, LL_ADC_SAMPLINGTIME_3CYCLES);
// Start ADC conversion
LL_ADC_REG_StartConversionSWStart(ADC_MAIN);
+8
View File
@@ -3,6 +3,7 @@ from pot_config import pot_cfg_by_target
MAX_POTS = 4
MAX_SLIDERS = 4
MAX_EXTS = 4
MAX_RAWS = 4
def eprint(*args, **kwargs):
@@ -14,6 +15,7 @@ class ADCInput:
TYPE_STICK = 'STICK'
TYPE_FLEX = 'FLEX'
TYPE_SWITCH = 'SWITCH'
TYPE_RAW = 'RAW'
# TYPE_BATT = 'BATT'
def __init__(self, name, adc_input_type, adc, gpio, pin, channel):
@@ -76,6 +78,12 @@ class ADCInputParser:
'suffix': 'EXT{}',
'name': 'EXT{}',
},
{
'range': range(1, MAX_RAWS + 1),
'type': ADCInput.TYPE_RAW,
'suffix': 'RAW{}',
'name': 'RAW{}',
},
{
'range': range(1, 2 + 1),
'type': ADCInput.TYPE_FLEX,
+10 -1
View File
@@ -21,7 +21,16 @@ static const etx_hal_adc_input_t _flex_inputs[] = {
{% endfor %}
};
{% set vbat_offset = flex_offset + n_flex %}
{% set raw_offset = flex_offset + n_flex %}
{% set raw_inputs = adc_inputs.inputs | selectattr('type', '==', 'RAW') | list %}
{% set n_raw = raw_inputs | count %}
static const etx_hal_adc_input_t _raw_inputs[] = {
{% for input in raw_inputs %}
{ "{{ input.name }}", "{{ input.label }}", "{{ input.short_label }}" },
{% endfor %}
};
{% set vbat_offset = raw_offset + n_raw %}
{% set vbat_inputs = adc_inputs.inputs | selectattr('type', '==', 'VBAT') | list %}
{% set n_vbat = vbat_inputs | count %}
static const etx_hal_adc_input_t _vbat_inputs[] = {