#if !defined(__cplusplus) && !defined(false) typedef int bool; #define true 1 #define false 0 #endif static bool uart_read_ready() { unsigned int val; bool full; asm volatile ("rcsr %0, JRX" : "=r" (val)); full = (val >> 8) & 1; return full; } static unsigned char uart_read() { unsigned int val; asm volatile ("rcsr %0, JRX" : "=r" (val)); asm volatile ("wcsr JRX, %0" : : "r" (val)); return val & 0xff; } static bool uart_write_ready() { unsigned int val; bool full; asm volatile ("rcsr %0, JTX" : "=r" (val)); full = (val >> 8) & 1; return !full; } static void uart_write(unsigned char v) { asm volatile ("wcsr JTX, %0" : : "r" (v)); } static void uart_write_byte(int b) { while (!uart_write_ready()); uart_write(b); } static void uart_write_string(const char* s) { for (; *s; ++s) uart_write_byte(*s); } unsigned int* codr = (unsigned int*)0x600400; unsigned int* sodr = (unsigned int*)0x600404; void LatticeDDInit() { int i; while (1) { uart_write_string("LED on!\n"); for (i = 0; i < 125000000; ++i) { asm(""); } *codr = 1; uart_write_string("LED off!\n"); for (i = 0; i < 125000000; ++i) { asm(""); } *sodr = 1; } } void MicoISRHandler(unsigned int sig) { }