Embedded Systems - Introduction to ARM Cortex-M Microcontrollers

The best way to understand what you will learn in this class is to list the labs you will complete and the example projects we will build. You will complete each lab first in simulation and then on the real board. For each module we will design a system and you will build and test a similar system.

YouTube video showing the kit and some completed labs

Educational Objectives

  • Microcomputer Architecture: Understanding how the computer stores and manipulates data (characters, integers, and fixed-point numbers), the basic arithmetic and logical operations performed by the computer. The understanding of embedded systems (a system with the computer hidden inside) using modular design and abstraction.

  • Programming: Assembly language and C programming: considering both function and style.

  • Software execution: Understanding how the computer executes instructions (fetch opcode, fetch operand, read data, operate, and write data).

  • Microcontroller fundamentals: The use of a microcontroller (strategic use of RAM ROM and I/O) Microcontrollers typically have a little RAM and a lot of ROM. Globals, locals and the heap go in RAM. Constants and programs go in ROM.

  • Debugging: Debugging and verification using a simulator and on the microcontroller (embedded systems typically do not have a print function). Debugging techniques, such as breakpoints, scanpoints, profiles, monitors, voltmeters, oscilloscopes, logic analyzers.

  • I/O: How input/output actually happens (the students wire up analog and digital signals to the TM4C123 and measure them with a voltmeter), synchronization, including switches, LEDs, LCDs, DACs, ADCs, and serial ports.

  • I/O Abstraction: The implementation of an I/O driver (a set of programs that perform input/output).

  • Variables: Understanding, from an architecture standpoint, how local variables and parameters work (e.g., space on the stack is dynamically created, the local variable is accessed using stack-pointer relative addressing, then the space is deallocated).

  • Analog inputs: Analog to digital conversion (ADC), e.g., the students interface a slide potentiometer to the ADC and write software that measures the position of the slide, creating a display like “1.234 cm”.

  • Real-time processing: Interrupt synchronization, real-time ADC sampling (periodic timer interrupts), introduction to multithreaded programming.

  • Analog outputs: Digital to analog conversion (DAC), used to make simple sounds.

  • Communication Systems: Introduction to communication, e.g., the students interface two microcontrollers together so that data can be sent from one system to another.

  • Data Structures: Design and implementation of elementary data structures, such as linked lists, stacks and queues.