使用汇编点亮单片机LED灯
#define GPIOEOUT 0xC001E000
#define GPIOEOUTENB 0xC001E004
#define GPIOEALTFN0 0xC001E020
.text //代码段的开始
.global _start
_start: //地址标签,也可以作为函数名
//配置GPIOE13为GPIO模式
ldr r0,=GPIOEALTFN0 //r0 = 0xC001E020
ldr r1,[r0] //r1 = *r0
ldr r2,=3<<26 //r2 = 3<<26
mvn r3,r2 //r3 = ~r2
and r1,r1,r3 //r1 = r1 & r3
str r1,[r0] //*r0 = r1
//配置GPIOE13为输出功能
ldr r0,=GPIOEOUTENB //r0 = 0xC001E004
ldr r1,[r0] //r1 = *r0
ldr r2,=1<<13 //r2 = 1<<13
orr r1,r1,r2 //r1 = r1|r2
str r1,[r0] //*r0 = r1
//GPIOE13输出低电平
ldr r0,=GPIOEOUT //r0 = 0xC001E000
ldr r1,[r0] //r1 = *r0
ldr r2,=1<<13 //r2 = 1<<13
mvn r3,r2 //r3 = ~r2
and r1,r1,r3 //r1 = r1 & r3
str r1,[r0] //*r0 = r1
loop: //地址标签
//GPIOE13输出低电平
ldr r0,=GPIOEOUT //r0 = 0xC001C000
ldr r1,[r0] //r1 = *r0
ldr r2,=1<<13 //r2 = 1<<13
mvn r3,r2 //r3 = ~r2
and r1,r1,r3 //r1 = r1 & r3
str r1,[r0] //*r0 = r1
//延时一会
bl delay //delay()
//GPIOE13输出高电平
ldr r0,=GPIOEOUT //r0 = 0xC001E000
ldr r1,[r0] //r1 = *r0
ldr r2,=1<<13 //r2 = 1<<13
orr r1,r1,r2 //r1 = r1 | r2
str r1,[r0] //*r0 = r1
//延时一会
bl delay //delay()
b loop //跳转到loop
delay:
mov r0,#0x2000000 //r0=0x2000000
delay_loop:
sub r0,r0,#1 //r0=r0-1
cmp r0,#0 //检测r0 == 0
bne delay_loop //有条件的跳转,若r0跟0是不相等,则跳转到delay_loop;否则不跳转
bx lr //函数返回
.end //代码段的结束