GPIO接口编程
一、S3C2410有117个I/O口,共分为A~H共8组,可以通过设置寄存器来确定某个引脚用于输入、输出还是其他特殊功能。
和I/O操作相关的寄存器:
1、GPxCON
用于配置引脚功能;
GPACON中每一位对应一个引脚(共23根),0——输出,1——用于地址线或地址控制,一般GPACON通常设为全1,以便访问外部存储器件;
其余I/O组的GPCON寄存器中每两位控制一个引脚,00——输入、01——输出、10——特殊功能、11——保留;
2、GPxDAT
GPxDAT用于读/写引脚,当引脚被设为输入时,读此寄存器可知相应引脚的电平状态;
当引脚被设为输出时,写此寄存器相应位可令此引脚输出高电平或低电平;
3、GPxUP
某位为1,相应引脚无内部上拉电阻;
为0,相应引脚使用上拉电阻;
上拉电阻的作用:当I/O引脚处于三态时,它的电平状态由上拉电阻、下拉电阻确定。
二、S3C2410的寄存器地址列表如下:
GPACON 0x5600_0000
GPADAT 0x5600_0004
GPBCON 0x5600_0010
GPBDAT 0x5600_0014
GPBUP 0x5600_0018
GPCCON 0x5600_0020
GPCDAT 0x5600_0024
GPCUP 0x5600_0028
GPDCON 0x5600_0030
GPDDAT 0x5600_0034
GPDUP 0x5600_0038
GPECON 0x5600_0040
GPEDAT 0x5600_0044
GPEUP 0x5600_0048
GPFCON 0x5600_0050
GPFDAT 0x5600_0054
GPFUP 0x5600_0058
GPGCON 0x5600_0060
GPGDAT 0x5600_0064
GPGUP 0x5600_0068
GPHCON 0x5600_0070
GPHDAT 0x5600_0074
GPHUP 0x5600_0078
三、引脚操作
以GPB为例,
1、首先通过宏定义将寄存器与其地址关联起来
#define GPBCON (*(volatile unsigned long *)0x56000010)
#define GPBDAT (*(volatile unsigned long *)0x56000014)
2、配置管脚功能
GPBCON = (1 << (5*2)); //GPB5设置为输出
3、引脚输出
GPBDAT &= ~(1 << 5); //GPB5输出低电平
一、S3C2410有117个I/O口,共分为A~H共8组,可以通过设置寄存器来确定某个引脚用于输入、输出还是其他特殊功能。
和I/O操作相关的寄存器:
1、GPxCON
用于配置引脚功能;
GPACON中每一位对应一个引脚(共23根),0——输出,1——用于地址线或地址控制,一般GPACON通常设为全1,以便访问外部存储器件;
其余I/O组的GPCON寄存器中每两位控制一个引脚,00——输入、01——输出、10——特殊功能、11——保留;
2、GPxDAT
GPxDAT用于读/写引脚,当引脚被设为输入时,读此寄存器可知相应引脚的电平状态;
当引脚被设为输出时,写此寄存器相应位可令此引脚输出高电平或低电平;
3、GPxUP
某位为1,相应引脚无内部上拉电阻;
为0,相应引脚使用上拉电阻;
上拉电阻的作用:当I/O引脚处于三态时,它的电平状态由上拉电阻、下拉电阻确定。
二、S3C2410的寄存器地址列表如下:
GPACON 0x5600_0000
GPADAT 0x5600_0004
GPBCON 0x5600_0010
GPBDAT 0x5600_0014
GPBUP 0x5600_0018
GPCCON 0x5600_0020
GPCDAT 0x5600_0024
GPCUP 0x5600_0028
GPDCON 0x5600_0030
GPDDAT 0x5600_0034
GPDUP 0x5600_0038
GPECON 0x5600_0040
GPEDAT 0x5600_0044
GPEUP 0x5600_0048
GPFCON 0x5600_0050
GPFDAT 0x5600_0054
GPFUP 0x5600_0058
GPGCON 0x5600_0060
GPGDAT 0x5600_0064
GPGUP 0x5600_0068
GPHCON 0x5600_0070
GPHDAT 0x5600_0074
GPHUP 0x5600_0078
三、引脚操作
以GPB为例,
1、首先通过宏定义将寄存器与其地址关联起来
#define GPBCON (*(volatile unsigned long *)0x56000010)
#define GPBDAT (*(volatile unsigned long *)0x56000014)
2、配置管脚功能
GPBCON = (1 << (5*2)); //GPB5设置为输出
3、引脚输出
GPBDAT &= ~(1 << 5); //GPB5输出低电平