Microcontroller Architecture and GPIO Output ​
Complete Lab Manual
For the complete experiment including learning objectives, theoretical background, and detailed explanations, download the PDF manual: Download Experiment 4 PDF
Examples ​
The following examples illustrate the complete process of initializing Port F and controlling the on-board LEDs using Assembly language.
Example 1: Simple LED Blink ​
This example initializes Port F and toggles the Red LED (PF1) on and off using address masking with a software delay.
Address Masking for PF1:
0x40025000 + (0x02 << 2) = 0x40025008 AREA RESET, CODE, READONLY ; Code section
THUMB ; Use Thumb instruction set
EXPORT __main ; Export symbol
__main PROC
LDR R1, =0x400FE608 ; RCGCGPIO address
LDR R0, [R1] ; Read current value
ORR R0, R0, #0x20 ; Enable Port F clock
STR R0, [R1] ; Write back
NOP ; Small delay
NOP
LDR R1, =0x40025400 ; GPIODIR address
LDR R0, [R1] ; Read current value
ORR R0, R0, #0x02 ; Set PF1 as output
STR R0, [R1] ; Write back
LDR R1, =0x4002551C ; GPIODEN address
LDR R0, [R1] ; Read current value
ORR R0, R0, #0x02 ; Enable digital function for PF1
STR R0, [R1] ; Write back
loop LDR R1, =0x40025008 ; Masked DATA address for PF1
MOV R0, #0x02 ; Turn ON red LED (PF1)
STR R0, [R1] ; Write to GPIODATA
LDR R0, =1000000 ; Load delay count
BL DELAY ; Call delay
MOV R0, #0x00 ; Turn OFF red LED (PF1)
STR R0, [R1] ; Write to GPIODATA
LDR R0, =1000000 ; Load delay count
BL DELAY ; Call delay
B loop ; Repeat
ENDP
DELAY PROC
SUBS R0, R0, #1 ; Decrement counter
BNE DELAY ; Loop until zero
BX LR ; Return
ENDP
ENDExample 2: Cycle Through RGB Colors ​
This example extends the previous one by cycling through RGB LED colors (Red, Green, Blue) using a software delay.
Address Masking for PF1, PF2, PF3:
0x40025000 + ((0x02 | 0x04 | 0x08) << 2) = 0x40025038 AREA RESET, CODE, READONLY ; Code section
THUMB ; Use Thumb instruction set
EXPORT __main ; Export symbol
__main PROC
BL PF_Init ; Initialize Port F
loop
LDR R1, =0x40025038 ; Masked DATA address for PF1-PF3
MOV R0, #0x02 ; Turn ON red LED (PF1)
STR R0, [R1] ; Write to GPIODATA
LDR R0, =10000000 ; Load delay count
BL DELAY ; Call delay
MOV R0, #0x04 ; Turn ON blue LED (PF2)
STR R0, [R1]
LDR R0, =10000000
BL DELAY
MOV R0, #0x08 ; Turn ON green LED (PF3)
STR R0, [R1]
LDR R0, =10000000
BL DELAY
B loop ; Repeat
ENDP
DELAY PROC
SUBS R0, R0, #1 ; Decrement counter
BNE DELAY ; Loop until zero
BX LR ; Return
ENDP
PF_Init PROC
LDR R1, =0x400FE608 ; RCGCGPIO address
LDR R0, [R1] ; Read current value
ORR R0, R0, #0x20 ; Enable Port F clock
STR R0, [R1]
NOP ; Small delay
NOP
LDR R1, =0x40025400 ; GPIODIR address
LDR R0, [R1]
ORR R0, R0, #0x0E ; Set PF1-PF3 as outputs
STR R0, [R1]
LDR R1, =0x4002551C ; GPIODEN address
LDR R0, [R1]
ORR R0, R0, #0x0E ; Enable digital function for PF1-PF3
STR R0, [R1]
BX LR ; Return
ENDP
ENDTasks ​
Task 1: Adjust the Blink Rate ​
Modify the delay routine in Example 1 to change the blinking speed of the Red LED. Experiment with different delay values until the LED blinks at approximately 1 Hz (about one second ON and one second OFF).
Task 2: Cycle Through Multiple Colors ​
Expand Example 2 to include additional colors by combining the Red, Green, and Blue LEDs. Create a program that automatically cycles through all color combinations listed in the table above.
Hint: Use a loop to step through the color sequence repeatedly instead of writing separate code for each color.