一、GPIO 寄存器定义
1.#define GPCON(x) __REG2(0x56000000, (x) * 0x10)
这句是定义 2410 的 GPIO 的控制寄存器,注意:__REG2 的参数是寄存器的物理地址,这个物理地址经
_REG2 宏转换为虚拟地址,对照 2410 的手册可以得到一下对应关系:
GPCON(1) ------ PORT A 0x56000000
GPCON(2) ------ PORT B 0x56000010
GPCON(3) ------ PORT C 0x56000020
……
GPCON(8) ------ PORT H 0x56000070
2.#define GPDAT(x) __REG2(0x56000004, (x) * 0x10)
这句是定义 2410 的 GPIO 的数据寄存器,定义方法同 GPCON 宏。
GPDAT(1) ------ PORT A 0x56000004
GPDAT(2) ------ PORT B 0x56000014
GPDAT(3) ------ PORT C 0x56000024
……
GPDAT(8) ------ PORT H 0x56000074
3.#define GPUP(x) __REG2(0x56000008, (x) * 0x10)
这句是定义 2410 的 GPIO 的上拉电阻屏蔽/激活寄存器,定义方法同 GPCON 宏。
GPUP(1) ------ PORT A 0x56000008
GPUP(2) ------ PORT B 0x56000018
GPUP(3) ------ PORT C 0x56000028
……
GPUP(8) ------ PORT H 0x56000078
二、GPIO 端口号定义
以 GPIO_G12 来说明在内核头文件$(KERNEL_INCLUDE)/asm-arm/arch/s3c2410.h 中是如何来定义 IO
port 的端口号的。定义 GPIO 端口主要涉及到以下几个宏:
#define MAKE_GPIO_NUM(p, o) ( (p << GPIO_PORT_SHIFTT) | (o << GPIO_OFS_SHIFT))
#define GPIO_G12 MAKE_GPIO_NUM(PORTG_OFS, 12)
GPIO_PORT_SHIFTT 值为 8,代表 GPIO 组号在整个 GPIO 端口号(如 GPIO_G12)字段中的位移
GPIO_OFS_SHIFT 值为 0,代表 GPIO 组内偏移号在整个 GPIO 端口号(如 GPIO_G12)字段中的位移
s3c2410 有 117 个多功能 input/output port pins。分为以下八组:
评论1