请任何人解释一下,在下面的公式中计算TI MSP432P401R板的位带别名偏移地址,为什么我们应该添加(addr & 0xF0000000) + BB_OFFSET
这个值((addr & 0xFFFFF) << 5)
?
#define TA0CTL_ADDR (0x40000000)
/* Bit Band Region is offset from Peripheral/SRAM */
#define BB_OFFSET (0x02000000)
/* Macro Function to Read Memory */
#define HWREG32(addr) (*((volatile uint32_t *)(addr)))
#define BITBAND_ADDR(addr, bit) ( (addr & 0xF0000000) + BB_OFFSET + ((addr & 0xFFFFF) << 5) + (bit << 2) )
如果MSP432addr
中的变量具有. 代表着:word == uint32_t
(addr & 0xF0000000) + BB_OFFSET = 0x42000000
- 进而:
(bit << 2) = 0x00000002
- 别名将很简单:
0x42000000 + 0x00000002 = 0x42000002
?所以,我提出了我的问题:为什么我们还需要添加((addr & 0xFFFFF) << 5)
到(addr & 0xF0000000) + BB_OFFSET
?
我的计算错了吗?
提前谢谢了,