#include #define LEDS *((volatile uint32_t *) 0x00010000) #define UART_BAUD *((volatile uint32_t *) 0x00020000) #define UART_STATUS *((volatile uint32_t *) 0x00020004) #define UART_DATA *((volatile int32_t *) 0x00020008) #define UART_STATUS_TX_READY 0x1 #define UART_STATUS_RX_READY 0x2 #define BAUD_RATE 9600 static void uart_puts(const char *str) { char c; while ((c = *str++)) { while (!(UART_STATUS & UART_STATUS_TX_READY)); UART_DATA = c; } } static inline uint32_t rdcycle(void) { uint32_t cycle; asm volatile ("rdcycle %0" : "=r"(cycle)); return cycle; } int main() { UART_BAUD = FREQ / BAUD_RATE; LEDS = 0xAA; for (;;) { uart_puts("Hello, world!\r\n"); uint32_t start = rdcycle(); while ((rdcycle() - start) <= FREQ); } }