hpm5100_adc_sar_read.ino
Configure le convertisseur ADC16 en mode continu et lit la valeur brute sur le canal 0.
Exploite le périphérique SAR ADC 16 bits intégré. Le code attend la fin de conversion de manière bloquante (polling). Assurez-vous que le pin analogique correspondant au canal 0 est correctement câblé. La valeur retournée est sur 16 bits (0-65535).
hpm5100_adc_sar_read.ino
#include "board.h"
#include "hpm_adc16_drv.h"
#include "hpm_clock_drv.h"
#define ADC_CHANNEL 0
#define ADC_RESOLUTION 16
void init_sar_adc(void)
{
adc16_config_t adc_config;
adc16_channel_config_t channel_config;
clock_add_to_group(clock_adc0, 0);
adc16_get_default_config(&adc_config);
adc_config.resolution = adc16_res_16_bits;
adc_config.conv_mode = adc16_conv_mode_continuous;
adc16_init(HPM_ADC0, &adc_config);
adc16_get_channel_default_config(&channel_config);
channel_config.channel = ADC_CHANNEL;
adc16_init_channel(HPM_ADC0, &channel_config);
adc16_enable_channel(HPM_ADC0, ADC_CHANNEL);
adc16_enable_interrupt(HPM_ADC0, adc16_event_conv_done, true);
}
uint16_t read_adc_value(void)
{
uint16_t value = 0;
adc16_enable_conversion(HPM_ADC0, true);
while (!adc16_get_status(HPM_ADC0, adc16_event_conv_done)) {
/* Wait for conversion */
}
adc16_clear_status(HPM_ADC0, adc16_event_conv_done);
value = adc16_get_channel_result(HPM_ADC0, ADC_CHANNEL);
return value;
}
void main(void)
{
board_init();
init_sar_adc();
while (1) {
uint16_t val = read_adc_value();
/* Process val (0-65535) */
board_delay_ms(100);
}
}