s3c2440 GPIO (转)

PART1:

 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时则使用上拉电阻。
PART2:
1.GPIO简介:  
   GPIO(通用输入/输出端口)是相对于芯片而言的,如果在对应的芯片存在GPIO引脚则可以通过读这些引脚来获取引脚的变化(即:引脚的高低电平的变化).
   在S3C2410芯片中存在117个I/O端口,共分为A~H共8组分别为GPA~~GPH,在S3C2440中存在130个I/O端口,共分为A~J9组名分别为GPA~GPJ,配置这些端口相应的寄存器(GPXCON, x=A~H/J),设置引脚是用于输入/输出,或者是用于特殊功能.
1.1通过寄存器来访问引脚:
    1.GPXCON寄存器:
        GPXCON(x=A~~H/J)寄存器用于设置相应引脚的功能是输入/输出,还是特殊功能或保留不用。
         在功能配置方面PORTA与PORTB~PORTH/J有所不同,GPACON寄存器中每一位对应一个引脚(共23位),当某位被设置为0是,对应该位引脚被设置为输出引脚(可以用于写入),此时我们可以对GPADAT寄存器(用于写引脚)进行写操作,当某位被设置为1时(相应引脚为地址线/或用于控制),此时GONADAT无用.
         PORTB~PORTH/J对寄存器操作完全相同,GPXCON每2位对应一个引脚:
         00--输入。 01--输出。10--特殊功能。11--保留不用。
    2.GPXDAT寄存器:
        GPXDAT用于读/写引脚,当配置GPXCON寄存器设置某引脚为输入时,读此寄存器可以得知相应引脚的变化,当配置GPXCON寄存器设置某引脚为输出时,通过写此此寄存器可以是相应引脚产生高低电平变化.
   3.GPXUP寄存器:
         当某位为1时,相应引脚无内部上拉电阻;为0是,相应引脚使用内部上拉电阻;
1.2通过软件访对GPIO的访问:
#define GPBCON        (*(volatile unsigned long *)0x56000010)
/*0x56000010:为S342440的GPBCON地址 */
#define GPBDAT         (*(volatile unsigned long *)0x56000014)
/*0x56000014:为S342440的GPBDAT地址*/
#define  GPB_OUT      (1<<(2*5)) 
/*此处为设置GPBCON对应第五位引脚的值其值为01----对应GPBCON展开值为0000010000000000*/                   
GPBCON = GPB_OUT; //设置GPB5为输出
GPBDAT  &= ~(1<<5);  //向GPB5输出低电平
PS:GPIO各端口的寄存器地址对考s3c2440之datasheet。

你可能感兴趣的:(c,IO)