免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 891 | 回复: 0
打印 上一主题 下一主题

STM32(cortex_m3) 的 Bit-Banding 怎样理解 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-12-23 03:03 |只看该作者 |倒序浏览
Bit-Banding的意思:对Bit-Band区一个字的操作对应实际存储器中的一位。

在STM32F10xxx的技术参考手册中第2.3.3节,有这样的描述:
Cortex-M3存储器映像包括两个位段(bit-band)区。这两个位段区将别名存储器区中的每个字映射到位段存储器区的一个位,在别名存储区写入一个字具有对位段区的目标位执行读-改-写操作的相同效果 。

即M3利用别名区简化了位操作了位段区的位操作(将一般的读-改-写简化为写)。
别名区空间大小是位段区的32倍(因为每1位映射为1字)。

在STM32F10x里存储器映像中包括2个位段区,分别是:
SRAM区低1MB     0x2000 0000 - 0x200f ffff
片上外设区低1MB 0x4000 0000 - 0x400f ffff
它们的位位段别名区起始地址分别是:
0x2200 0000 - 0x220f ffff
0x4200 0000 - 0x420f ffff

下面的映射公式给出了别名区中的每个字是如何对应位带区的相应位的:
bit_word_addr = bit_band_base + ((byte_offset*8 + bit_number)*4)
其中:
- bit_word_addr 是别名存储器区中字的地址,它映射到某个目标位。
- bit_band_base 是别名区的起始地址。
- byte_offset   是包含目标位的字节在位段里的序号
- bit_number    是目标位所在位置(0-31)

例如:
SRAM区中地址0x20000300字节中的位2对应在别名区中的地址为:
0x22006008 = 0x22000000 + (0x300*32) + (2*4).
对地址0x22006008的写操作和对SRAM中地址0x20000300字节的位2执行读-改-写操作具有相同的效果。
读地址0x22006008返回SRAM中地址0x20000300字节的位2的值(0x01 or 0x00)。

#define BITBAND(addr, bitnum) ((addr&0xf0000000) + 0x02000000 + ((addr&0xfffff)<<5) + (bitnum<<2))

Ref:
[ST MCU] 主题:STM32(cortex_m3) 的 Bit-Banding 怎样理解?
http://bbs.21ic.com/icview-106483-1-1.html
对于STM32别名区的理解
http://wenku.baidu.com/view/3dfdb8f6ba0d4a7302763a11.html

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP