Here are links to various external resources with information about the Raspberry Pi, ARM assembly, C, and more.
Raspberry Pi
- Raspberry Pi Board Schematics. In this course, we use the Raspberry Pi A+.
ARM architecture
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 peripherals are documented in Broadcom BCM2835 ARM Peripherals.
- Important: Errata for the above datasheet. Some of the issues are simple typos but there are places where the text is wrong or backwards, so keep the errata at hand to reconcile those.
-
The ARM1176JFZ-S processor is documented in the Technical Reference Manual.
-
ARM1176JFZ-S processors use the ARMv6 architecture, which is documented in the ARMv6 Architecture Manual. At 1000 pages, the full manual is quite a tome!
-
ARM System-on-Chip Architecture (2nd Edition), Steve Furber. https://www.amazon.com/dp/0201675196/ 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, Andrew Sloss, Dominic Symes, and Chris Wright, 2004. https://www.amazon.com/dp/1558608745/ This book is a bit dated, but still provides an excellent overview of low-level ARM programming.
-
Extensive introduction to ARM processor core and instruction set by Prof. Jen at National Chiao Tung University in Taiwan.
ARM assembly
-
Specification of ARM instruction set (excerpted from ARM manual).
-
Davespace's Introduction to ARM Course is a recommended starting point.
-
Carl Burch's Introduction to ARM Assembly Language is also quite good. Note: Burch's document uses the older ARM syntax instead of the GNU syntax we use.
-
A Whirlwind Tour of ARM Assembly from the TONC Guide to programming the Nintendo Game Boy Advance (which uses am ARM processor).
-
Think in Geek article series ARM Assembler for the Raspberry Pi.
Bare metal programming
-
David Welch's extensive github repository of bare metal programming examples.
-
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.
C language
-
Nick Parlante's EssentialC
-
The C Programming Language, 2nd Ed., B. Kernighan and D. Ritchie. A digital copy of K&R is available to Stanford students via Safari Books Online
Developer tools
- The Definitive Guide to GCC, 2nd Ed., William von Hagen, Apress, 2006 pdf