#include "async.h" #include "aum1_cm1.h" #include "buffer.h" #include "crash.h" #include "gpio.h" #include "timer.h" #include "trace.h" #include "uart.h" #include "uart_async.h" namespace { using async::AwaitableType; void Uart0Isr() { tracing::trace(tracing::TraceEvent::kUartIsr); HandleUartIsr(); } void Timer0Isr() { tracing::dump(); __builtin_trap(); } void SetupUart() { InitUarts(); auto* vector_table = reinterpret_cast(0x0); vector_table[16 + HardFault_IRQn] = reinterpret_cast(crash::HardFaultHandler); vector_table[16 + Uart0_IRQn] = reinterpret_cast(Uart0Isr); vector_table[16 + Timer0_IRQn] = reinterpret_cast(Timer0Isr); NVIC_SetPriority(Uart0_IRQn, 3); NVIC_EnableIRQ(Uart0_IRQn); } void SetupTimer() { NVIC_EnableIRQ(Timer0_IRQn); timer0->SetupAsWdt(100000 * 4000); timer0->EnableT1(); } async::task<> echo() { while (1) { buffer buff = co_await UartRead(1); co_await UartWrite(buff.data); } } } // namespace int main() { SetupUart(); SetupTimer(); async::schedule(echo().h); async::main_loop([]() { static int cnt = 0; timer0->Pet(); if ((cnt++ % 100000) == 0) { ToggleLed(0); } }); // should never get here }