Skip to content

Commit ab684ac

Browse files
authored
Merge pull request #39 from KurtE/arduino_analogReadResolution
Implement analogReadResolution
2 parents 205bd78 + 8064e6a commit ab684ac

File tree

3 files changed

+39
-16
lines changed

3 files changed

+39
-16
lines changed

Diff for: cores/arduino/Arduino.h

+3
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,9 @@ enum digitalPins {
101101
enum analogPins { DT_FOREACH_PROP_ELEM(DT_PATH(zephyr_user),
102102
adc_pin_gpios, AN_ENUMS) };
103103

104+
// We provide analogReadResolution APIs
105+
void analogReadResolution(int bits);
106+
104107
#endif
105108

106109
#ifdef CONFIG_DAC

Diff for: cores/arduino/zephyrCommon.cpp

+22-2
Original file line numberDiff line numberDiff line change
@@ -368,10 +368,24 @@ void analogReference(uint8_t mode)
368368
}
369369
}
370370

371+
// Note: We can not update the arduino_adc structure as it is read only...
372+
static int read_resolution = 10;
373+
374+
void analogReadResolution(int bits)
375+
{
376+
read_resolution = bits;
377+
}
378+
379+
int analogReadResolution()
380+
{
381+
return read_resolution;
382+
}
383+
384+
371385
int analogRead(pin_size_t pinNumber)
372386
{
373387
int err;
374-
int16_t buf;
388+
uint16_t buf;
375389
struct adc_sequence seq = { .buffer = &buf, .buffer_size = sizeof(buf) };
376390
size_t idx = analog_pin_index(pinNumber);
377391

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

404-
return buf;
418+
/*
419+
* If necessary map the return value to the
420+
* number of bits the user has asked for
421+
*/
422+
if (read_resolution == seq.resolution) return buf;
423+
if (read_resolution < seq.resolution) return buf >> (seq.resolution - read_resolution);
424+
return buf << (read_resolution - seq.resolution) ;
405425
}
406426

407427
#endif

Diff for: loader/boards/arduino_giga_r1_m7.overlay

+14-14
Original file line numberDiff line numberDiff line change
@@ -206,85 +206,85 @@
206206
zephyr,gain = "ADC_GAIN_1";
207207
zephyr,reference = "ADC_REF_INTERNAL";
208208
zephyr,acquisition-time = <ADC_ACQ_TIME_MAX>;
209-
zephyr,resolution = <12>;
209+
zephyr,resolution = <16>;
210210
};
211211
channel@8 {
212212
reg = <8>;
213213
zephyr,gain = "ADC_GAIN_1";
214214
zephyr,reference = "ADC_REF_INTERNAL";
215215
zephyr,acquisition-time = <ADC_ACQ_TIME_MAX>;
216-
zephyr,resolution = <12>;
216+
zephyr,resolution = <16>;
217217
};
218218
channel@9 {
219219
reg = <9>;
220220
zephyr,gain = "ADC_GAIN_1";
221221
zephyr,reference = "ADC_REF_INTERNAL";
222222
zephyr,acquisition-time = <ADC_ACQ_TIME_MAX>;
223-
zephyr,resolution = <12>;
223+
zephyr,resolution = <16>;
224224
};
225225
channel@5 {
226226
reg = <5>;
227227
zephyr,gain = "ADC_GAIN_1";
228228
zephyr,reference = "ADC_REF_INTERNAL";
229229
zephyr,acquisition-time = <ADC_ACQ_TIME_MAX>;
230-
zephyr,resolution = <12>;
230+
zephyr,resolution = <16>;
231231
};
232232
channel@d {
233233
reg = <13>;
234234
zephyr,gain = "ADC_GAIN_1";
235235
zephyr,reference = "ADC_REF_INTERNAL";
236236
zephyr,acquisition-time = <ADC_ACQ_TIME_MAX>;
237-
zephyr,resolution = <12>;
237+
zephyr,resolution = <16>;
238238
};
239239
channel@c {
240240
reg = <12>;
241241
zephyr,gain = "ADC_GAIN_1";
242242
zephyr,reference = "ADC_REF_INTERNAL";
243243
zephyr,acquisition-time = <ADC_ACQ_TIME_MAX>;
244-
zephyr,resolution = <12>;
244+
zephyr,resolution = <16>;
245245
};
246246
channel@a {
247247
reg = <10>;
248248
zephyr,gain = "ADC_GAIN_1";
249249
zephyr,reference = "ADC_REF_INTERNAL";
250250
zephyr,acquisition-time = <ADC_ACQ_TIME_MAX>;
251-
zephyr,resolution = <12>;
251+
zephyr,resolution = <16>;
252252
};
253253
channel@10 {
254254
reg = <16>;
255255
zephyr,gain = "ADC_GAIN_1";
256256
zephyr,reference = "ADC_REF_INTERNAL";
257257
zephyr,acquisition-time = <ADC_ACQ_TIME_MAX>;
258-
zephyr,resolution = <12>;
258+
zephyr,resolution = <16>;
259259
};
260260
channel@12 {
261261
reg = <18>;
262262
zephyr,gain = "ADC_GAIN_1";
263263
zephyr,reference = "ADC_REF_INTERNAL";
264264
zephyr,acquisition-time = <ADC_ACQ_TIME_MAX>;
265-
zephyr,resolution = <12>;
265+
zephyr,resolution = <16>;
266266
};
267267
channel@13 {
268268
reg = <19>;
269269
zephyr,gain = "ADC_GAIN_1";
270270
zephyr,reference = "ADC_REF_INTERNAL";
271271
zephyr,acquisition-time = <ADC_ACQ_TIME_MAX>;
272-
zephyr,resolution = <12>;
272+
zephyr,resolution = <16>;
273273
};
274274
/* PA0_C and PA1_C */
275275
channel@0 {
276276
reg = <0>;
277277
zephyr,gain = "ADC_GAIN_1";
278278
zephyr,reference = "ADC_REF_INTERNAL";
279279
zephyr,acquisition-time = <ADC_ACQ_TIME_MAX>;
280-
zephyr,resolution = <12>;
280+
zephyr,resolution = <16>;
281281
};
282282
channel@1 {
283283
reg = <1>;
284284
zephyr,gain = "ADC_GAIN_1";
285285
zephyr,reference = "ADC_REF_INTERNAL";
286286
zephyr,acquisition-time = <ADC_ACQ_TIME_MAX>;
287-
zephyr,resolution = <12>;
287+
zephyr,resolution = <16>;
288288
};
289289
};
290290

@@ -304,14 +304,14 @@
304304
zephyr,gain = "ADC_GAIN_1";
305305
zephyr,reference = "ADC_REF_INTERNAL";
306306
zephyr,acquisition-time = <ADC_ACQ_TIME_MAX>;
307-
zephyr,resolution = <12>;
307+
zephyr,resolution = <16>;
308308
};
309309
channel@1 {
310310
reg = <1>;
311311
zephyr,gain = "ADC_GAIN_1";
312312
zephyr,reference = "ADC_REF_INTERNAL";
313313
zephyr,acquisition-time = <ADC_ACQ_TIME_MAX>;
314-
zephyr,resolution = <12>;
314+
zephyr,resolution = <16>;
315315
};
316316
};
317317

0 commit comments

Comments
 (0)