63 lines
1.3 KiB
C
63 lines
1.3 KiB
C
#include <zephyr/kernel.h>
|
|
#include <zephyr/device.h>
|
|
#include <zephyr/devicetree.h>
|
|
#include <zephyr/sys/printk.h>
|
|
#include <zephyr/drivers/gpio.h>
|
|
#include <zephyr/drivers/uart.h>
|
|
#include <zephyr/drivers/adc.h>
|
|
|
|
#define ADC_NODE DT_NODELABEL(adc1)
|
|
|
|
#if !DT_NODE_HAS_STATUS(ADC_NODE, okay)
|
|
#error "ADC1 not available; Enable it in a board overlay if needed."
|
|
#endif
|
|
|
|
static const struct device *const adc_dev =
|
|
DEVICE_DT_GET(ADC_NODE);
|
|
|
|
static uint16_t sample;
|
|
|
|
// Channel Configuration
|
|
static struct adc_channel_cfg ch1_cfg = {
|
|
.gain = ADC_GAIN_1,
|
|
.reference = ADC_REF_INTERNAL,
|
|
.acquisition_time = ADC_ACQ_TIME_DEFAULT,
|
|
.channel_id = 1,
|
|
.differential = 0,
|
|
};
|
|
|
|
static struct adc_sequence seq = {
|
|
.channels = BIT(1), // Channel bitmap
|
|
.buffer = &sample,
|
|
.buffer_size = sizeof(sample),
|
|
.resolution = 12, // 12-bit
|
|
};
|
|
|
|
int main(void) {
|
|
|
|
if(!device_is_ready(adc_dev)) {
|
|
return 0;
|
|
}
|
|
|
|
// Configure the channel
|
|
if(adc_channel_setup(adc_dev, &ch1_cfg) != 0) {
|
|
return 0;
|
|
}
|
|
|
|
printk("\r\n[ADC] PA1(ADVC1_IN1) polling\r\n");
|
|
|
|
while (1) {
|
|
|
|
int rc = adc_read(adc_dev, &seq);
|
|
if(rc == 0) {
|
|
uint16_t raw = sample;
|
|
printk("ADC raw value = %u\r\n", raw);
|
|
}
|
|
|
|
k_sleep(K_MSEC(50));
|
|
|
|
}
|
|
|
|
return 0;
|
|
}
|