Skip to content

Commit 690293e

Browse files
RP2350B additional ADC inputs for ADCInput (#2509)
Fix pin offset and maximum count of ADC inputs for the RP2350B variant.
1 parent 500fcf2 commit 690293e

File tree

2 files changed

+26
-8
lines changed

2 files changed

+26
-8
lines changed

libraries/ADCInput/src/ADCInput.cpp

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,9 @@
2424
#include "ADCInput.h"
2525
#include <hardware/adc.h>
2626

27-
ADCInput::ADCInput(pin_size_t p0, pin_size_t p1, pin_size_t p2, pin_size_t p3) {
27+
ADCInput::ADCInput(pin_size_t p0, pin_size_t p1, pin_size_t p2, pin_size_t p3, pin_size_t p4, pin_size_t p5, pin_size_t p6, pin_size_t p7) {
2828
_running = false;
29-
setPins(p0, p1, p2, p3);
29+
setPins(p0, p1, p2, p3, p4, p5, p6, p7);
3030
_freq = 48000;
3131
_arb = nullptr;
3232
_cb = nullptr;
@@ -49,19 +49,30 @@ bool ADCInput::setBuffers(size_t buffers, size_t bufferWords) {
4949

5050
int ADCInput::_mask(pin_size_t p) {
5151
switch (p) {
52+
#if !defined(PICO_RP2350B)
5253
case 26: return 1;
5354
case 27: return 2;
5455
case 28: return 4;
5556
case 29: return 8;
57+
#else // Starts at 40 and there are 8 of them
58+
case 40: return 1;
59+
case 41: return 2;
60+
case 42: return 4;
61+
case 43: return 8;
62+
case 44: return 16;
63+
case 45: return 32;
64+
case 46: return 64;
65+
case 47: return 128;
66+
#endif
5667
default: return 0;
5768
}
5869
}
5970

60-
bool ADCInput::setPins(pin_size_t pin0, pin_size_t pin1, pin_size_t pin2, pin_size_t pin3) {
71+
bool ADCInput::setPins(pin_size_t pin0, pin_size_t pin1, pin_size_t pin2, pin_size_t pin3, pin_size_t pin4, pin_size_t pin5, pin_size_t pin6, pin_size_t pin7) {
6172
if (_running) {
6273
return false;
6374
}
64-
_pinMask = _mask(pin0) | _mask(pin1) | _mask(pin2) | _mask(pin3);
75+
_pinMask = _mask(pin0) | _mask(pin1) | _mask(pin2) | _mask(pin3) | _mask(pin4) | _mask(pin5) | _mask(pin6) | _mask(pin7);
6576
return true;
6677
}
6778

@@ -94,10 +105,17 @@ bool ADCInput::begin() {
94105
// Set up the GPIOs to go to ADC
95106
adc_init();
96107
int cnt = 0;
97-
for (int mask = 1, pin = 26; pin <= 29; mask <<= 1, pin++) {
108+
#if !defined(PICO_RP2350B)
109+
int startpin = 26;
110+
int maxpin = 29;
111+
#else
112+
int startpin = 40;
113+
int maxpin = 47;
114+
#endif
115+
for (int mask = 1, pin = startpin; pin <= maxpin; mask <<= 1, pin++) {
98116
if (_pinMask & mask) {
99117
if (!cnt) {
100-
adc_select_input(pin - 26);
118+
adc_select_input(pin - startpin);
101119
}
102120
cnt++;
103121
adc_gpio_init(pin);

libraries/ADCInput/src/ADCInput.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,12 @@
2626

2727
class ADCInput : public Stream {
2828
public:
29-
ADCInput(pin_size_t pin0, pin_size_t pin1 = 255, pin_size_t pin2 = 255, pin_size_t pin3 = 255);
29+
ADCInput(pin_size_t pin0, pin_size_t pin1 = 255, pin_size_t pin2 = 255, pin_size_t pin3 = 255, pin_size_t pin4 = 255, pin_size_t pin5 = 255, pin_size_t pin6 = 255, pin_size_t pin7 = 255);
3030
virtual ~ADCInput();
3131

3232
bool setBuffers(size_t buffers, size_t bufferWords);
3333
bool setFrequency(int newFreq);
34-
bool setPins(pin_size_t pin0, pin_size_t pin1 = 255, pin_size_t pin2 = 255, pin_size_t pin3 = 255);
34+
bool setPins(pin_size_t pin0, pin_size_t pin1 = 255, pin_size_t pin2 = 255, pin_size_t pin3 = 255, pin_size_t pin4 = 255, pin_size_t pin5 = 255, pin_size_t pin6 = 255, pin_size_t pin7 = 255);
3535

3636
bool begin(long sampleRate) {
3737
setFrequency(sampleRate);

0 commit comments

Comments
 (0)