hpm5100_adc_sar_read.ino
Configura el ADC16 en modo continuo y lee el valor bruto en el canal 0.
Aprovecha el periférico ADC SAR de 16 bits integrado. El código espera la finalización de la conversión de manera bloqueante (polling). Asegúrese de que el pin analógico correspondiente al canal 0 esté correctamente cableado. El valor devuelto es de 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);
}
}