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语言控制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,周而复始.不停执行.