I'm using the version 2.3.0 Zephyr toolchain. The chip is the nRF52832 and I'm setting up an ADC channel in the device tree overlay like so:
Fullscreen
1
2
3
4
5
6
7
8
9
channel@2 {
reg = <2>;
zephyr,gain = "ADC_GAIN_1_6";
zephyr,reference = "ADC_REF_INTERNAL";
zephyr,vref-mv = <750>;
zephyr,acquisition-time = <ADC_ACQ_TIME_DEFAULT>;
zephyr,input-positive = <NRF_SAADC_AIN2>;
zephyr,resolution = <12>;
};
At runtime, I get the device using this call:
struct device * adc_dev = DEVICE_DT_GET(DT_NODELABEL(adc));
Which comes back non-NULL and ready.
Then I use the device in adc_read like so:
Fullscreen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
uint16_t sample_buf[1] = {0};
const struct adc_sequence seq = {
.buffer = sample_buf,
.buffer_size = buf_size,
.channels = channel_mask,
.resolution = 12,
};
int adc_result = adc_read( adc_dev , &seq );
*result = sample_buf[0];
if( adc_result == 0 ) {
return MESSAGE_OK;
} else {
printk("ADC read error: %d\n",adc_result);
return ADC_READ_ERROR;
}
The error code coming back is -22 and the message is this:
<err> adc_nrfx_saadc: start_read: Channel 2 not configured
Now, I thought everything I need to configure for the channel is present in the device tree and I'm getting that device from DEVICE_DT_GET. But it seems that something is still not configured. What am I missing?