1/*
2 * Copyright 2017, Data61, CSIRO (ABN 41 687 119 230)
3 *
4 * SPDX-License-Identifier: BSD-2-Clause
5 */
6
7#include <autoconf.h>
8#include <camkes.h>
9#include <stdint.h>
10#include <stdio.h>
11
12#define KZM_IO_BASE_ADDR    (unsigned int)mem
13#define KZM_UART1_RX_ADDR   (KZM_IO_BASE_ADDR + 0x00)
14#define KZM_UART1_TX_ADDR   (KZM_IO_BASE_ADDR + 0x40)
15#define KZM_UART1_STAT_ADDR (KZM_IO_BASE_ADDR + 0x94)
16
17#define KZM_UART1_RX_RDY (1UL << 9)
18#define KZM_UART1_TX_RDY (1UL << 13)
19#define KZM_UART1_RX_MASK 0xFF
20
21#define UART_VAL(x) *((volatile uint32_t *)(x))
22
23void uart__init()
24{
25	printf("uart port init\n");
26}
27
28static int uart_received()
29{
30	return UART_VAL(KZM_UART1_STAT_ADDR) & KZM_UART1_RX_RDY;
31}
32
33static int is_transmit_empty() {
34	   return UART_VAL(KZM_UART1_STAT_ADDR) & KZM_UART1_TX_RDY;
35}
36
37char uart_get_char()
38{
39	while (uart_received() == 0);
40	return UART_VAL(KZM_UART1_RX_ADDR) & KZM_UART1_RX_MASK;
41}
42
43void uart_put_char(char c)
44{
45	while(is_transmit_empty() == 0);
46	UART_VAL(KZM_UART1_TX_ADDR) = c;
47}
48