From 9fb0644b0979a252db74afe2b905d2e940a3e0b3 Mon Sep 17 00:00:00 2001 From: Rocketct Date: Fri, 1 Dec 2023 15:26:22 +0100 Subject: [PATCH] fix ADC management for pure analog on GIGA --- cores/arduino/Arduino.h | 1 + variants/GIGA/pins_arduino.h | 2 +- variants/GIGA/pure_analog_pins.cpp | 15 ++++++++------- variants/GIGA/variant.cpp | 7 +++++-- 4 files changed, 15 insertions(+), 10 deletions(-) diff --git a/cores/arduino/Arduino.h b/cores/arduino/Arduino.h index 5dddc6e32..4095321e5 100644 --- a/cores/arduino/Arduino.h +++ b/cores/arduino/Arduino.h @@ -84,6 +84,7 @@ typedef struct _AnalogPinDescription AnalogPinDescription; extern PinDescription g_APinDescription[]; extern AnalogPinDescription g_AAnalogPinDescription[]; extern AnalogPinDescription g_AAnalogOutPinDescription[]; +extern AnalogPinDescription g_pureAAnalogPinDescription[]; #ifdef ANALOG_CONFIG #include "hal/analogin_api.h" diff --git a/variants/GIGA/pins_arduino.h b/variants/GIGA/pins_arduino.h index 740dfdc98..0a841debf 100644 --- a/variants/GIGA/pins_arduino.h +++ b/variants/GIGA/pins_arduino.h @@ -20,7 +20,7 @@ extern PinName digitalPinToPinName(pin_size_t P); // ---- #define PINS_COUNT (PINCOUNT_fn()) #define NUM_DIGITAL_PINS (103u) -#define NUM_ANALOG_INPUTS (14u) +#define NUM_ANALOG_INPUTS (10u) // these are analog pins that can also be used as digital #define NUM_ANALOG_OUTPUTS (2u) // LEDs diff --git a/variants/GIGA/pure_analog_pins.cpp b/variants/GIGA/pure_analog_pins.cpp index 5d17ddd75..40fc38db9 100644 --- a/variants/GIGA/pure_analog_pins.cpp +++ b/variants/GIGA/pure_analog_pins.cpp @@ -2,19 +2,20 @@ #include "AnalogIn.h" #include "pinDefinitions.h" -PureAnalogPin A8(8); -PureAnalogPin A9(9); -PureAnalogPin A10(10); -PureAnalogPin A11(11); +PureAnalogPin A8(0); +PureAnalogPin A9(1); +PureAnalogPin A10(2); +PureAnalogPin A11(3); + int getAnalogReadResolution(); int analogRead(PureAnalogPin pin) { - mbed::AnalogIn* adc = g_AAnalogPinDescription[pin.get()].adc; - auto name = g_AAnalogPinDescription[pin.get()].name; + mbed::AnalogIn* adc = g_pureAAnalogPinDescription[pin.get()].adc; + auto name = g_pureAAnalogPinDescription[pin.get()].name; if (adc == NULL) { adc = new mbed::AnalogIn(name); - g_AAnalogPinDescription[pin.get()].adc = adc; + g_pureAAnalogPinDescription[pin.get()].adc = adc; } return (adc->read_u16() >> (16 - getAnalogReadResolution())); } diff --git a/variants/GIGA/variant.cpp b/variants/GIGA/variant.cpp index 31038f320..ae8cae2d9 100644 --- a/variants/GIGA/variant.cpp +++ b/variants/GIGA/variant.cpp @@ -12,12 +12,15 @@ AnalogPinDescription g_AAnalogPinDescription[] = { { PC_2, NULL }, // A5 ADC1_INP12 { PC_0, NULL }, // A6 ADC1_INP10 { PA_0, NULL }, // A7 ADC1_INP16 + { PA_4, NULL }, // A12 DAC1_OUT1 + { PA_5, NULL }, // A13 DAC1_OUT2 +}; + +AnalogPinDescription g_pureAAnalogPinDescription[] = { { PC_2C, NULL }, // A8 ADC3_INP0 { PC_3C, NULL }, // A9 ADC3_INP1 { PA_1C, NULL }, // A10 ADC2_INP1 { PA_0C, NULL }, // A11 ADC2_INP0 - { PA_4, NULL }, // A12 DAC1_OUT1 - { PA_5, NULL }, // A13 DAC1_OUT2 }; AnalogPinDescription g_AAnalogOutPinDescription[] = {