前几天看了下TINY6410光盘中自带的2.6.38内核中的按键驱动程序,有读取IO内存的句子,地址为宏S3C64XX_GPNDAT,我无聊在SI跟进去展开了一下宏,可是发现宏展开后的地址跟6410硬件手册中的GPNDAT地址不一样。
下面是我在SI中跟着展开的宏定义:
#define S3C64XX_GPNDAT (S3C64XX_GPN_BASE + 0x04)
#define S3C64XX_GPN_BASE S3C64XX_GPIOREG(0x0830)
#define S3C64XX_GPIOREG(reg) (S3C64XX_VA_GPIO + (reg))
#define S3C64XX_VA_GPIO S3C_ADDR_CPU(0x00000000)
#define S3C_ADDR_CPU(x) S3C_ADDR(0x00500000 + (x))
#define S3C_ADDR(x) (S3C_ADDR_BASE + (x))
#define S3C_ADDR_BASE 0xF6000000
算出来展开为:(((0xF6000000 + (0x00500000 + (0x00000000))) + (0x0830)) + 0x04)
而硬件手册中的GPNDAT地址为 0x7F008834
两个不相等,但是这个按键驱动是可以正常驱动硬件的。请问是怎么回事?