feat: Revert ADC changes and set channel 12 for VREFINT
This commit is contained in:
parent
a2afec52e2
commit
2c21f1f9cb
|
|
@ -0,0 +1,34 @@
|
|||
/{
|
||||
zephyr,user {
|
||||
io-channels = <&adc1 1>, <&adc1 12>;
|
||||
};
|
||||
};
|
||||
|
||||
&adc1 {
|
||||
status = "okay";
|
||||
|
||||
pinctrl-0 = <&adc1_in1_pa0>;
|
||||
pinctrl-names = "default";
|
||||
|
||||
st,adc-clock-source = "SYNC";
|
||||
st,adc-prescaler = <4>;
|
||||
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
channel@1 {
|
||||
reg = <1>;
|
||||
zephyr,gain = "ADC_GAIN_1";
|
||||
zephyr,reference = "ADC_REF_INTERNAL";
|
||||
zephyr,acquisition-time = <ADC_ACQ_TIME_DEFAULT>;
|
||||
zephyr,resolution = <12>;
|
||||
};
|
||||
|
||||
channel@c {
|
||||
reg = <0xc>;
|
||||
zephyr,gain = "ADC_GAIN_1";
|
||||
zephyr,reference = "ADC_REF_INTERNAL";
|
||||
zephyr,acquisition-time = <ADC_ACQ_TIME_DEFAULT>;
|
||||
zephyr,resolution = <12>;
|
||||
};
|
||||
};
|
||||
|
|
@ -0,0 +1,102 @@
|
|||
/*
|
||||
* Copyright (c) 2020 Libre Solar Technologies GmbH
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
#include <inttypes.h>
|
||||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#include <zephyr/device.h>
|
||||
#include <zephyr/devicetree.h>
|
||||
#include <zephyr/drivers/adc.h>
|
||||
#include <zephyr/kernel.h>
|
||||
#include <zephyr/sys/printk.h>
|
||||
#include <zephyr/sys/util.h>
|
||||
|
||||
#if !DT_NODE_EXISTS(DT_PATH(zephyr_user)) || \
|
||||
!DT_NODE_HAS_PROP(DT_PATH(zephyr_user), io_channels)
|
||||
#error "No suitable devicetree overlay specified"
|
||||
#endif
|
||||
|
||||
#define DT_SPEC_AND_COMMA(node_id, prop, idx) \
|
||||
ADC_DT_SPEC_GET_BY_IDX(node_id, idx),
|
||||
|
||||
/* Data of ADC io-channels specified in devicetree. */
|
||||
static const struct adc_dt_spec adc_channels[] = {
|
||||
DT_FOREACH_PROP_ELEM(DT_PATH(zephyr_user), io_channels,
|
||||
DT_SPEC_AND_COMMA)
|
||||
};
|
||||
|
||||
int main(void)
|
||||
{
|
||||
int err;
|
||||
uint32_t count = 0;
|
||||
uint16_t buf;
|
||||
struct adc_sequence sequence = {
|
||||
.buffer = &buf,
|
||||
/* buffer size in bytes, not number of samples */
|
||||
.buffer_size = sizeof(buf),
|
||||
};
|
||||
|
||||
/* Configure channels individually prior to sampling. */
|
||||
for (size_t i = 0U; i < ARRAY_SIZE(adc_channels); i++) {
|
||||
if (!adc_is_ready_dt(&adc_channels[i])) {
|
||||
printk("ADC controller device %s not ready\n", adc_channels[i].dev->name);
|
||||
return 0;
|
||||
}
|
||||
|
||||
err = adc_channel_setup_dt(&adc_channels[i]);
|
||||
if (err < 0) {
|
||||
printk("Could not setup channel #%d (%d)\n", i, err);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
#ifndef CONFIG_COVERAGE
|
||||
while (1) {
|
||||
#else
|
||||
for (int k = 0; k < 10; k++) {
|
||||
#endif
|
||||
printk("ADC reading[%u]:\n", count++);
|
||||
for (size_t i = 0U; i < ARRAY_SIZE(adc_channels); i++) {
|
||||
int32_t val_mv;
|
||||
|
||||
printk("- %s, channel %d: ",
|
||||
adc_channels[i].dev->name,
|
||||
adc_channels[i].channel_id);
|
||||
|
||||
(void)adc_sequence_init_dt(&adc_channels[i], &sequence);
|
||||
|
||||
err = adc_read_dt(&adc_channels[i], &sequence);
|
||||
if (err < 0) {
|
||||
printk("Could not read (%d)\n", err);
|
||||
continue;
|
||||
}
|
||||
|
||||
/*
|
||||
* If using differential mode, the 16 bit value
|
||||
* in the ADC sample buffer should be a signed 2's
|
||||
* complement value.
|
||||
*/
|
||||
if (adc_channels[i].channel_cfg.differential) {
|
||||
val_mv = (int32_t)((int16_t)buf);
|
||||
} else {
|
||||
val_mv = (int32_t)buf;
|
||||
}
|
||||
printk("%"PRId32, val_mv);
|
||||
err = adc_raw_to_millivolts_dt(&adc_channels[i],
|
||||
&val_mv);
|
||||
/* conversion to mV may not be supported, skip if not */
|
||||
if (err < 0) {
|
||||
printk(" (value in mV not available)\n");
|
||||
} else {
|
||||
printk(" = %"PRId32" mV\n", val_mv);
|
||||
}
|
||||
}
|
||||
|
||||
k_sleep(K_MSEC(1000));
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
Loading…
Reference in New Issue