
Discover the ARM Cortex-M general purpose input/output module, including GPI versus special purpose input/output, port and pin conventions, and how to use APB and HP buses, plus navigating datasheets.
Enable clock access to gpio port a, configure pa5 as output, and write to the output data register to drive the pin, illustrating gpio registers, rcc, and bus concepts.
Explore building a gpio output driver in ARM assembly by creating symbolic register names, calculating base addresses with offsets, and initializing the hp1 enable, mode, and output data registers.
Create a clock-based delay subroutine to blink an LCD by toggling a GPIO output on and off, using a loop with flag updates and branch instructions for timed delays.
Master using the BSRR register to set and reset a GPIO pin on the sdm 32 board with ARM assembly, turning pin 5 on and off for LCD blinky demo.
Develop a gpio input driver by configuring port c pin 13 as input and enabling its clock via rcc, then read the input data register for the active-low button.
Develop an arm assembly gpio input driver that reads a push button and loops to turn the lcd on or off via get input and lcd on/off subroutines.
Learn to write a simple ARM assembly program in CubeIDE for the SDM32, from creating a project and main.s to using directives, labels, a loop, and debugging registers and branches.
Develop a bare-metal gpio driver in ARM assembly by locating memory-mapped registers, enabling clocks, setting mode and data registers, and using symbolic base addresses and offsets.
This lecture guides building a GPIO driver in ARM assembly, starting from main, initializing the driver subroutine, enabling GPIO pin five as output, configuring the LCD, and returning to main.
Convert Keil uVision arm assembly to CubeIDE gcc assembler by adapting directives, symbol naming, and the reset handler, then build, debug, and run on stm32 using the same logic.
Explore the uart and its serial data transfer, where each character is framed by a start bit and stop bits, using 5–8 data bits with optional parity and baud rate.
Assign symbolic names for the UART registers and configure UART2 on APB1 by enabling clocks, setting the alternate function mode, and selecting AFR L for PA2.
Apply an arm assembly uart initialization subroutine by enabling gpio a, setting the alternate function pin, enabling the usart on apb1, and configuring baud rate and control registers.
Write an ARM assembly subroutine to transmit a character through UART by passing input in R0, spinning until the TX FIFO is not full, then writing to the data register.
Test the uart transmit subroutine by loading characters into a register, calling the write character routine, and sending yes followed by carriage return and line feed to the terminal.
Configure pa3 for uart rx, monitor rx full flag via status register, read the data register, and use 115200 baud to drive the lcd when a key is pressed.
Combine uart rx and tx in a shared project by configuring alternate functions for pa2 and pa3, enabling rx and tx, and testing transmit and receive.
Learn to call uart subroutines from C by exporting assembly functions, importing them, and binding standard C library functions like printf and puts to the uart.
Harness cortex system tick timer as a time base counting a 24-bit down counter, auto-reloading, while configuring three registers to schedule 1 second or 1 millisecond actions at 16 MHz.
Create a Cortex-M systick timer driver by symbolically naming registers (systick_ctrl, systick_reload, systick_curr, systick_cal) and configuring clock source, count flag, and interrupt enable for an lcd display.
Learn to implement the systick init subroutine in ARM assembly, enable GPIO A clock, configure pin 5 as output, and manage systick load and current registers.
Develop and test a systick based delay subroutine in ARM assembly, using a 16 megahertz clock and cycle counts to produce precise delays and a 1-second blink.
Explore how general purpose timers use internal and external clock sources to create delays, count events, and support one-shot and periodic operation with various bit widths and prescalers.
Develop a timer driver by configuring timer 2 registers (PSC, ARR, CR, SR) to achieve a 1 Hz delay, using RCC APB1 clock enable and data sheet base addresses.
Develop a general purpose timer driver in ARM assembly for the Tiva, enabling the timer clock, configuring the timer, and implementing a wait and LED blink delay.
Explore how analog to digital converters translate physical quantities into digital numbers via transducers and voltage or current outputs, and how bit resolution and V ref set the ADC steps.
Develop an assembly adc driver by assigning symbolic adc registers, enabling adc1 on apb2, configuring the conversion sequence, and driving the oled when the value crosses a threshold.
Write an adc driver for ARM assembly: enable clocks, configure adc1 via mode and control registers, set gpio modes, issue software trigger, and read conversion results with C equivalents.
Test the ADC driver by reading a 12-bit value, compare it to a 3000 threshold, and trigger the LCD when crossed. Learn to call assembly subroutines from C language.
Explore Arm Cortex-M general purpose input/output modules, ports and pins, and how GPI and special purpose IO enable control of LCDs, switches, and motors while using APB and HP buses.
Develop a gpio driver for TM4C123 by enabling Port F clock via the APB bus, configuring data and direction registers, enabling digital function, and driving red, blue, and green LEDs.
Learn to implement a gpio output driver for an arm microcontroller by enabling port clocks, configuring port f as output, and driving the lcd via the port f data register.
Learn how to toggle GPIO outputs to make the LCD blink by implementing a delay function, using symbolic names and a delay subroutine calibrated for a 60 megahertz MCU.
Configure a gpio input on a microcontroller, enable internal pull-ups for switches on port f, unlock pf0, and define symbolic names for active-low switch states.
Develop an assembly gpio input driver by unlocking gpio, configuring pf1 as output, enabling digital and pull-ups for switches, reading button states, and driving red or green lcd through subroutines.
Learn to write a cortex-m systick timer driver by creating symbolic names for the control, reload, and current value registers, and configuring the clock source and timer enable.
This lecture guides writing the SysTick timer driver in ARM assembly, covering initializing and enabling the system timer, configuring the reload value, clearing the current value, and clock source selection.
Learn to implement SysTick timer delay subroutines in ARM assembly, using the reload register and cycle counts to create 10 ms and longer delays at 16 MHz.
Explore the UART protocol and its asynchronous serial framing, including start and stop bits, parity options, data widths of five to eight bits, and baud rate definitions.
Learn to assign symbolic names to uart registers on the tim4c microcontroller, enable clocks via system control, and configure gpio alternate functions for uart0 rx and tx paths.
Implement an ARM UART driver from the ground up by configuring RCC clocks, GPIO alternate functions, and baud rate registers in assembly and C, including init, read, and write subroutines.
Test the uart driver by sending ascii keys and implementing a two-character new line routine, with symbolic key names for carriage return, line feed, backspace, and delete.
Welcome to the ARM Assembly Programming Ground Up™ 2 course.
With a programming based approach, this course is designed to give you a solid foundation in bare-metal firmware development for ARM-based microcontrollers . The goal of this course is to teach you how to navigate the microcontroller reference manual and datasheet to extract the right information to professionally build peripheral drivers and firmware. To achieve this goal, no libraries are used in this course, purely ARM Assembly Language.
By the end of this course you will be able configure microcontroller peripherals like ADC, UART,PWM, GPIO, TIMERS, etc. You will also master the ARM architecture, ARM Instruction Set Architecture (ISA) and building professional embedded firmware in assembly for ARM processors.
Specially Designed For People Who Hate Copy/Paste
Listen. If you don’t like “Copy/Paste” you’re not alone. I can’t stand it either. I’d literally rather have a piece of code that I wrote from scratch that doesn’t work than someone else’s working code I copied and pasted.
And that’s why I’ve spent months designing and recording this course in which I show you how to locate every single register used and the meaning of every hexadecimal value written into the register.
Some Highlights
----------------------------
Write ADC Drivers in Assembly Language
Write UART Drivers in Assembly Language
Write GPTM Drivers in Assembly Language
Write GPIO Drivers in Assembly Language
Master the ARM Instruction Set
Master the Thumb and Thumb-2 Instruction Sets
REMEMBER : I have no doubt you will love this course. Also it comes with a FULL money back guarantee for 30 days! So put simply, you really have nothing to loose and everything to gain.
Sign up and lets start toggling some register bits