TI MSP432P401 板的位带别名偏移地址

Bit-Band Alias Offset Address for TI MSP432P401 board

谁能解释一下,在下面这个用于计算 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) )

如果 MSP432 中的 addr 变量具有 word == uint32_t 的大小。这意味着:

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

我的计算有误吗?

非常感谢,

bit-bandable 常规地址的每一位 space 映射到 bit-band 区域中的 32 位位置。

(addr & 0xFFFFF) 部分屏蔽低阶地址位以从可位分段常规地址区域的开头获取 32 位 字偏移量<< 5部分将offset乘以32得到bit-band region中addr的least-significant bit的bit-offset[=14] =]

有关位带地址如何映射到常规地址的说明,请参阅 Cortex-M4 Technical Reference Manual - Bit-Banding