105 lines
2.4 KiB
C
105 lines
2.4 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_ate_impl.h"
|
|
|
|
static ate_t s_ate = {
|
|
.ops =
|
|
{
|
|
.read = ate_impl_i2c_read,
|
|
.write = ate_impl_i2c_write,
|
|
.delay = ate_impl_delay,
|
|
},
|
|
};
|
|
|
|
int main(void) {
|
|
system_clock_config();
|
|
at32_board_init();
|
|
uart_print_init(115200);
|
|
|
|
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");
|
|
|
|
bool pin_value = false;
|
|
|
|
if (ate_gpio_read(&s_ate, 0, &pin_value) != ATE_RET_SUCCESS) {
|
|
printf("Failed to read GPIO value\r\n");
|
|
|
|
goto dead_loop;
|
|
}
|
|
|
|
if (ate_gpio_write(&s_ate, 0, 1) != ATE_RET_SUCCESS) {
|
|
printf("Failed to write pin.\r\n");
|
|
|
|
goto dead_loop;
|
|
}
|
|
|
|
if (ate_gpio_init(&s_ate, 0, ATE_GPIO_MODE_OUTPUT_PP) != ATE_RET_SUCCESS) {
|
|
printf("Failed to config pin.");
|
|
|
|
goto dead_loop;
|
|
}
|
|
|
|
if (ate_gpio_read(&s_ate, 0, &pin_value) != ATE_RET_SUCCESS) {
|
|
printf("Failed to read GPIO value\r\n");
|
|
|
|
goto dead_loop;
|
|
}
|
|
|
|
printf("GPIO value: %d\r\n", pin_value);
|
|
|
|
if (ate_adc_configure(&s_ate, true, ATE_ADC_CH_IOREF_MASK) != ATE_RET_SUCCESS) {
|
|
printf("Failed to enable ATE ADC.\r\n");
|
|
|
|
goto dead_loop;
|
|
}
|
|
|
|
uint16_t ioref_val;
|
|
uint16_t da_value = 0;
|
|
|
|
for (;;) {
|
|
/* -- */
|
|
ate_led_set(&s_ate, ATE_LED_G, true);
|
|
delay_ms(500);
|
|
ate_led_set(&s_ate, ATE_LED_G, false);
|
|
delay_ms(500);
|
|
|
|
ate_ret_t ret = ate_adc_read(&s_ate, ATE_ADC_CH_IOREF, &ioref_val);
|
|
if (ret == ATE_RET_NOT_READY) {
|
|
printf("ADC result is not ready.\r\n");
|
|
|
|
continue;
|
|
} else if (ret != ATE_RET_SUCCESS) {
|
|
printf("Failed to read ADC value.\r\n");
|
|
|
|
goto dead_loop;
|
|
}
|
|
|
|
printf("IOREF: %ld mV\r\n", ((uint32_t)ioref_val * 3300 * 2 / 4095));
|
|
|
|
ate_dac_set(&s_ate, da_value);
|
|
printf("DAC set to %dmV\r\n", (da_value * 3300 / 1023));
|
|
da_value += 32;
|
|
if (da_value > 1023) {
|
|
da_value = 0U;
|
|
}
|
|
}
|
|
|
|
dead_loop:
|
|
for (;;) {
|
|
/* -- */
|
|
}
|
|
}
|