99 lines
2.1 KiB
C
99 lines
2.1 KiB
C
#include <stdio.h>
|
|
|
|
/* SDK drivers */
|
|
#include "at32f435_437_board.h"
|
|
#include "at32f435_437_clock.h"
|
|
#include "at32f435_437_i2c.h"
|
|
|
|
/* ATE */
|
|
#include "app_adc.h"
|
|
#include "app_ate_impl.h"
|
|
|
|
static ate_t s_ate = {
|
|
.ops =
|
|
{
|
|
.read = ate_impl_i2c_read,
|
|
.write = ate_impl_i2c_write,
|
|
.delay = ate_impl_delay,
|
|
},
|
|
};
|
|
|
|
static int app_ad_da_test(void);
|
|
|
|
int main(void) {
|
|
system_clock_config();
|
|
at32_board_init();
|
|
uart_print_init(115200);
|
|
|
|
app_adc_init();
|
|
ate_impl_i2c_init();
|
|
|
|
if (ate_init(&s_ate) != ATE_RET_SUCCESS) {
|
|
printf("Failed to initialize ATE.\r\n");
|
|
|
|
goto dead_loop;
|
|
}
|
|
|
|
printf("ATE initialized.\r\n");
|
|
|
|
at32_led_on(LED3);
|
|
|
|
if (app_ad_da_test() < 0) {
|
|
goto fail_exit;
|
|
}
|
|
|
|
at32_led_off(LED3);
|
|
at32_led_on(LED4);
|
|
ate_led_set(&s_ate, ATE_LED_G, true);
|
|
|
|
for (;;) {
|
|
/* -- */
|
|
}
|
|
|
|
fail_exit:
|
|
at32_led_off(LED3);
|
|
at32_led_on(LED2);
|
|
ate_led_set(&s_ate, ATE_LED_R, true);
|
|
|
|
dead_loop:
|
|
for (;;) {
|
|
/* -- */
|
|
}
|
|
}
|
|
|
|
static int app_ad_da_test(void) {
|
|
printf("[ADDA] Test started.\r\n");
|
|
|
|
for (uint16_t i = 0; i < 1024; i += 16) {
|
|
ate_led_set(&s_ate, ATE_LED_B, true);
|
|
|
|
ate_dac_set(&s_ate, i);
|
|
|
|
delay_ms(10);
|
|
|
|
uint16_t ad_result = app_adc_read();
|
|
uint16_t ad_voltage = ad_result * 3300 / 4096;
|
|
uint16_t da_voltage = i * 3300 / 1024;
|
|
int delta_voltage = ad_voltage - da_voltage;
|
|
|
|
printf("[ADDA] AD voltage: %5dmV, set: %5dmV, delta: %5dmV\r\n", ad_voltage, da_voltage, delta_voltage);
|
|
|
|
if (ad_voltage > da_voltage) {
|
|
if (ad_voltage - da_voltage > 100) {
|
|
return -1;
|
|
}
|
|
} else if (da_voltage > ad_voltage) {
|
|
if (da_voltage - ad_voltage > 100) {
|
|
return -1;
|
|
}
|
|
}
|
|
|
|
ate_led_set(&s_ate, ATE_LED_B, false);
|
|
|
|
delay_ms(10);
|
|
}
|
|
|
|
printf("[ADDA] Test completed.\r\n");
|
|
|
|
return 0;
|
|
} |