- 論壇徽章:
- 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;
}
請高手幫忙解釋一下,謝了! |
|