请教一个2.4下面读s3c2410 gpio的函数的理解的问题
如题:在2.4里面,这个函数是:read_gpio_bit();也就是读gpio。看了下kernel,这个函数实际上是:
#define read_gpio_bit(x) ((GPDAT(GRAB_PORT((x))) & (1<<GRAB_OFS((x)))) >> GRAB_OFS((x)))
其中GRAB_PORT((x))是取出gpio port号,GRAB_OFS((x))是取出gpio pin号
下面看GPDAT:
#define GPDAT(x) __REG2(0x56000004, (x) * 0x10)
再看__REG2:
# define __REG2(x,y) ( __builtin_constant_p(y) ? (__REG((x) + (y))) \
: (*(volatile u32 *)((u32)&__REG(x) + (y))) )
这就要看__REG:
#define __REG(x) __REGP(io_p2v(x))
然后是__REGP:
#define __REGP(x) ((__regbase *)((x)&~4095))->offset[((x)&4095)>>2]
到这一句,看不懂了,怎么就操作到2410的gpio寄存器上去了呢?通过source insight 查,再也查不到了,到底了。。。
貌似这个__regbase的定义是:typedef struct { volatile u32 offset[4096]; } __regbase;看上去就是普通的数组结构体。
所以完全看不见有什么readb之类的函数出现啊。。。。好疑惑
页:
[1]