Viewing: uart.c
📄 uart.c (Read Only) ⬅ To go back
#include "hal/uart.h"
#include "io.h"

#define UART_BASE 0x10000000

void hal_uart_init(void) {
    mmio_write8(UART_BASE + 3, 0x03);
    mmio_write8(UART_BASE + 2, 0x01);
    mmio_write8(UART_BASE + 1, 0x01);
}

int hal_uart_is_present(void) {
    return 1;
}

void hal_uart_drain_rx(void) {
    while (mmio_read8(UART_BASE + 5) & 0x01)
        (void)mmio_read8(UART_BASE);
}

void hal_uart_poll_rx(void) {
}

void hal_uart_putc(char c) {
    while ((mmio_read8(UART_BASE + 5) & 0x20) == 0) { }
    mmio_write8(UART_BASE, (uint8_t)c);
}

int hal_uart_try_getc(void) {
    if (mmio_read8(UART_BASE + 5) & 0x01) {
        return (int)mmio_read8(UART_BASE);
    }
    return -1;
}

void hal_uart_set_rx_callback(void (*cb)(char)) {
    (void)cb;
}