代码如下:
#define CONFIG_PERIPORT_BASE 0x70000000
#define CONFIG_PERIPORT_SIZE 0x13
#define WTCON 0x7E004000
#define GPMCON 0x7F008820
#define GPMDAT 0x7F008824
.global _start
_start:
/*告诉CPU 外设的地址*/
ldr r0, =CONFIG_PERIPORT_BASE
orr r0, r0, #CONFIG_PERIPORT_SIZE
mcr p15,0,r0,c15,c2,4
/*关闭看门狗*/
ldr r0, =WTCON
mov r1, #1
str r1,[r0]
/*点灯nLED1 <==> GPM0*/
/*点灯nLED2 <==> GPM1*/
/*点灯nLED3 <==> GPM2*/
/*点灯nLED4 <==> GPM3*/
/*GPMCON 0x7F008820
**GPMDAT 0x7F008824
*/
/*设置GPM0到GPM3为输出引脚*/
ldr r0, =GPMCON
ldr r1, =0x1111
str r1, [r0]
/*设置GPM0的电平输出为低,点亮*/
ldr r0, =GPMDAT
mov r1, #0
loop: //这里做循环,led将不断的进行闪烁
str r1, [r0]
add r1,r1,#1
cmp r1,#7
beq loop
cmp r1,#11
beq loop
cmp r1,#13
beq loop
cmp r1,#14
beq loop
cmp r1,#16
moveq r1,#0 //如果相等,将r1清0
bl delay
b loop
delay: //做的延时操作,不然led灯会闪烁的非常快
mov r2,#0x10000
delay_loop:
sub r2,r2,#1
cmp r2,#0
bne delay_loop //如果不相等,则进行循环
mov pc,lr
halt:
b halt
bl 和 b的区别:
bl在进入子程序之前,会将下一条指令的地址存放在lr中.mov pc, lr就是表示从自程序返回,继续运行下面的指令。