Пример #1
0
int main(void)
{
	struct gpio_pin heartbeat_led;
	struct timer heartbeat_timer;

	struct aparser_ctx uart_parser;

	cli();

	gpio_init_output(&yellow_led, &PORTC, 0, false);
	gpio_init_output(&heartbeat_led, &PORTB, 5, false);
	timer_set_period_ms(&heartbeat_timer, 500);

	servo_init();
	uart_init();
	systick_init();

	aparser_init(&uart_parser, 2);
	aparser_register_commands(&uart_parser, uart_parser_item);

	wdt_enable(WDTO_500MS);

	sei();

	for (;;) {
		uint8_t data;

		if (uart_getchar(&data) == UART_RETCODE_SUCCESS) {
			uart_putchar(data);
			aparser_update_and_execute(&uart_parser, data);
		}

		if (timer_has_expired(&heartbeat_timer)) {
			timer_restart(&heartbeat_timer);
			gpio_toggle(&heartbeat_led);
		}

		wdt_reset();
	}

	return 0;
}
irom static void gpio_init_timer(gpio_t *gpio)
{
	const gpio_config_entry_t *cfg = get_config(gpio);

	gpio->timer.delay = 0;

	gpio_init_output(gpio);

	if(cfg->timer.direction == gpio_up)
		gpio_output_set(0, 1 << gpio->index, 0, 0);
	else
		gpio_output_set(1 << gpio->index, 0, 0, 0);

	if(cfg->timer.autotrigger)
		trigger_timer(gpio, 1);
}