#include "uart.h"

volatile uint32_t* output = NULL;

#define UART 0x10000000
#define UART_THR (char*)(UART + 0x00) // THR:transmitter holding register
#define UART_LSR (char*)(UART + 0x05) // LSR:line status register
#define UART_LSR_EMPTY_MASK 0x40 // LSR Bit 6: Transmitter empty; both the THR and LSR are empty

void uart_init()
{
    output = (uint32_t*)UART;
}

int uart_write(uint8_t data)
{
    if (!output) {
        return 1;
    }

    while ((*UART_LSR & UART_LSR_EMPTY_MASK) == 0) { }
    *output = data;
    return 0;
}