[tiny4412]u-boot启动后点灯(二)

在uboot启动起来后,通过System.map 可以得到   43e00000 T _start

接下来,通过汇编实现对led的控制。

#define GPM4BASE  0x11000000
#define GPM4CON   0x2e0
#define GPM4DAT   0x2e4

.align 2
.text
.global _start

_start:
	
	mov ip, sp
	push {fp, ip, lr, pc}
	sub fp, ip, #4

	@set GPM4[0:3] as output
	ldr r0, =GPM4BASE
	ldr r1, [r0, #GPM4CON]
	bic r1, #0xff
	bic r1, #0xff00
	orr r1, #0x11
	orr r1, #0x1100
	str r1, [r0, #GPM4CON]

loop:	
	ldr r0,=GPM4BASE

	@led on all
	ldr r1,[r0,#GPM4DAT]
	bic r1,#0x0f
	str r1,[r0,#GPM4DAT]
	
	bl delay

	@led on off
	ldr r1,[r0,#GPM4DAT]
	orr r1,#0x0f
	str r1,[r0,#GPM4DAT]
	
	bl delay

	b loop
delay:
	stmfd sp!,{r0-r12, lr}	
	mov r0, #0x1000000
checkdelay:
	cmp r0,#1
	beq end
	sub r0,#1
	b checkdelay

end:
	ldmfd sp!, {r0-r12, pc}

 

arm-linux-gcc -c -mapcs led.S
arm-linux-ld led.o -Ttext=0x50000000 -o arm
arm-linux-objcopy -O binary arm arm.bin      //从arm可执行文件中拷贝出除过头信息以外的二进制可执行文件到arm.bin
arm-linux-objdump -d arm > arm.S

发送到开发板,实现led灯闪烁效果

你可能感兴趣的:(Tiny4412)