实现3个LED亮灭
.text
.global _start
_start:
@----------------------------------1: enable GPIOF and GPIOE clock in AHB4 bus register RCC_MP_AHB4ENSETR ( base=0x5000 0000 offset=0xA28)
ldr r0, =0x50000A28
ldr r1,[r0]
orr r1, r1,#(0x3<<0x4) @enable both GPIOE and GPIOF
str r1,[r0]
@----------------------------------2: init GPIOF
@@set mode register to output
ldr r0, =0x50007000
ldr r1,[r0]
bic r1,r1,#(0x3<<0x14)
orr r1, r1,#(0x1<<0x14)
str r1,[r0]
@@set output type register to output push-pull
ldr r0, =0x50007004
ldr r1,[r0]
bic r1,r1,#(0x1<<0xa)
@orr r1, r1,#(0x1<<0xa)
str r1,[r0]
@@set output speed to low
ldr r0, =0x50007008
ldr r1,[r0]
bic r1,r1,#(0x3<<0x14)
@orr r1, r1,#(0x1<<0xa)
str r1,[r0]
@@set output to no pull-up or pull-down
ldr r0, =0x5000700c
ldr r1,[r0]
bic r1,r1,#(0x3<<0x14)
@orr r1, r1,#(0x1<<0xa)
str r1,[r0]
@----------------------------------3: init GPIOE(for both bit 8 and 10)
@@set mode register to output
ldr r0, =0x50006000
ldr r1,[r0]
bic r1,r1,#(0x1B<<0x10)
orr r1, r1,#(0x5<<0x10)
str r1,[r0]
@@set output type register to output push-pull
ldr r0, =0x50006004
ldr r1,[r0]
bic r1,r1,#(0x5<<0x8)
str r1,[r0]
@@set output speed to low
ldr r0, =0x50006008
ldr r1,[r0]
bic r1,r1,#(0x1B<<0x10)
str r1,[r0]
@@set output to no pull-up or pull-down
ldr r0, =0x5000600c
ldr r1,[r0]
bic r1,r1,#(0x1B<<0x10)
str r1,[r0]
@----------------------------------4: light LED1,2,3
loop:
bl LED1_ON
bl DELAY
bl LED1_OFF
bl DELAY
bl LED2_ON
bl DELAY
bl LED2_OFF
bl DELAY
bl LED3_ON
bl DELAY
bl LED3_OFF
bl DELAY
b loop
@----------------------------------5: functions
LED1_ON:
@@write 1 to output data register to turn LED1 on
ldr r0, =0x50006014
ldr r1,[r0]
orr r1, r1,#(0x1<<0xa)
str r1,[r0]
mov pc, lr
LED1_OFF:
@@write 0 to output data register to turn LED1 off
ldr r0, =0x50006014
ldr r1,[r0]
bic r1,r1,#(0x1<<0xa)
str r1,[r0]
mov pc, lr
LED2_ON:
@@write 1 to output data register to turn LED2 on
ldr r0, =0x50007014
ldr r1,[r0]
orr r1, r1,#(0x1<<0xa)
str r1,[r0]
mov pc, lr
LED2_OFF:
@@write 0 to output data register to turn LED2 off
ldr r0, =0x50007014
ldr r1,[r0]
bic r1,r1,#(0x1<<0xa)
@orr r1, r1,#(0x1<<0xa)
str r1,[r0]
mov pc, lr
LED3_ON:
@@write 1 to output data register to turn LED3 on
ldr r0, =0x50006014
ldr r1,[r0]
orr r1, r1,#(0x1<<0x8)
str r1,[r0]
mov pc, lr
LED3_OFF:
@@write 0 to output data register to turn LED3 off
ldr r0, =0x50006014
ldr r1,[r0]
bic r1,r1,#(0x1<<0x8)
str r1,[r0]
mov pc, lr
DELAY:
ldr r0,=0x10000000
FOR:
sub r0,#0x1
cmp r0,#0
bne FOR
mov pc, lr
.end