前期准备:
- 查阅x210bv3s.pdf得到开发板LED模块的原理图:
从原理图中了解到:其中三颗LED分别接在GPJ0_3、GPJ0_4、GPJ0_5,还有一颗LED接在PWMTOUT1。下面我们继续查阅手册
- 查阅x210cv3.pdf得到PWMTOUT1对应的引脚原理图:
由此我们得到了PWMTOUT1所对应的引脚为GPD0_1。
3. 查阅S5PV210_UM_REV1.1.pdf手册,得到引脚对应的寄存器地址以及相关寄存器的设置:
从手册中,我们可知一下三个重要的参数:
1. GPJ0CON的寄存器地址为: 0xE0200240,GPJ0DAT的寄存器地址为:0xE0200244
2. GPJ0_3~GPJO_5中对应位设置为0001则为Output模式
3.结合LED原理图得知,当对应的引脚输出低电平时,则LED灯就点亮,否则就熄灭
同样道理,我们找到GPD0相关的说明文档:
可知,GPD0CON对应寄存器的地址为:0xE02000A0。GPD0DAT对应寄存器的地址为:0xE02000A4,对应位的设置参数与上面的一致。
至此,我们对于这个开发板中LED的分析工作就告一段落,下面就开始我们的编程。
编程实现:
- 目的:实现四颗LED同时点亮和熄灭的循环闪烁。
- 代码:
#define GPJOCON 0xE0200240
#define GPJ0DAT 0xE0200244
#define GPD0CON 0xE02000A0
#define GPD0DAT 0xE02000A4
.global _start
_start:
//GPJ0_3 ~ GPJ0_5 are output
ldr r1,=GPJOCON
ldr r0,=0x00111000
str r0,[r1]
//GPD0_0 is output
ldr r0,=0x0010
ldr r1,=GPD0CON
str r0,[r1]
bling:
//led1-3 are on
ldr r0,=(0<<3 | 0<<4 | 0<<5)
ldr r1,=GPJ0DAT
str r0,[r1]
//led4 is on
ldr r0,=0<<1
ldr r1,=GPD0DAT
str r0,[r1]
bl delay
//led1-3 are off
ldr r0,=(1<<3 | 1<<4 | 1<<5)
ldr r1,=GPJ0DAT
str r0,[r1]
led4 is off
ldr r0,=1<<1
ldr r1,=GPD0DAT
str r0,[r1]
bl delay
b bling
delay:
ldr r2,=9999999
ldr r3,=0x0
delay_loop:
cmp r2, r3
sub r2, r2, #1
bne delay_loop
mov pc,lr
3. 通过交叉编译工具得到led.bin
4. 通过DNW工具,将bin写入到地址D0020010中(查手册可知),这个LED点亮实验就算是完成了