A post continuing implementation of an NS16550A UART driver in RISC-V assembly. Function prologues are explained in depth and implemented for uart_get_char and uart_put_char, diagramming changes to the stack and registers instruction-by-instruction. Topics such as ABIs, calling conventions, stack frames, and more are also discussed.| twilco’s blog
A post that discusses what RISC-V is and why it’s important, teaches readers how to install the GNU RISC-V toolchain, and walks through building and running a simple C program on emulated RISC-V hardware.| twilco’s blog
A post describing how C programs get to the main function. Devicetree layouts, linker scripts, minimal C runtimes, GDB and QEMU, basic RISC-V assembly, and other topics are reviewed along the way.| twilco’s blog
Top Device Tree page| elinux.org