代码如下:
#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就是表示从自程序返回,继续运行下面的指令。