一、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。分为以下八组:
|