This second Embedded Systems course introduces microcontroller architecture and uses prior knowledge in ANSI C programming to develop firmware for internal microcontroller peripherals. Firmware applications involving asynchronous external events as well as interrupt exception processing are covered. Other topics may include analog signal acquisition, minimizing program latency, identifying run-time errors, and interpreting manufacturer documentation.