ARM学习笔记13——LED驱动程序设计
首先我们要根据开发板原理图得到控制LED灯的引脚是哪个,我们现在以LED1为例,我们已经知道LED1由S5PV210的GPC1_3控制,因此我们按如下步骤进行:
第一步是配制S5PV210的GPC1_3为输出口;
第二步我们禁止GPC1_3的上、下拉电阻功能;
第三步就是控制GPC1_3输出高电平或低电平。
要想对GPC1进行配置,那我们需要知道其配置寄存器的地址,根据S5PV210的编程手册我们可以知道:
GPC1的配置寄存器地址是:0xE0200080
GPC1数据寄存器地址是:0xE0200084
GPC1上、下拉控制寄存器地址是:0xE0200088
同样由S5PV210的编程手册得知,要将GPC1_3配置为输出口,只要将地址单元0xE0200080(配置寄存器)的BIT15设置为0001即可。
根据ARM体系结构的特点:运算编写在寄存器中完成,要想访问存储器必须用到加载ldr/str指令。要想操作地址单元0xE0200080(GPC1配置寄存器)的内容,必须将0xE0200080放到ARM寄存器(R0-Rn)中,然后用ldr/str指令访问该单元(GPC1配置寄存器)的内容。 那么,如何将0xE0200080放到寄存器中呢?我们这里可以采用比较直观的方法,通过伪指令ldr来完成,即:ldr r0,-=0xE0200080.
将GPC1_3配置为输出口的代码段为:
ldr r2,=0xE0200080 @将地址0xE0200080放到ARM寄存器R2
ldr r3,[r2] @加载地址单元0xE0200080的内容到R3中
mov r0,#0xf @将立即数0xf放到R0
bic r3,r3,r0,lsl #12 @将R3的BIT[15:12]清零
mov r1,#0x1 @将1放到ARM寄存器R1中
orr r3,r3,r1,lsl #12 @将R3的BIT15:BIT12=0001
str r3,[r2] @将R3的内容存储到R2指向的地址单元(0xE0200080)
禁止GPC1_3上、下拉电阻功能代码片段:
ldr r2,=0xE0200088
mov r0,#0x3
ldr r3,[r2]
bic r3,r3,r0,lsl #6
str r3,[r2]
控制GPC1_3输出高电平代码片段
ldr r2,=0xE0200080
mov r0,#1
ldr r3,[r2]
orr r3,r3,r0,lsl #3
str r3,[r2]
控制GPC1_3输出低电平代码片段
ldr r2,=0xE0200080
mov r0,#1
ldr r3,[r2]
bic r3,r3,r0,lsl #3
str r3,[r2]
如果实现LED灯的亮、灭闪烁,在LED亮和灭之后都需要加入一定的延时,否则我们看不到灯的闪烁。 我们可以用类似如下的代码实现延时:
delay:
mov r1,#0xf00000
sub r1,r1,#1 cmp r0,#0 bne delay mov pc,lr