- Module 1: ARM Introduction
- Discusses the contents of the course and provides an intro to ARM the company
- Module 2: Sample SoCs and Multiple Processor Cores
- Provides high-level descriptions of several common ARM-based SoCs and goes over the concepts of multiple cores and multi-processing (SMP vs. AMP)
- Module 3: ARM Processor Architectures
- Goes through the ARM architecture evolution (v5, v6, v7 and v8) as well as the architecture profiles (-A, -R and -M)
- Module 4: Architecture Introduction
- Provides a high-level overview of the instruction sets supported and introduces the concepts of privilege levels and exception levels
- Module 5: Integer Registers
- Discusses the integer registers of the ARM architecture, the purpose and behavior of register banking and the Program Status Register
- Module 6a: Instructions - ARM
- Provides info on the ARM assembler syntax, numerous data processing instructions including some on bit manipulation as well as saturation effects
- Module 6b: Instructions - ARM
- Goes through the branch, conditional branch and branch/link instructions as well as how condition codes on instructions behave
- Module 7: Instructions - Thumb/2, Jazelle, VZP and Neon
- Covers the differences between ARM and Thumb/Thumb2 instructions and then goes through several examples of conditional execution in Thumb (If/Then/Else); Jazelle, Vector Floating Point and Neon instructions are also discussed at a high level
- Module 8a: Memory Accesses
- Discusses alignment of memory accesses, endianness and numerous LDR/STR addressing examples including a discussion on pre- versus post-indexing; memory copy examples are also covered
- Module 8b: Memory Accesses
- Defines the supported memory types and then goes through access ordering, several memory barrier examples, a semaphore synchronization example as well as the behavior of self-modifying code; Shareability domains are also covered
- Module 9: Privilege, Modes, State, TrustZone and more
- Covers Privilege Levels, the basic processor modes, provides an overview of TrustZone, the implemented virtualization extensions, and the concept of coprocessors
- Module 10: Exceptions and Interrupts
- Goes over the behavior of exceptions and interrupts including some info on common interrupt controllers
- Module 11: Memory Management and Protection
- Discusses the memory management behavior typical in the -M profile as well as the memory protection scheme commonly used in the -R profile
- Module 12: Paging
- Provides a great introduction to managing and protecting memory using paging (typical in -A profile), includes a discussion of TLBs and their management
- Module 13: v7 LPAE and Hardware Virtualization
- Covers the implementation of large physical addresses in the v7 architecture as well as the affects of hardware virtualization on paging
- Module 14: Debug and Analysis Support
- Discusses the different levels of debug that can be used and how each works
- Module 15: Caches
- Goes over the basics of caching, including cache line states, coherency and cache policies; Then shows Cortex-A9 caches as an example
- Module 16: The Different Processor Cores
- Provides an overview of some of the older ARM processor families, including descriptions of their instruction pipelines
- Module 17: Cortex-M0/1/3/4 and Cortex-R4/5
- Discusses the feature set and instruction pipelines of the Cortex-M0, Cortex-M0+, Cortex-M3/-M4 as well as the Cortex-R4 and Cortex-R5
- Module 18: Cortex-A8/9/5
- Discusses the feature set and instruction pipelines of the Cortex-A8, Cortex-A9 and Cortex-A5
- Module 19: Cortex-A15/7/12
- Discusses the feature set and instruction pipelines of the Cortex-A15, Cortex-A7 and Cortex-A12
- Module 20: AMBA - The Buses
- Provides a brief discussion on AMBA 3, AMBA 4 as well as AXI and the coherency extensions added to this interconnect
- Module 21: Power Management and Booting
- Covers an intro to power management on ARM-based systems as well as a generic boot process
- Module 22: Software Development
- Provides an overview of the software development process which includes a discussion of the purposes of the compiler and linker as well as object files, libraries (static vs dynamic) and the ARM ABI (Application Binary Interface)
- Module 23: Software Optimization
- Discusses what to optimize as well as the order of effort applied for code optimization; Includes topics such as: pointer aliasing, loop termination, parameter passing, compiler options, inline examples, variable types, data layout and packing of structures, base pointer optimization and more. Also briefly touches on some profiling tools and what they are useful for.