From 711e198aecf1b466acccc56925a5a8d2cedca800 Mon Sep 17 00:00:00 2001 From: Richard Li Date: Fri, 29 Nov 2024 15:54:48 +0800 Subject: [PATCH] Define a new RAW ADC type for hidden ADC channels for customize driver use --- radio/src/targets/pl18/hal.h | 24 +++++++++++----------- radio/src/targets/pl18/nb4p_key_driver.cpp | 10 ++++----- radio/util/hw_defs/hal_adc.py | 8 ++++++++ radio/util/hw_defs/hal_adc_inputs.jinja | 11 +++++++++- 4 files changed, 35 insertions(+), 18 deletions(-) diff --git a/radio/src/targets/pl18/hal.h b/radio/src/targets/pl18/hal.h index 487ec5caff6..f270ed22444 100644 --- a/radio/src/targets/pl18/hal.h +++ b/radio/src/targets/pl18/hal.h @@ -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 */ \ } diff --git a/radio/src/targets/pl18/nb4p_key_driver.cpp b/radio/src/targets/pl18/nb4p_key_driver.cpp index 9a76ee3f9f6..0e55d173b9c 100644 --- a/radio/src/targets/pl18/nb4p_key_driver.cpp +++ b/radio/src/targets/pl18/nb4p_key_driver.cpp @@ -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); diff --git a/radio/util/hw_defs/hal_adc.py b/radio/util/hw_defs/hal_adc.py index c3de51f2909..2dd87b1a369 100644 --- a/radio/util/hw_defs/hal_adc.py +++ b/radio/util/hw_defs/hal_adc.py @@ -3,6 +3,7 @@ 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, diff --git a/radio/util/hw_defs/hal_adc_inputs.jinja b/radio/util/hw_defs/hal_adc_inputs.jinja index 19a860d0346..26d15829250 100644 --- a/radio/util/hw_defs/hal_adc_inputs.jinja +++ b/radio/util/hw_defs/hal_adc_inputs.jinja @@ -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[] = {