The Microcontroller course follows the Digital Logic course, but it can be used independently. It targets second-semester university students, and it assumes some knowledge of digital design and some exposure to basic programming in C, Java, or a related language.
This course is built around a series of hands-on design projects that illustrate and reinforce the concepts presented in the readings and lectures. Initial projects introduce the ARM architecture and Assembly language programming, and later projects use C and introduce interrupts, the AXI bus, and the many on-chip and on-board peripherals.
Xilinx’s free SDK tool is used for design entry and to program and debug the Blackboard. A standard hardware definition file makes all Blackboard’s sensors and ports available as memory-mapped peripherals, so no knowledge of hardware design is needed. By the end of the course, students are able to write ARM Assembly programs, use the ARM interrupt system, and write higher-level C programs to access all on-chip peripherals.
Module 1. Introduction to Microprocessors, Assembly Programming, and the Xilinx tools
Introduction to the Xilinx SDK tool, the Blackboard, and Assembly language programming
Module 2. Controlling LED brightness with a PWM signal
Assembly language programming using subroutines and the stack; controlling LED brightness using a PWM signal
Module 3. Timer counter modules
Using the processor's triple timer counter (TTC) modules; creating a polling loop; driving I/O signals to create an user interface using buttons and LEDs
Module 4. Using UARTs
Configuring the UART and exchanging data with the PC; basic UART management subroutines; controlling GPIO devices using the UART
Module 5. Using Interrupts
Configuring ARMs General Interrupt Controller (GIC); accessing ARMs global timer module using interrupts; accessing FPGA-connected GPIO signals using interrupts
Module 6. Using the SPI and I2C bus
SPI and I2C communications using interrupts
Module 7. Working with Servomotors
Using the ARM's timers and interrupts to create servomotor PWM signals