BitBand理解

2017-12-15  本文已影响0人  yuanliangx

1.为什么需要BitBand

  在51系列的单片机中可以通过P1.1=1这样的用法来设置P1口编号为1的引脚的电平,但是在STM32系列的单片机中不能直接设置某一个I/O口的电平,只能对某一个PORT口进行统一赋值,即遵循读--改--写的顺序进行,但是在这个操作的过程中容易出现异常情况。
https://scienceprog.com/bit-band-operations-with-arm-cortex-microcontrollers/
  于是就有个BitBand,即将某一个字节中一位与别名区的一个字相对应,这样可以通过直接给这个字赋值来直接修改与其对应的bit,提高修改的效率和准确性。

bit_band_memory_alias.jpg
  在STM32中有两个区域支持BitBand,分别是SRAM区和外设区(peripheral space),这两个区域和同名区的对应关系分别为:
SRAM:0x20000000(RAM_Base) ----- 0x20100000
同名区:0x22000000(RAM_BB_Base) ----- 0x23FFFFFF
外设: 0x40000000 ----- 0x40100000
同名区:0x42000000 ----- 0x43FFFFFF
http://www.micromouseonline.com/2010/07/14/bit-banding-in-the-stm32/

2.BitBand原理

  对于SRAM中的某个bit,该bit在位带别名区的地址:
AliasAddr = 0x22000000 + ((A‐0x20000000)8+n)4
= 0x22000000 + (A‐0x20000000)32 + n4 
  对于片上外设位带区的某个比特,该比特在位带别名区的地址:
AliasAddr = 0x42000000 + ((A‐0x40000000)8+n)4
= 0x42000000 + (A‐0x40000000)32 + n4 
  其中 A 为该比特所在的字节的地址,0 <= n <= 7,“4”表示一个字为 4 个字节,“8”表示一个字节中有 8 个比特。
  上式中,0x22000000 是同名区基地址(RAM_BB_BASE),0x20000000是内存区基地址(RAM_BASE),A是该比特所在的字节的地址,所以A‐0x20000000即为需要转化的bit所在的字节的地址与RAM基地址的差,(A‐0x20000000)8即为这个字节差对应的bit数目,n为需要修改的bit在该字节中的索引,((A‐0x40000000)8+n)*4即为需要修改的bit位距离RAM基地址的bit数目,然后在32位机器中,应用BitBand进行映射的时候,一位bit会膨胀成32位,即4个字节,所以后面要乘以4.

上一篇 下一篇

猜你喜欢

热点阅读