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