LED控制程序分析

LED控制程序分析

目的:

学习如何用C语言控制GPIO端口.

电路分析:

   QQ2440上接有4个LED灯.按LED灯的顺序.分别连接在GPIO端口,GPB5,GPB6,GPB7,GPB8四个管脚之上.



 当某一管脚(nLed1-nLed4)置低时,使电路接地,使其跟3.3v电源之间有压差,Led电路被导通,电流流经Led发光二极管使其点亮.
 当某一管脚(nLed1-nLed4)置高时,电路被切断.Led发光二极管被熄灭 .
 因此,驱动只要对某个GPIO管脚置高,置低就会控发光二极管的点亮和熄灭


硬件常识

Poll-up(上拉)

C语言编程控制GPIO:

 S3C24X0有117个复用功能输入/输出端口引脚 ,并且按A~H分组.同组内由一个寄存器控制器.
 Port A (GPA)  23个输出端口
 Port B (GPB)  11个输入/输出端口
 Port C (GPC)  16个输入/输出端口
 Port D (GPD)  16个输入/输出端口
 Port E  (GPE) 16个输入/输出端口
 Port F  (GPF)  8个输入/输出端口
 Port G (GPG) 16个输入/输出端口
 Port H (GPH)  11个输入/输出端口
 复用表示,多个驱动可以同时控制一个GPIO端口

 每个端口在使用前需要配置.
– 如设是否是输出,输入端口,是电平控制模式,还是上拉控制模式
 S3C2410的GPIO端口本身没有直接映射到地址空间上.而且需要通过GPIO数据寄存器进行读取和写入.
 因此对GPIO的控制要分二步.
– 初始化时要配置GPIO端口,这个需要通过配置寄存器来完成,每一组对一个配置寄存器,如A组的配置是GPACON,B组是GPBCON
– 使用时需要用到GPIO数据寄存器,每一组对应一个配置寄存器,如A组是GPADAT,B组是GPBDAT
– GPIO端口还可以配置成上拉寄存器模式,分别是GPAUP~GPHUP但在本例中不需要,
– GPIO还可以配置成中断触发脚,本例也不没采用这一模式

 在本例中,leds 使用了B组的5-8管脚, 即GPB5~GPB8
 如果要控制IO口GPB5~GPB8,那么涉及到的端口控制寄存器有GPBCON,GPFBAT和GPBUP。

寄存器详细说明

首先要对对应的GPB端口设置为输出的类型,这个需要配置GPBCON 寄存


然后需要使用DAT寄存器,设置对应位为0或1.GPBDAT[0]表示 GPB0的端口的值,依次类推.



GPIO的控制程序
 一次性GPBCON把GPB5-GPB8的值对应位全部置为0x01 (即output)
//即相应值为10101010000000000(二进制),即 0x154000
   rGPBCON |= 0x154000;
 一次性把4个灯全部置亮,根据电路分析.可以即把4个位全置0即可
 rGPBCON =0; //点亮
 rGPBCON =0xFFFFFFF; //熄灭
 只点亮,或熄灭某一个灯
因为4个灯的连线是有规律里,因此完全可以写一个宏来点亮,或熄灭某一个LED灯
#define LED_ON(n)  (rGPBDAT&=~(1<<(n+4))) //置某一位为0, n取值为 1-4.
#define LED_OFF(n)  (rGPBDAT|= (1<<(n+4))) //置某一位为1,


 
课堂练习
用ADS写一个走马灯程序,即依次点亮,熄灭一个LED,周而复始.不停执行.

你可能感兴趣的:(编程,C++,c,C#,D语言)