一、GPIO说明
GPIO(General Purpose I/O ports)即通用输入/输出口。我们在实际应用中,不管是接LCD、接键盘,控制流水灯等等应用,都离不开对I/O的操作。可以说,GPIO的操作是所有硬件操作的基础。
S3C2440共有130个I/0端口,共分九组,分别为:GPA、GPB、...、GPJ。我们可以通过寄存器来操作这些IO。S3C2440共有三种寄存器,分别为GPxCON、GPxDAT、GPxUP。GPxCON用于选择引脚功能;GPxDAT用于读/写引脚数据;GPxUp用于确定是否使用内部上拉电阻。需要注意的是,A组没有GPAUP寄存器,即A组I/O口无上拉电阻选择功能
1、GPxCON
A组I/O口的GPxCON比较特殊,GPACON中每位对应一根引脚(共23根)。当某位设置为0时,相应引脚为输出引脚。反之,为相应引脚为地址线或用于地址控制,此时GPADAT无用。
B组~J组的I/O在寄存器操作方面完全相同。GPxCON中每两位控制一根引脚:00表示输入、01表示输出、10表示特殊功能、11保留不用。
2、GPxDAT
GPxDAT用于读/写引脚数据:当引脚设置为输出时,则写其寄存器相应位可令此引脚输出高电平或低电平;当此引脚设置为输入时,则读此寄存器相应位引脚的电平状态为高还是低。
3、GPxUP
GPxUP用来设置相应引脚是否使用上拉电阻。某位为0时则使用上拉电阻;某位为1时则不使用上拉电阻。
二、开发环境
IDE环境:ADS1.2
开发板:TX2440硬件接线图:LED1---GPF0,共阳接法,若点亮LED,只需给相应为低电平。
LED2---GPF1
LED3---GPF2
LED4---GPF3
三、源码及分析
//======================================================================
// 工程名称: LED.mcp
// 功能描述: 用GPIO控制四个LED
// IDE环境: ADS v1.2
// 组成文件: main.c
//======================================================================
//====================================================
// 包含头文件区
//====================================================
#include "2440addr.h"
#include "2440lib.h"
#include "option.h"
#include "def.h"
#include "uart.h"
#define LED1ON 0xFE //LED1点亮值为0xFE(低电平点亮)
#define LED2ON (LED1ON<<1) //LED2点亮值为LED1左移1位
#define LED3ON (LED1ON<<2) //LED3点亮值为LED2左移1位
#define LED4ON (LED1ON<<3) //LED4点亮值为LED3左移1位
extern unsigned int PCLK;
void usDelay(unsigned long time)
{
U32 i,j;
for (i = time; i > 0; i--)
for (j = 50; j > 0; j--);
}
void Main(void)
{
rGPFCON = (rGPFCON | 0xFFFF) & 0xFFFFFF55; //GPF0--GPF3设置为output
rGPFUP = 0xFFFF;
rGPFDAT = 0x0F; //GPF低4位初始化为1
while(1)
{
rGPFDAT = LED1ON; //点亮LED1
usDelay(10000);
rGPFDAT = LED2ON; //点亮LED2
usDelay(10000);
rGPFDAT = LED3ON; //点亮LED3
usDelay(10000);
rGPFDAT = LED4ON; //点亮LED4
usDelay(10000);
}
}
测试结果:依次点亮LED1--4 ,全部熄灭,在依次点亮。