You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Andre Richter f13e6e4513
Change to new aarch64-unknown-none-softloat target.
Also, add safety docs where demanded by clippy.
5 years ago
..
.cargo Change to new aarch64-unknown-none-softloat target. 5 years ago
raspi3_boot Change to new aarch64-unknown-none-softloat target. 5 years ago
src Update copyright dates 5 years ago
Cargo.lock Update toolchain and bump dependency versions 5 years ago
Cargo.toml Update toolchain and bump dependency versions 5 years ago
Makefile Change to new aarch64-unknown-none-softloat target. 5 years ago
README.md Streamlining, cleanup, and minor fixes. 5 years ago
kernel8 Change to new aarch64-unknown-none-softloat target. 5 years ago
kernel8.img Update toolchain and bump dependency versions 5 years ago
link.ld Alignment. Binaries from newer Rust version. 6 years ago

README.md

Tutorial 03 - UART1, Auxilary mini UART

It is time for the famous Hello World example. We're going to write on the UART1 first, as it is easier to program, since it has a fixed clocked frequency.

gpio.rs

We have a new file that defines the GPIO controller addresses. It is going to be very popular, as many device will need it in the future.

We are using the register crate to modify MMIO addresses, because it allows easy wrapping of addresses to volatile types. It will also be used for UART registers.

uart.rs

A very minimal implementation.

MiniUart::init(&self) initializes the device and maps it to the GPIO ports.

MiniUart::send(&self, c: char) sends a character over the serial line.

MiniUart::getc(&self) receives a character. The carrige return character (13) will be converted into a newline character (10).

MiniUart::puts(&self, string: &str) prints out a string. On newline, a carrige return character will also be sent (13 + 10).

main.rs

First, we have to call the uart initialization code. Then we wait for the first keypress from the user before we say "Hello Rustacean!". If you've purchased an USB serial cable, you should see it on screen's screen. After that, every character typed in screen will be echoed back. If you haven't turned off local echo, that means you'll see every pressed key twice.

Simulation

We can also use QEMU to simulate the UART output of our bare-metal binary on the host PC.

ferris@box:~$ make qemu
[0] UART is live!
[1] Press a key to continue booting... Greetings fellow Rustacean!

However, let it be said that it is more thrilling to see your first output from the real hardware target, so don't be shy and grab a USB-serial.