Raspberry Pi GPIO Pinout website. Nice way to see alternate functions by clicking each pin. Also, click Ground and you see all the other Ground pins.
An interactive demo of how the ARM assembler’s immediate value encoder works.
VisUAL emulates the ARM instruction set and allows you to step through an assembly program. Pat used this tool in lecture.
Note that VisUAL uses a slightly different ARM assembly syntax from the GNU syntax we use in the course – for example, you don’t put colons after labels in VisUAL.
Matt Godbolt’s Compiler Explorer lets you quickly see how C source code maps to compiled assembly. (Be sure to choose the compiler “ARM gcc 4.8.2”, which is close to what we use for the course. Check out the colorize option, too.)
cdecl.org converts “C gibberish” to and from English.
Repl can run C code for you. This can be handy when you need to test something brief or small!
This virtual Seven Segment Display will come in handy in a future lab. This demo teaches you to link bits to characters on a seven-segment-display.
A demonstration of nifty pointer use to reverse a string.
We are using the Raspberry Pi A+ in class. The A+ is similar to the B+.
The Raspberry Pi A+ uses a Broadcom BCM2835 chip. Inside the chip is an ARM1176JFZ-S processor which is based on the ARMv6 architecture.
The ARM1176JFZ-S processor is documented in the Technical Reference Manual.
ARM System-on-Chip Architecture (2nd Edition), Steve Furber. Steve Furber was the principal design of the first ARM processor. The diagrams of the ARM architecture are based on the diagrams in Chapter 4: ARM Organization and Implementation.
ARM System Developer’s Guide: Designing and Optimizing System Software (The Morgan Kaufmann Series in Computer Architecture and Design), Andrew Sloss, Dominic Symes, and Chris Wright, 2004. This book is a bit dated, but still provides an excellent overview of low-level ARM programming.
Excellent slides by Prof. Yen at NCTU on the ARM processor core and instruction sets.
Carl Burch’s Introduction to ARM Assembly Language is highly recommended starting point.
Like VisUAL above, Burch’s introduction uses the older ARM syntax instead of the GNU syntax we use.
Worldwind Tour of ARM Assembly from the TONC Guide to programming the Nintendo Game Boy Advance (which uses am ARM processor).
David Welch’s excellent set of bare metal programming examples.
Steve Halliday’s videos about programming the raspberry pi.
Alex Chadwick’s Baking Pi Course.
The Raspberry Pi Bare Metal Forum has lots of information from experienced developers. Venturing into the forum is a great way to learn advanced techniques.