Our flagship offering to universities worldwide is the Arm University Program Education Kit series.
These self-contained educational materials offered exclusively and at no cost to academics and teaching staff worldwide. They’re designed to support your day-to-day teaching on core electronic engineering and computer science subjects. You have the freedom to choose which modules to teach – you can use all the modules in the Education Kit or only those that are most appropriate to your teaching outcomes.
Our Efficient Embedded Systems Design Education Kit covers the fundamentals of Embedded Systems design, including how the theories and concepts can be applied in the design and efficient programming of embedded processor interfacing with both analog and digital input and output peripehrals. A full description of the education kit can be found here.
To produce students who can design and efficiently program Arm-based embedded systems.
You are free to fork or clone this material. See LICENSE.md for the complete license.
Arm is committed to making the language we use inclusive, meaningful, and respectful. Our goal is to remove and replace non-inclusive language from our vocabulary to reflect our values and represent our global ecosystem.
Arm is working actively with our partners, standards bodies, and the wider ecosystem to adopt a consistent approach to the use of inclusive language and to eradicate and replace offensive terms. We recognise that this will take time. This course has been updated to replace references to non-inclusive language. We recognise that some of you will be accustomed to using the previous terms and may not immediately recognise their replacements. Please refer to the following example:
• When introducing the AMBA 3 AHB-Lite Protocols, we will use the term ‘Manager’ instead of ‘Master’ and ‘Subordinate’ instead of ‘Slave’.
This course may still contain other references to non-inclusive language; it will be updated with newer terms as those terms are agreed and ratified with the wider community.
Contact us at education@arm.com with questions or comments about this course. You can also report non-inclusive and offensive terminology usage in Arm content at terms@arm.com.
Includes: Lecture, Activity and Answer Key
This lesson introduces embedded systems as specialized computer systems designed to enhance performance, functionality, and reliability in larger systems while remaining cost-effective. It highlights how these systems operate in real-time, handle constraints like size, power, and environmental conditions, and use microcontrollers (MCUs) for efficient, affordable design. With an emphasis on programming in C and hands-on learning, the lesson explores practical applications such as bike computers and motor control units, showing the integration of hardware and software for optimal performance.
This lesson covers fundamental principles of software design for embedded systems, focusing on concurrency, scheduling, and effective development processes. It explains key scheduling methods, including static cyclic, run-to-completion, and dynamic preemptive schedulers, as well as their trade-offs in response time and complexity. The lecture emphasizes the importance of structured software engineering practices, including requirement analysis, design before coding, incremental testing, and postmortem reviews to improve future projects. Real-time operating systems (RTOS) and their components are also discussed as vital tools for managing tasks and ensuring predictable system behavior.
Includes: Lecture, Activity and Answer Key
Includes: Lecture, Activity and Answer Key
This lesson introduces the architecture and features of the Arm Cortex-M4 processor, emphasizing its efficiency, low power consumption, and suitability for embedded systems. It covers key components, including the Nested Vectored Interrupt Controller (NVIC), Wakeup Interrupt Controller (WIC), Memory Protection Unit (MPU), and the debug system, which enhance performance and reliability. The presentation explains the processor’s registers, such as general-purpose registers, the Program Counter (PC), and status registers, highlighting their role in program execution and interrupt handling. Designed for real-time applications, the Cortex-M4 balances high performance with energy efficiency, making it ideal for diverse embedded applications.
This lesson explores the Cortex-M4 processor’s memory architecture, bit-band operations, endianness, and instruction sets. It highlights the processor’s memory map, which includes regions for code, data, peripherals, and external devices, offering flexibility and ease of porting. Bit-band operations are introduced as an efficient way to manipulate single bits directly, reducing instruction count and avoiding hazards. The lesson also explains endianness (little vs. big) and the advantages of the Thumb-2 instruction set for high efficiency and reduced code size. Additionally, it provides an overview of the Cortex-M4 instruction set, supporting versatile embedded system applications.
Includes: Lecture, Assignment, Lab, and Code
This lesson delves into how C programs are translated into assembly language, focusing on compiler stages, memory allocation, and register usage. It explains how variables and data are stored in memory (static, automatic, or dynamic), the roles of core registers based on the AAPCS standard, and how pointers and arrays are implemented. It also covers function prologues and epilogues, outlining how activation records manage function calls and returns. The presentation emphasizes understanding assembly to optimize performance, debug issues, and handle control flow structures such as conditionals and loops.
Includes: Lecture, Assignment, Lab, and Code
This lesson introduces interrupts in microcontroller systems, explaining their efficiency and responsiveness compared to polling. It covers the sequence of interrupt handling, the role of the Nested Vectored Interrupt Controller (NVIC), and the differences between interrupts and exceptions. Timing analysis and prioritization strategies are discussed, along with best practices for designing programs with interrupts, such as managing race conditions, ensuring data integrity, and using the volatile
directive. The lesson emphasizes balancing responsiveness with system complexity for effective embedded system design.
Includes: Lecture, Assignment, Lab, and Code
This lesson explores the basics of General Purpose Input/Output (GPIO), focusing on how digital pins can serve as inputs or outputs for embedded systems. It covers configuring GPIO pins, using pull-up and pull-down resistors for stable input values, and synchronizing external signals with the internal clock. The lecture also explains how GPIO drivers and layers in C programming enable pin control and presents practical examples like toggling LEDs and driving speakers. Emphasis is placed on voltage levels, current considerations, and efficient interfacing for real-world applications.
Includes: Lecture, Assignment, Lab, and Code
This lesson covers analog-to-digital (ADC) and digital-to-analog (DAC) conversion, essential for bridging analog physical signals and digital systems. It explains ADC properties, such as resolution, sampling, and the Nyquist criterion, along with techniques like successive approximation and flash conversion. The lecture also introduces sample-and-hold devices, DAC applications (e.g., waveform generation), and analog comparators for tasks like power failure detection. Practical examples, including battery monitoring and depth measurement, highlight how these techniques are applied in embedded systems.
Includes: Lecture, Assignment, Lab, and Code
This lesson discusses the various types of timer peripherals in microcontrollers, including interrupt timers, PWM modules, low-power timers, real-time clocks, and SysTick timers. It explains key timer modes, such as input capture, output compare, and pulse-width modulation (PWM), and their applications, like measuring wind speed or controlling motor speed. The lecture emphasizes the versatility of timers for generating interrupts, tracking elapsed time, and producing precise signals, highlighting their importance in both high-performance and low-power embedded systems.
Includes: Lecture, Assignment, Lab, and Code
This lesson explores serial communication, emphasizing its efficiency over parallel methods for reduced cost, complexity, and scalability. It introduces asynchronous and synchronous communication, detailing protocols like UART, SPI, and I2C. Key concepts include full/half-duplex modes, data framing, error detection, and handling serial interfaces via polling or interrupts. Examples such as Secure Digital (SD) card access and I2C-based sensor communication highlight practical applications. The lecture concludes with a comparison of protocols based on speed, hardware requirements, and scalability for embedded systems.
Includes: Lecture, Assignment, Lab, and Code
Our flagship offering to universities worldwide is the Arm University Program Education Kit series.
These self-contained educational materials offered exclusively and at no cost to academics and teaching staff worldwide. They’re designed to support your day-to-day teaching on core electronic engineering and computer science subjects. You have the freedom to choose which modules to teach – you can use all the modules in the Education Kit or only those that are most appropriate to your teaching outcomes.
Our Efficient Embedded Systems Design Education Kit covers the fundamentals of Embedded Systems design, including how the theories and concepts can be applied in the design and efficient programming of embedded processor interfacing with both analog and digital input and output peripehrals. A full description of the education kit can be found here.
To produce students who can design and efficiently program Arm-based embedded systems.
You are free to fork or clone this material. See LICENSE.md for the complete license.
Arm is committed to making the language we use inclusive, meaningful, and respectful. Our goal is to remove and replace non-inclusive language from our vocabulary to reflect our values and represent our global ecosystem.
Arm is working actively with our partners, standards bodies, and the wider ecosystem to adopt a consistent approach to the use of inclusive language and to eradicate and replace offensive terms. We recognise that this will take time. This course has been updated to replace references to non-inclusive language. We recognise that some of you will be accustomed to using the previous terms and may not immediately recognise their replacements. Please refer to the following example:
• When introducing the AMBA 3 AHB-Lite Protocols, we will use the term ‘Manager’ instead of ‘Master’ and ‘Subordinate’ instead of ‘Slave’.
This course may still contain other references to non-inclusive language; it will be updated with newer terms as those terms are agreed and ratified with the wider community.
Contact us at education@arm.com with questions or comments about this course. You can also report non-inclusive and offensive terminology usage in Arm content at terms@arm.com.
Includes: Lecture, Activity and Answer Key
This lesson introduces embedded systems as specialized computer systems designed to enhance performance, functionality, and reliability in larger systems while remaining cost-effective. It highlights how these systems operate in real-time, handle constraints like size, power, and environmental conditions, and use microcontrollers (MCUs) for efficient, affordable design. With an emphasis on programming in C and hands-on learning, the lesson explores practical applications such as bike computers and motor control units, showing the integration of hardware and software for optimal performance.
This lesson covers fundamental principles of software design for embedded systems, focusing on concurrency, scheduling, and effective development processes. It explains key scheduling methods, including static cyclic, run-to-completion, and dynamic preemptive schedulers, as well as their trade-offs in response time and complexity. The lecture emphasizes the importance of structured software engineering practices, including requirement analysis, design before coding, incremental testing, and postmortem reviews to improve future projects. Real-time operating systems (RTOS) and their components are also discussed as vital tools for managing tasks and ensuring predictable system behavior.
Includes: Lecture, Activity and Answer Key
Includes: Lecture, Activity and Answer Key
This lesson introduces the architecture and features of the Arm Cortex-M4 processor, emphasizing its efficiency, low power consumption, and suitability for embedded systems. It covers key components, including the Nested Vectored Interrupt Controller (NVIC), Wakeup Interrupt Controller (WIC), Memory Protection Unit (MPU), and the debug system, which enhance performance and reliability. The presentation explains the processor’s registers, such as general-purpose registers, the Program Counter (PC), and status registers, highlighting their role in program execution and interrupt handling. Designed for real-time applications, the Cortex-M4 balances high performance with energy efficiency, making it ideal for diverse embedded applications.
This lesson explores the Cortex-M4 processor’s memory architecture, bit-band operations, endianness, and instruction sets. It highlights the processor’s memory map, which includes regions for code, data, peripherals, and external devices, offering flexibility and ease of porting. Bit-band operations are introduced as an efficient way to manipulate single bits directly, reducing instruction count and avoiding hazards. The lesson also explains endianness (little vs. big) and the advantages of the Thumb-2 instruction set for high efficiency and reduced code size. Additionally, it provides an overview of the Cortex-M4 instruction set, supporting versatile embedded system applications.
Includes: Lecture, Assignment, Lab, and Code
This lesson delves into how C programs are translated into assembly language, focusing on compiler stages, memory allocation, and register usage. It explains how variables and data are stored in memory (static, automatic, or dynamic), the roles of core registers based on the AAPCS standard, and how pointers and arrays are implemented. It also covers function prologues and epilogues, outlining how activation records manage function calls and returns. The presentation emphasizes understanding assembly to optimize performance, debug issues, and handle control flow structures such as conditionals and loops.
Includes: Lecture, Assignment, Lab, and Code
This lesson introduces interrupts in microcontroller systems, explaining their efficiency and responsiveness compared to polling. It covers the sequence of interrupt handling, the role of the Nested Vectored Interrupt Controller (NVIC), and the differences between interrupts and exceptions. Timing analysis and prioritization strategies are discussed, along with best practices for designing programs with interrupts, such as managing race conditions, ensuring data integrity, and using the volatile
directive. The lesson emphasizes balancing responsiveness with system complexity for effective embedded system design.
Includes: Lecture, Assignment, Lab, and Code
This lesson explores the basics of General Purpose Input/Output (GPIO), focusing on how digital pins can serve as inputs or outputs for embedded systems. It covers configuring GPIO pins, using pull-up and pull-down resistors for stable input values, and synchronizing external signals with the internal clock. The lecture also explains how GPIO drivers and layers in C programming enable pin control and presents practical examples like toggling LEDs and driving speakers. Emphasis is placed on voltage levels, current considerations, and efficient interfacing for real-world applications.
Includes: Lecture, Assignment, Lab, and Code
This lesson covers analog-to-digital (ADC) and digital-to-analog (DAC) conversion, essential for bridging analog physical signals and digital systems. It explains ADC properties, such as resolution, sampling, and the Nyquist criterion, along with techniques like successive approximation and flash conversion. The lecture also introduces sample-and-hold devices, DAC applications (e.g., waveform generation), and analog comparators for tasks like power failure detection. Practical examples, including battery monitoring and depth measurement, highlight how these techniques are applied in embedded systems.
Includes: Lecture, Assignment, Lab, and Code
This lesson discusses the various types of timer peripherals in microcontrollers, including interrupt timers, PWM modules, low-power timers, real-time clocks, and SysTick timers. It explains key timer modes, such as input capture, output compare, and pulse-width modulation (PWM), and their applications, like measuring wind speed or controlling motor speed. The lecture emphasizes the versatility of timers for generating interrupts, tracking elapsed time, and producing precise signals, highlighting their importance in both high-performance and low-power embedded systems.
Includes: Lecture, Assignment, Lab, and Code
This lesson explores serial communication, emphasizing its efficiency over parallel methods for reduced cost, complexity, and scalability. It introduces asynchronous and synchronous communication, detailing protocols like UART, SPI, and I2C. Key concepts include full/half-duplex modes, data framing, error detection, and handling serial interfaces via polling or interrupts. Examples such as Secure Digital (SD) card access and I2C-based sensor communication highlight practical applications. The lecture concludes with a comparison of protocols based on speed, hardware requirements, and scalability for embedded systems.
Includes: Lecture, Assignment, Lab, and Code
College