Skip to content
Permalink

Comparing changes

This is a direct comparison between two commits made in this repository or its related repositories. View the default comparison for this range or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: arduino/ArduinoCore-zephyr
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: 818bbea4b08e92096f6f09c85e1a14d0d66134bd
Choose a base ref
..
head repository: arduino/ArduinoCore-zephyr
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: 1387f49c44d3251903e970bacbaa89b1546551aa
Choose a head ref
Showing with 39 additions and 16 deletions.
  1. +3 −0 cores/arduino/Arduino.h
  2. +22 −2 cores/arduino/zephyrCommon.cpp
  3. +14 −14 loader/boards/arduino_giga_r1_m7.overlay
3 changes: 3 additions & 0 deletions cores/arduino/Arduino.h
Original file line number Diff line number Diff line change
@@ -101,6 +101,9 @@ enum digitalPins {
enum analogPins { DT_FOREACH_PROP_ELEM(DT_PATH(zephyr_user),
adc_pin_gpios, AN_ENUMS) };

// We provide analogReadResolution APIs
void analogReadResolution(int bits);

#endif

#ifdef CONFIG_DAC
24 changes: 22 additions & 2 deletions cores/arduino/zephyrCommon.cpp
Original file line number Diff line number Diff line change
@@ -368,10 +368,24 @@ void analogReference(uint8_t mode)
}
}

// Note: We can not update the arduino_adc structure as it is read only...
static int read_resolution = 10;

void analogReadResolution(int bits)
{
read_resolution = bits;
}

int analogReadResolution()
{
return read_resolution;
}


int analogRead(pin_size_t pinNumber)
{
int err;
int16_t buf;
uint16_t buf;
struct adc_sequence seq = { .buffer = &buf, .buffer_size = sizeof(buf) };
size_t idx = analog_pin_index(pinNumber);

@@ -401,7 +415,13 @@ int analogRead(pin_size_t pinNumber)
return err;
}

return buf;
/*
* If necessary map the return value to the
* number of bits the user has asked for
*/
if (read_resolution == seq.resolution) return buf;
if (read_resolution < seq.resolution) return buf >> (seq.resolution - read_resolution);
return buf << (read_resolution - seq.resolution) ;
}

#endif
28 changes: 14 additions & 14 deletions loader/boards/arduino_giga_r1_m7.overlay
Original file line number Diff line number Diff line change
@@ -206,85 +206,85 @@
zephyr,gain = "ADC_GAIN_1";
zephyr,reference = "ADC_REF_INTERNAL";
zephyr,acquisition-time = <ADC_ACQ_TIME_MAX>;
zephyr,resolution = <12>;
zephyr,resolution = <16>;
};
channel@8 {
reg = <8>;
zephyr,gain = "ADC_GAIN_1";
zephyr,reference = "ADC_REF_INTERNAL";
zephyr,acquisition-time = <ADC_ACQ_TIME_MAX>;
zephyr,resolution = <12>;
zephyr,resolution = <16>;
};
channel@9 {
reg = <9>;
zephyr,gain = "ADC_GAIN_1";
zephyr,reference = "ADC_REF_INTERNAL";
zephyr,acquisition-time = <ADC_ACQ_TIME_MAX>;
zephyr,resolution = <12>;
zephyr,resolution = <16>;
};
channel@5 {
reg = <5>;
zephyr,gain = "ADC_GAIN_1";
zephyr,reference = "ADC_REF_INTERNAL";
zephyr,acquisition-time = <ADC_ACQ_TIME_MAX>;
zephyr,resolution = <12>;
zephyr,resolution = <16>;
};
channel@d {
reg = <13>;
zephyr,gain = "ADC_GAIN_1";
zephyr,reference = "ADC_REF_INTERNAL";
zephyr,acquisition-time = <ADC_ACQ_TIME_MAX>;
zephyr,resolution = <12>;
zephyr,resolution = <16>;
};
channel@c {
reg = <12>;
zephyr,gain = "ADC_GAIN_1";
zephyr,reference = "ADC_REF_INTERNAL";
zephyr,acquisition-time = <ADC_ACQ_TIME_MAX>;
zephyr,resolution = <12>;
zephyr,resolution = <16>;
};
channel@a {
reg = <10>;
zephyr,gain = "ADC_GAIN_1";
zephyr,reference = "ADC_REF_INTERNAL";
zephyr,acquisition-time = <ADC_ACQ_TIME_MAX>;
zephyr,resolution = <12>;
zephyr,resolution = <16>;
};
channel@10 {
reg = <16>;
zephyr,gain = "ADC_GAIN_1";
zephyr,reference = "ADC_REF_INTERNAL";
zephyr,acquisition-time = <ADC_ACQ_TIME_MAX>;
zephyr,resolution = <12>;
zephyr,resolution = <16>;
};
channel@12 {
reg = <18>;
zephyr,gain = "ADC_GAIN_1";
zephyr,reference = "ADC_REF_INTERNAL";
zephyr,acquisition-time = <ADC_ACQ_TIME_MAX>;
zephyr,resolution = <12>;
zephyr,resolution = <16>;
};
channel@13 {
reg = <19>;
zephyr,gain = "ADC_GAIN_1";
zephyr,reference = "ADC_REF_INTERNAL";
zephyr,acquisition-time = <ADC_ACQ_TIME_MAX>;
zephyr,resolution = <12>;
zephyr,resolution = <16>;
};
/* PA0_C and PA1_C */
channel@0 {
reg = <0>;
zephyr,gain = "ADC_GAIN_1";
zephyr,reference = "ADC_REF_INTERNAL";
zephyr,acquisition-time = <ADC_ACQ_TIME_MAX>;
zephyr,resolution = <12>;
zephyr,resolution = <16>;
};
channel@1 {
reg = <1>;
zephyr,gain = "ADC_GAIN_1";
zephyr,reference = "ADC_REF_INTERNAL";
zephyr,acquisition-time = <ADC_ACQ_TIME_MAX>;
zephyr,resolution = <12>;
zephyr,resolution = <16>;
};
};

@@ -304,14 +304,14 @@
zephyr,gain = "ADC_GAIN_1";
zephyr,reference = "ADC_REF_INTERNAL";
zephyr,acquisition-time = <ADC_ACQ_TIME_MAX>;
zephyr,resolution = <12>;
zephyr,resolution = <16>;
};
channel@1 {
reg = <1>;
zephyr,gain = "ADC_GAIN_1";
zephyr,reference = "ADC_REF_INTERNAL";
zephyr,acquisition-time = <ADC_ACQ_TIME_MAX>;
zephyr,resolution = <12>;
zephyr,resolution = <16>;
};
};