1

请任何人解释一下,在下面的公式中计算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

  1. (addr & 0xF0000000) + BB_OFFSET = 0x42000000
  2. 进而:(bit << 2) = 0x00000002
  3. 别名将很简单:0x42000000 + 0x00000002 = 0x42000002?所以,我提出了我的问题:为什么我们还需要添加((addr & 0xFFFFF) << 5)(addr & 0xF0000000) + BB_OFFSET

我的计算错了吗?

提前谢谢了,

4

1 回答 1

0

可位带常规地址空间的每个位都映射到位带区域中的一个 32 位位置。

(addr & 0xFFFFF)部分屏蔽低阶地址位,以获得从可位带常规地址区域开始的 32 位字偏移量。<< 5部分将偏移量乘以 32 以获得位带区域中的最低有效位的位偏移量。addr

有关位带地址如何映射到常规地址的说明,请参阅Cortex-M4 技术参考手册 - 位带

于 2020-12-21T08:45:13.843 回答