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

问题描述

谁能解释一下,在下面这个计算 TI msp432P401R 板的位带别名偏移地址的公式中,为什么我们应该添加(addr & 0xF0000000) + BB_OFFSET,这个值 {{1} } ?

((addr & 0xFFFFF) << 5)

如果 msp432 中的 #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) ) 变量具有 addr 的大小。这意味着:

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

我的计算有误吗?

非常感谢,

解决方法

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

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

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