- 论坛徽章:
- 0
|
(下面的代码都是运行于ARM平台的)
看如下定义的EDRV_REGB_WRITE,为何写寄存器要先将寄存器写到EdrvInstance_l.m_pIoAddr地址处,然后再将值写到EdrvInstance_l.m_pIoAddr+4处?
#define EDRV_REGB_WRITE(bReg_p, bVal_p) do { \
writeb(bReg_p, EdrvInstance_l.m_pIoAddr); \
writeb(bVal_p, EdrvInstance_l.m_pIoAddr + 4); \
} while (0)
下面是定义EDRV_REGB_READ的代码,为何读寄存器值之前要这么写一下EdrvInstance_l.m_pIoAddr?
#define EDRV_REGB_READ(bReg) EdrvRegbRead(bReg)
static inline BYTE EdrvRegbRead(BYTE bReg_p)
{
BYTE bVal;
writeb(bReg_p, EdrvInstance_l.m_pIoAddr); // 为何读之前要这么写一下?
bVal = readb(EdrvInstance_l.m_pIoAddr + 4);
return bVal;
}
请高手帮忙解释一下,谢了! |
|