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

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

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

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

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

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

当跳转依据是某个位时:

普通操作:

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

位带操作:

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

写数据对比

对应的汇编代码

读数据对比

对应的汇编代码

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

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权威指南》

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值