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
的大小。这意味着:
(addr & 0xF0000000) + BB_OFFSET = 0x42000000
- 然后:
(bit << 2) = 0x00000002
- 别名很简单:
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。
谁能解释一下,在下面这个用于计算 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
的大小。这意味着:
(addr & 0xF0000000) + BB_OFFSET = 0x42000000
- 然后:
(bit << 2) = 0x00000002
- 别名很简单:
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。