blob: d0566c457ec208c15f615003ef5e1f1e3ffe3e29 [file] [log] [blame] [edit]
/*
* Copyright 2017, Data61, CSIRO (ABN 41 687 119 230)
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#include <autoconf.h>
#include <camkes.h>
#include <stdint.h>
#include <stdio.h>
#define KZM_IO_BASE_ADDR (unsigned int)mem
#define KZM_UART1_RX_ADDR (KZM_IO_BASE_ADDR + 0x00)
#define KZM_UART1_TX_ADDR (KZM_IO_BASE_ADDR + 0x40)
#define KZM_UART1_STAT_ADDR (KZM_IO_BASE_ADDR + 0x94)
#define KZM_UART1_RX_RDY (1UL << 9)
#define KZM_UART1_TX_RDY (1UL << 13)
#define KZM_UART1_RX_MASK 0xFF
#define UART_VAL(x) *((volatile uint32_t *)(x))
void uart__init()
{
printf("uart port init\n");
}
static int uart_received()
{
return UART_VAL(KZM_UART1_STAT_ADDR) & KZM_UART1_RX_RDY;
}
static int is_transmit_empty()
{
return UART_VAL(KZM_UART1_STAT_ADDR) & KZM_UART1_TX_RDY;
}
char uart_get_char()
{
while (uart_received() == 0);
return UART_VAL(KZM_UART1_RX_ADDR) & KZM_UART1_RX_MASK;
}
void uart_put_char(char c)
{
while (is_transmit_empty() == 0);
UART_VAL(KZM_UART1_TX_ADDR) = c;
}