S3C2440 GPIO
通用输入输出接口的简称,
S2440一共有130个GPIO口,分为A~J共9组:GPA,GPB,GPC……GPJ;通过设置相应的寄存器,可以选择某个GPIO口是用于输入,输出还是特定其他特殊功能。例如可以设置GPH6口用于输入输出,或者是串口;
每组GPIO(GPA-GPJ),都可以通过3个寄存器来控制与访问,这三个寄存器分别是
- GPxCON:GPIO配置寄存器------两位
- GPxDAT:GPIO数据寄存器------一位
- GPxUP:上拉电阻控制寄存器–一位
GPxCON设置示例:
LED驱动程序设计
程序:
#include "def.h"
#include "option.h"
#include "2440addr.h"
#include "2440lib.h"
#include "2440slib.h"
//================================
//延时函数
void dely(U32 tt)
{
U32 i;
for(;tt>0;tt--)
{
for(i=0;i<10000;i++){}
}
}
int Main(int argc, char **argv)
{
int i;
U8 key;
U32 mpll_val=0;
int data;
mpll_val = (92<<12)|(1<<4)|(1);
//init FCLK=400M, so change MPLL first
ChangeMPllValue((mpll_val>>12)&0xff, (mpll_val>>4)&0x3f, mpll_val&3);
ChangeClockDivider(key, 12);
//ChangeClockDivider(1,1); // 1:2:4 FCLK:HCLK:PCLK
// rCLKDIVN=0x4; // 1:4:4
//ChangeMPllValue(82,2,1); //FCLK=135.0Mhz
//ChangeMPllValue(82,1,1); //FCLK=180.0Mhz
//ChangeMPllValue(161,3,1); //FCLK=202.8Mhz
//ChangeMPllValue(117,1,1); //FCLK=250.0Mhz
//ChangeMPllValue(122,1,1); //FCLK=260.0Mhz
//ChangeMPllValue(125,1,1); //FCLK=266.0Mhz
//ChangeMPllValue(127,1,1); //FCLK=270.0Mhz
//MMU_EnableICache();
//MMU_EnableDCache();
MMU_DisableICache();
MMU_DisableDCache();
//设置GPIO的模式,GPIOB全部引脚
rGPBCON = 0x155555;
//设置数据0110
data = 0x06;
while(1)
{
//数据左移五位,011000000,2,3为暗
rGPBDAT = (data<<5);
dely(120);
data =~data;
}
return 0;
}