Skip to content

Commit

Permalink
Define a new RAW ADC type for hidden ADC channels for customize drive…
Browse files Browse the repository at this point in the history
…r use
  • Loading branch information
richardclli committed Nov 30, 2024
1 parent a052f8d commit 711e198
Show file tree
Hide file tree
Showing 4 changed files with 35 additions and 18 deletions.
24 changes: 12 additions & 12 deletions radio/src/targets/pl18/hal.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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 */ \
}
Expand Down
10 changes: 5 additions & 5 deletions radio/src/targets/pl18/nb4p_key_driver.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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);
Expand Down
8 changes: 8 additions & 0 deletions radio/util/hw_defs/hal_adc.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
MAX_POTS = 4
MAX_SLIDERS = 4
MAX_EXTS = 4
MAX_RAWS = 4


def eprint(*args, **kwargs):
Expand All @@ -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):
Expand Down Expand Up @@ -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,
Expand Down
11 changes: 10 additions & 1 deletion radio/util/hw_defs/hal_adc_inputs.jinja
Original file line number Diff line number Diff line change
Expand Up @@ -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[] = {
Expand Down

0 comments on commit 711e198

Please sign in to comment.