Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1486966
  • 博文数量: 226
  • 博客积分: 3997
  • 博客等级: 少校
  • 技术积分: 2369
  • 用 户 组: 普通用户
  • 注册时间: 2010-06-19 17:26
个人简介

Never save something for a special occasion. Every day in your life is a special occasion.

文章分类

全部博文(226)

文章存档

2018年(5)

2017年(11)

2016年(1)

2015年(17)

2014年(14)

2013年(30)

2012年(5)

2011年(52)

2010年(107)

分类: 嵌入式

2011-09-26 12:49:18

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 怎样理解?
对于STM32别名区的理解

阅读(5833) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~