<p>
The second episode in a series on bare metal programming on the Raspberry Pi. This episode builds on part 1 by showing how interrupts work on the RPIs ARM chip and the framework I created to manage them.  It then goes on to describe
how an interrupt-enabled serial driver works.  From there, the episode
shows how we can use the serial cable in conjunction with a loader program
to enable us to load bare-metal programs onto the RPI without having to
copy them to the SD card each time.  In the process, the episode describes the
XMODEM protocol that the loader users for the file transfer process.
</p>
<p>
Here is some of the source material that I used while working on this
little learning experience.
</p>

<h3>Links</h3>

<ul>
<li>dwelch67's bare metal repository
 <ul>
 <li><a href="https://github.com/dwelch67/raspberrypi">https://github.com/dwelch67/raspberrypi</a>
 </li>
 <li>The best guide I know on this topic.  Very thorough and what I used as my starting point.
 </li>
 </ul>
</li>
<li>CATRPI
 <ul>
 <li>Homepage: <a href="https://gitorious.org/catrpi">https://gitorious.org/catrpi</a>
 </li>
 <li>Git repo: git://gitorious.org/catrpi/catrpi.git
 </li>
 <li>My own repository of code that I wrote during this little project.
 </li>
 </ul>
</li>
<li>XMODEM Protocol
 <ul>
 <li><a href="https://textfiles.com/programming/ymodem.txt">https://textfiles.com/programming/ymodem.txt</a>
 </li>
 <li>Says YMODEM but also includes specification for XMODEM.
 </li>
 </ul>
</li>
<li>Adafruit USB to TTL cable
 <ul>
 <li><a href="https://www.adafruit.com/products/954">https://www.adafruit.com/products/954</a>
 </li>
 </ul>
</li>
<li>Script to build the ARM toolchain
 <ul>
 <li><a href="https://github.com/dwelch67/build_gcc/blob/master/build_arm">https://github.com/dwelch67/build_gcc/blob/master/build_arm</a>
 </li>
 </ul>
</li>
<li>ARM ARM
 <ul>
 <li><a href="https://morrow.ece.wisc.edu/ECE353/arm_reference/ddi0100e_arm_arm.pdf">https://morrow.ece.wisc.edu/ECE353/arm_reference/ddi0100e_arm_arm.pdf</a>
 </li>
 <li>Contains the ARM assembly language as well as chip architecture overview.
 </li>
 <li>You'll need the ARM 11 Architecture Reference Manual
 </li>
 </ul>
</li>
<li>ARM TRM
 <ul>
 <li><a href="https://infocenter.arm.com/help/topic/com.arm.doc.ddi0301h/DDI0301H_arm1176jzfs_r0p7_trm.pdf">https://infocenter.arm.com/help/topic/com.arm.doc.ddi0301h/DDI0301H_arm1176jzfs_r0p7_trm.pdf</a>
 </li>
 <li>Contains info about the specific SOC that the Raspberry PI uses
 </li>
 </ul>
</li>
<li>RPI Schematics
 <ul>
 <li><a href="https://www.raspberrypi.org/wp-content/uploads/2012/04/Raspberry-Pi-Schematics-R1.0.pdf">https://www.raspberrypi.org/wp-content/uploads/2012/04/Raspberry-Pi-Schematics-R1.0.pdf</a>
 </li>
 <li>Shows how the Raspberry Pi is wired up
 </li>
 </ul>
</li>
<li>RPI Peripherals
 <ul>
 <li><a href="https://www.raspberrypi.org/wp-content/uploads/2012/02/BCM2835-ARM-Peripherals.pdf">https://www.raspberrypi.org/wp-content/uploads/2012/02/BCM2835-ARM-Peripherals.pdf</a>
 </li>
 <li>Describes functionality and programming model for the various Raspberry Pi peripherals.
 </li>
 </ul>
</li>
</ul>