mirror of
				https://github.com/openhwgroup/cvw
				synced 2025-02-11 06:05:49 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			88 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			88 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| ///////////////////////////////////////////////////////////////////////
 | |
| // uart.h
 | |
| //
 | |
| // Written: Jaocb Pease jacob.pease@okstate.edu 7/22/2024
 | |
| //
 | |
| // Purpose: Header for the UART functions.
 | |
| //
 | |
| // 
 | |
| //
 | |
| // A component of the Wally configurable RISC-V project.
 | |
| // 
 | |
| // Copyright (C) 2021-23 Harvey Mudd College & Oklahoma State University
 | |
| //
 | |
| // SPDX-License-Identifier: Apache-2.0 WITH SHL-2.1
 | |
| //
 | |
| // Licensed under the Solderpad Hardware License v 2.1 (the
 | |
| // “License”); you may not use this file except in compliance with the
 | |
| // License, or, at your option, the Apache License version 2.0. You
 | |
| // may obtain a copy of the License at
 | |
| //
 | |
| // https://solderpad.org/licenses/SHL-2.1/
 | |
| //
 | |
| // Unless required by applicable law or agreed to in writing, any work
 | |
| // distributed under the License is distributed on an “AS IS” BASIS,
 | |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
 | |
| // implied. See the License for the specific language governing
 | |
| // permissions and limitations under the License.
 | |
| ///////////////////////////////////////////////////////////////////////
 | |
| 
 | |
| #pragma once
 | |
| #include <stdint.h>
 | |
| #include "riscv.h"
 | |
| #include "time.h"
 | |
| 
 | |
| // UART register addresses
 | |
| #define UART_BASE 0x10000000
 | |
| 
 | |
| #define UART_RBR UART_BASE + 0x00
 | |
| #define UART_THR UART_BASE + 0x00
 | |
| #define UART_IER UART_BASE + 0x01
 | |
| #define UART_IIR UART_BASE + 0x02
 | |
| #define UART_FCR UART_BASE + 0x02
 | |
| #define UART_LCR UART_BASE + 0x03
 | |
| #define UART_MCR UART_BASE + 0x04
 | |
| #define UART_LSR UART_BASE + 0x05
 | |
| #define UART_MSR UART_BASE + 0x06
 | |
| #define UART_SCR UART_BASE + 0x07
 | |
| #define UART_DLL UART_BASE + 0x00
 | |
| #define UART_DLM UART_BASE + 0x01
 | |
| 
 | |
| // Primary function prototypes
 | |
| void init_uart(uint32_t freq, uint32_t baud);
 | |
| void write_reg_u8(uintptr_t addr, uint8_t value);
 | |
| uint8_t read_reg_u8(uintptr_t addr);
 | |
| int read_serial(uint8_t *res);
 | |
| void print_uart(const char* str);
 | |
| void print_uart_int(uint32_t addr);
 | |
| void print_uart_dec(uint64_t addr);
 | |
| void print_uart_addr(uint64_t addr);
 | |
| void print_uart_hex(uint64_t addr, int n);
 | |
| void print_uart_byte(uint8_t byte);
 | |
| void print_uart_float(float num, int precision);
 | |
| // void print_time();
 | |
| 
 | |
| // Print numbers in hex with specified widths
 | |
| #define print_uart_int(addr) print_uart_hex(addr, 4)
 | |
| #define print_uart_addr(addr) print_uart_hex(addr, 8)
 | |
| #define print_uart_byte(addr) print_uart_hex(addr, 1)
 | |
| #define print_r7(addr) print_uart_hex(addr, 5)
 | |
| #define print_r1(addr) print_uart_byte(addr)
 | |
| 
 | |
| // Print line with numbers utility macros
 | |
| #define println(msg) print_uart(msg "\r\n");
 | |
| #define println_with_dec(msg, num) print_uart(msg); print_uart_dec(num); print_uart("\r\n")
 | |
| #define println_with_byte(msg, num) print_uart(msg); print_uart_byte(num); print_uart("\r\n")
 | |
| #define println_with_int(msg, num) print_uart(msg); print_uart_int(num); print_uart("\r\n")
 | |
| #define println_with_addr(msg, num) print_uart(msg); print_uart_addr(num); print_uart("\r\n")
 | |
| #define println_with_r1(msg, num) print_uart(msg); print_r1(num); print_uart("\r\n")
 | |
| #define println_with_r7(msg, num) print_uart(msg); print_r7(num); print_uart("\r\n")
 | |
| #define println_with_float(msg, num) print_uart(msg); set_status_fs(); print_uart_float(num,5); clear_status_fs(); print_uart("\r\n")
 | |
| 
 | |
| /* #define print_time() print_uart("["); \ */
 | |
| /*   set_status_fs();                    \ */
 | |
| /*   print_uart_float(getTime(),5);      \ */
 | |
| /*   clear_status_fs();                  \ */
 | |
| /*   print_uart("] ") */
 | |
| 
 |