我们来看看linux 3.10中三星的GPIO寄存器配置方法
我们先看看最前面的
#define S5PV210_GPA1(_nr) (S5PV210_GPIO_A1_START + (_nr))
S5PV210_GPIO_A1_START = S5PV210_GPIO_NEXT(S5PV210_GPIO_A0),
因为 #define S5PV210_GPIO_NEXT(__gpio) \
((__gpio##_START) + (__gpio##_NR) + CONFIG_S3C_GPIO_SPACE + 1)
S5PV210_GPIO_A1_START = S5PV210_GPIO_NEXT(S5PV210_GPIO_A0)
= ((S5PV210_GPIO_A0_START) + (S5PV210_GPIO_A0_NR) + CONFIG_S3C_GPIO_SPACE + 1)
= 0 + 8 + 0 + 1
= 9
S5PV210_GPIO_A0_START=0不用管
那么S5PV210_GPA1(3) = (S5PV210_GPIO_A1_START + (3))
= 9+3
= 12
我们来看芯片手册GPIO部分
?GPA0: 8 in/out port - 2xUART with flow control
?GPA1: 4 in/out port - 2xUART without flowcontrol or 1xUART with flow control
?GPB: 8 in/out port - 2x SPI
这说明S5PV210_GPA1(3)=12意思是GPA1_3是s5pv210的第12个IO,linux把cpu的所有GPIO当作统一编址的设备,GPA0_0地址是1,GPA1_3地址是12
根据芯片手册,我们得知,s5pv210的每个IO口占用4bitGPxCON,1bitGPxDAT,4bitGPxDRV
而每组IO口必定有CON、DAT、DRV、CONPDN、PUDPDN5个寄存器
阅读(2085) | 评论(0) | 转发(0) |