Loading files
This file is pinned to the selected release. Download the original to open it in your design tool.
41c0d44e5This file is pinned to the selected release. Download the original to open it in your design tool.
#define GPIO_ADDR 0x40000000
#define HALT_ADDR 0x90000000
/*
a0 = GPIO address
a1 = String address
t0 = Character to write
*/
.globl _start
_start:
/* Load gpio address to a0 */
li a0, GPIO_ADDR
/* Set GPIO high initially */
addi t0, zero, 1
sb t0, 0(a0)
/* Load string address to a1 */
la a1, str
next_char:
/* Read char from string */
lbu t0, 0(a1)
/* If zero, we reached end of string and will exit the simulation */
beqz t0, halt
/* Bitbanged UART loop */
ori t0, t0, 0x100
slli t0, t0, 1
1: sb t0, 0(a0)
srli t0, t0, 1
/*
* Adding delay nops to achieve an approximate
* baud rate of 57600 at 16MHz
*/
nop
nop
bnez t0, 1b
/* Increase address to next char in string */
addi a1, a1, 1
j next_char
/* Writing anything to HALT_ADDR will exit simulation */
halt: li t0, HALT_ADDR
sw zero, 0(t0)
/*
* Loop to prevent PC from keep reading memory in case
* we run on real HW and not in simulation
*/
j halt
str:
.section .data
.string "Hi, I'm Servant!\n"