ARM学习笔记13——LED驱动程序设计

时间:2021-09-14 21:40:56

  首先我们要根据开发板原理图得到控制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 #    @将R3的BIT[15:12]清零
mov r1,#0x1         @将1放到ARM寄存器R1中
orr r3,r3,r1,lsl #    @将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 #
str r3,[r2]

  控制GPC1_3输出高电平代码片段

ldr r2,=0xE0200080
mov r0,#
ldr r3,[r2]
orr r3,r3,r0,lsl #
str r3,[r2]

  控制GPC1_3输出低电平代码片段

ldr r2,=0xE0200080
mov r0,#
ldr r3,[r2]
bic r3,r3,r0,lsl #
str r3,[r2]

  如果实现LED灯的亮、灭闪烁,在LED亮和灭之后都需要加入一定的延时,否则我们看不到灯的闪烁。 我们可以用类似如下的代码实现延时:

delay:
  mov r1,#0xf00000
  sub r1,r1,#
  cmp r0,#
  bne delay
  mov pc,lr