您的位置:首页 > 其它

点亮LED灯

2015-08-25 19:32 211 查看
led灯的原理图一般有以下两种:





GPIO的英文全称为General-Purpose IO ports,也就是通用IO接口。在嵌入式系统中常常有数量众多,但是结构却比较简单的外部设备/电路,对这些设备/电路,有的需要CPU为之提供控制手段,有的则需要被CPU用做输入信号。而且,许多这样的设备/电路只要求一位,即只要有开/关两种状态就够了。比如,控制某个LED灯亮与灭,或者通过获取某个引脚的电平属性来达到判断外围设备的状态。对这些设备/电路的控制,使用传统的串行口或并行口都不合适。所以在微控制器芯片上一般都会提供一个“通用可编程IO接口”,即GPIO。接口至少有两个寄存器,即“通用IO控制寄存器”与“通用IO数据寄存器”。数据寄存器的各位都直接引到芯片外部,而对这种寄存器中每一位的作用,即每一位的信号流通方向,则可以通过控制寄存器中对应位独立地加以设置。比如,可以通过通用IO控制寄存器设置某个GPIO引脚的属性为输入、输出或其他特殊功能。除了控制寄存器和数据寄存器外,还有上拉寄存器(现不关注)。

(1) 端口控制寄存器:大多数的引脚都可复用,所以必须对每个引脚进行配置。端口控制寄存器(GPnCON)定义了每个引脚的功能。

(2) 端口数据寄存器:如果端口被配置成了输出端口,可以向GPnDAT的相应位写数据。如果端口被配置成了输入端口,可以从GPnDAT的相应位读出数据。

(3) 端口上拉寄存器:端口上拉寄存器控制了每个端口组的上拉/下拉电阻的使能/禁止。根据对应位的0/1组组合,设置对应端口的上拉/下拉电阻功能是否使能。如果端口的上拉电阻被使能,无论在哪种状态(输入、输出、DATAn、EINTn等)下,上拉电阻都起作用。

以S3C2440为例。

S3C2440A共有130个多功能GPIO口,共分为9组:



与GPIOA有关的寄存器共有4个,如下:



我们只关心控制寄存器GPACON和数据寄存器GPADAT:





上面两张图说明了GPACON寄存器和GPADAT寄存器每一位的作用,因此只需要往这两个寄存器中写入合适的数值就可以达到控制GPIOA的目的。

LED驱动设计:

①设置GPIO控制寄存器,把引脚设置为输出功能

②根据原理图设置GPIO数据寄存器,点亮LED灯

开发板TQ2440汇编代码:

#define GPBCON 0x56000010
#define GPBDAT 0x56000014
light_led:
ldr r0, =GPBCON
ldr r1,=0x15400
str r1, [r0]

ldr r0, =GPBDAT
ldr r1,=0x6BF
str r1, [r0]


芯片S3C6410在点亮led前还需要进行外设基地址初始化,这是通过设置CP15的寄存器来实现的。

CP15中有peripheral port memory remap寄存器,该寄存器用于初始化外设基地址。

汇编代码:

set_peri_port:
ldr r0,=0x70000000
orr r0,r0,#0x13
mcr p15,0,r0,c15,c2,4
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: