high-speed-adc-sampling-7.ino
Configure l'ADC 16 bits en mode scan automatique pour lire deux canaux analogiques consécutifs sans intervention CPU.
Utilise ADC0. Le mode auto-scan permet de dépasser 2 MSPS. Vérifiez le schéma de la carte pour identifier les broches analogiques correctes reliées aux canaux 0 et 1 de l'ADC0.
high-speed-adc-sampling-7.ino
#include "board.h"
#include "hpm_adc16_drv.h"
#include "hpm_clock_drv.h"
#define ADC_SCAN_COUNT 2
uint16_t adc_result[ADC_SCAN_COUNT];
void adc_high_speed_init(void)
{
adc16_config_t adc_config;
adc16_channel_config_t ch_config[ADC_SCAN_COUNT];
clock_add_to_group(clock_adc0, 0);
/* Configuration ADC : Mode Scan, 16 bits */
adc_config.res = adc16_res_16_bits;
adc_config.conv_mode = adc16_conv_mode_auto_scan;
adc_config.auto_conv_en = true;
adc_config.sar_ctrl = adc16_sar_ctrl_normal;
hpm_clock_drv_init(); /* Init simple pour l'exemple */
adc16_init(ADC0, &adc_config);
/* Configurer 2 canaux pour le scan */
for (int i = 0; i < ADC_SCAN_COUNT; i++) {
ch_config[i].input_ctrl = i; /* Sélectionne le canal d'entrée analogique i */
ch_config[i].enable = true;
adc16_channel_set_config(ADC0, i, &ch_config[i]);
}
/* Activer le compteur de fin de scan pour lecture */
adc16_enable_interrupt(ADC0, adc16_int_all_conv_done, true);
adc16_start_conversion(ADC0);
}
void adc_read_results(void)
{
if (adc16_get_status_flags(ADC0) & adc16_flag_all_conv_done) {
adc16_clear_status_flags(ADC0, adc16_flag_all_conv_done);
for (int i = 0; i < ADC_SCAN_COUNT; i++) {
adc_result[i] = adc16_read_result(ADC0, i);
}
}
}
int main(void)
{
board_init();
adc_high_speed_init();
while (1) {
adc_read_results();
/* adc_result[0] = Canaux 0, adc_result[1] = Canaux 1 */
delay_ms(5);
}
}