Cortex‐M3 位带(Bit-Band)操作的理解与功能整理

Cortex‐M3 预定义的存储器映射

Cortex‐M3 位带(Bit-Band)操作的理解与功能整理

支持了位带操作后,可以使用普通的加载/存储指令来对单一的比特进行读写。

在CM3中,有两个区中实现了位带。其中一个是SRAM 区的最低1MB 范围,第二个则是片内外设区的最低1MB 范围。这两个区中的地址除了可以像普通的RAM 一样使用外,它们还都有自己的“位带别名区”,位带别名区把每个比特膨胀成一个32 位的字。当你通过位带别名区访问这些字时,就可以达到访问原始比特的目的。

位带区与位带别名区的膨胀对应关系图

Cortex‐M3 位带(Bit-Band)操作的理解与功能整理

汇编程序角度,普通操作与位带操作对比

当跳转依据是某个位时:

普通操作:

  • 读取整个寄存器
  • 掩蔽不需要的位
  • 比较并跳转

位带操作:

  • 从位带别名区读取状态位
  • 比较并跳转

写数据对比

Cortex‐M3 位带(Bit-Band)操作的理解与功能整理

对应的汇编代码

Cortex‐M3 位带(Bit-Band)操作的理解与功能整理

读数据对比

Cortex‐M3 位带(Bit-Band)操作的理解与功能整理

对应的汇编代码

Cortex‐M3 位带(Bit-Band)操作的理解与功能整理

支持位带操作的两个内存区的范围是:

0x2000_0000‐0x200F_FFFF(SRAM 区中的最低1MB)

0x4000_0000‐0x400F_FFFF(片上外设区中的最低1MB)

对于SRAM 位带区的某个比特,记它所在字节地址为A,位序号为n(0<=n<=7),则该比特在别名区的地址为:

AliasAddr= 0x22000000+((A‐0x20000000)*8+n)*4 =0x22000000+ (A‐0x20000000)*32 + n*4

对于片上外设位带区的某个比特,记它所在字节的地址为A,位序号为n(0<=n<=7),则该比特在别名区的地址为:

AliasAddr= 0x42000000+((A‐0x40000000)*8+n)*4 =0x42000000+ (A‐0x40000000)*32 + n*4

上式中,“*4”表示一个字为4 个字节,“*8”表示一个字节中有8 个比特。

 

详细内容查阅《Cortex-M3权威指南》第5章

参考文献 -- 《Cortex-M3权威指南》