日期:2014-05-16  浏览次数:20648 次

__REG,__REG1,__REG2
今天看了几段2410的代码,其中头文件定义部分,有以下定义
#define   bMEMCTL(Nb)       __REG1(MEM_CTL_BASE+(Nb))
#define   bNAND_CTL(Nb)       __REG(NAND_CTL_BASE+(Nb))
还看到有__REGb,和__REG2
这些__REG,__REG1,__REG2,__REGb都代表什么意思,在什么地方查看呢?


------解决方案--------------------
硬件相关的,应该跟地址有关吧..

在Hardware.h \include\asm-arm\arch-lh7a40x\hardware.h 里

typedef struct { volatile u32 offset[4096]; } __regbase;
# define __REGP(x) ((__regbase *)((x)&~4095))-> offset[((x)&4095)> > 2]
# define __REG(x) __REGP(io_p2v(x))
typedef struct { volatile u16 offset[4096]; } __regbase16;
# define __REGP16(x) ((__regbase16 *)((x)&~4095))-> offset[((x)&4095)> > 1]
# define __REG16(x) __REGP16(io_p2v(x))
typedef struct { volatile u8 offset[4096]; } __regbase8;
# define __REGP8(x) ((__regbase8 *)((x)&~4095))-> offset[(x)&4095]
# define __REG8(x) __REGP8(io_p2v(x))
#endif

/* Let 's kick gcc 's ass again... */
# define __REG2(x,y) \
( __builtin_constant_p(y) ? (__REG((x) + (y))) \
: (*(volatile u32 *)((u32)&__REG(x) + (y))) )

# define __PREG(x) (io_v2p((u32)&(x)))