AREA |.text|, CODE, READONLY, ALIGN=2
THUMB
EXPORT __main
__main
BL GPIO_Init
Blink
MOVW R1, #LED_GREEN
STR R1, [R2]
LDR R3, =ONESEC
BL Delay
MOVW R1, #LED_BLUE
STR R1, [R2]
LDR R3, =HSEC
BL Delay
MOVW R1, #LED_RED
STR R1, [R2]
LDR R3, =HSEC
BL Delay
MOVW R1, #LED_ORANGE
STR R1, [R2]
LDR R3, =FSEC
BL Delay
B Blink
GPIO_Init
LDR R0, =RCC_AHB1ENR ; R0 points to peripheral clock register
LDR R1, [R0] ; Load Peripheral clock register into R1
ORR R1, R1, GPIOIDEN ; Enable GPIO port D clock
STR R1, [R0] ; Store result back
LDR R0, =GPIOD_MODER ; R0 points to PORTD configuration register
LDR R1, =(MODER15_OUT | MODER14_OUT | MODER13_OUT | MODER12_OUT)
STR R1, [R0] ; Set pins 15,14,13,12 as output
MOV R1, #0
LDR R2, =GPIOD_ODR ; GPIO output data register
BX LR
Delay
SUBS R3, R3, #1
BNE Delay
BX LR
ALIGN
;-------------------------------
; Constants and Equates
;-------------------------------
RCC_BASE EQU 0x40023800
RCC_AHB1ENR EQU 0x40023830
GPIOD_BASE EQU 0x40020C00
GPIOD_MODER EQU 0x40020C00
GPIOD_ODR EQU 0x40020C14
GPIOIDEN EQU 1 << 3
MODER15_OUT EQU 1 << 30
MODER14_OUT EQU 1 << 28
MODER13_OUT EQU 1 << 26
MODER12_OUT EQU 1 << 24
LED_BLUE EQU 1 << 15
LED_RED EQU 1 << 14
LED_ORANGE EQU 1 << 13
LED_GREEN EQU 1 << 12
DELAY EQU 0x000F
ONESEC EQU 5333333
HSEC EQU 266667
FSEC EQU 106667
END
MOV Instruction: