6410之点其他的灯,让其闪烁

代码如下:

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

你可能感兴趣的:(6410之点其他的灯,让其闪烁)