Artery_AT32F437_Start_MPyAT.../src/main.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 (;;) {
/* -- */
}
}