ARM学习笔记13——LED驱动程序设计
2014-01-27 14:03
316 查看
首先我们要根据开发板原理图得到控制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配置为输出口的代码段为:
禁止GPC1_3上、下拉电阻功能代码片段:
控制GPC1_3输出高电平代码片段
控制GPC1_3输出低电平代码片段
如果实现LED灯的亮、灭闪烁,在LED亮和灭之后都需要加入一定的延时,否则我们看不到灯的闪烁。 我们可以用类似如下的代码实现延时:
第一步是配制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
相关文章推荐
- 【HeadFirst 设计模式学习笔记】13 MVC分析
- 字符驱动程序设计学习笔记4-2
- 设计模式学习笔记(13)——享元模式
- 【HeadFirst 设计模式学习笔记】13 MVC分析
- ok6410学习笔记(18.linux串口驱动程序设计)
- 嵌入式Linux驱动学习笔记(一)------第一个LED驱动程序
- 【设计模式】学习笔记13:组合模式(Composite)
- 学习笔记_Java_day12_设计模式MVC(13).JavaWeb的三层框架(14)
- python学习笔记13-类的设计
- OpenCV 2 学习笔记(13): 算法的基本设计模式<4> :使用Model-View-Controller模式创建一个应用程序
- ARM学习笔记6-裸机之GPIO-LED
- ARM底层学习笔记-裸板实验程序解析-点亮LED
- 【学习笔记javascript设计模式与开发实践(职责链模式)----13】
- 设计模式学习笔记(13)——享元模式
- java/android 设计模式学习笔记(13)---享元模式
- java学习笔记-设计模式13(享元模式)
- ARM底层学习笔记-裸板实验程序解析-点亮LED
- 【设计模式】学习笔记13:组合模式(Composite)
- ARM学习笔记11——GNU ARM汇编程序设计
- java 设计模式学习笔记(13) - 适配器模式