关于位带操作的疑问

2019-07-21 08:07发布

本帖最后由 warship 于 2018-7-2 23:14 编辑

位带功能将外设的各个寄存器的每1bit映射到别名存储区扩充到了1个字(32位),比如GPIO B的IDR8(控制PB8)的BIT位,别名存储地址为0x4221 81A0,当我想置位PB8的时候,直接访问别名存储地址就可以了,即:     *(0x422181A0)=0x01;
那么问题来了:  这个地址是专用的吗,不能被其它实际的物理存储器占用吗?
假如可以有其它实际的物理存储器占用该地址,
我用上述指令访问的时候,程序怎么知道我是正常访问这个存储器,还是只利用它来给PB8置位呢?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
14条回答
warship
1楼-- · 2019-07-21 10:52
接上楼,再进一步地,如果上述理解都正确的话。
可以推想这么设计的初衷:
片上SRAM共分配了0.5GB的空间,这么大的SRAM是用不了的。
进一步地,ARM只对该空间的底部共64MB进行了定义,
而最底部的32MB是用户能够使用的SRAM(其中最最底部的1MB兼设计为位带区)
接下来的高32MB定义为别名区,这一部分无法作为正常存储器使用
因为,就你们这些小样儿,免费赠送的SRAM最多给到别名区空间以下!!!
免费的大部分情况已经足够用了,共1MB+31MB。真不够的话,自己想办法去!!
就是这些也看具体厂家的设计了,但所见到的103系列,最大也只有区区64kB, 离越界还远着呢。
所以2200 0000至23FF FFFF这一区域你们猴年马月也用不上,老子设计成别名区了。哈哈。
warship
2楼-- · 2019-07-21 14:56
我自己的理解是:
别名区的那一块存储器地址,对应片上外设寄存器的,共32MB
地址空间为:4200 0000-43FF FFFF这一段地址规定就是这一映射用途,
不允许被用作存储空间,
这样,只要有对这一区域的访问,STM32直接就用于位操作了。
不知,这样理解对不对?
warship
3楼-- · 2019-07-21 18:15
如果上楼的理解正确,
那么对片上SRAM区的理解也一样:
片上SRAM共分配了0.5GB的空间, 即2000 0000至3FFF FFFF
其中位绑定区占用最低的1MB空间,即2000 0000至200F FFFF(这一区域可当作一般存储器按字节读写,也可使用别名地址按位寻址)
对应上述位绑定的别名区占用32MB,即2200 0000至23FF FFFF(这一空间是STM32规定死的,无法作为正常存储器使用,凡寻址这一地址空间的,默认是对相应的位带区进行位操作)
warship
4楼-- · 2019-07-21 18:55
 精彩回答 2  元偷偷看……
正点原子
5楼-- · 2019-07-21 20:50
warship 发表于 2018-7-2 18:54
我自己的理解是:
别名区的那一块存储器地址,对应片上外设寄存器的,共32MB
地址空间为:4200 0000-43F ...

厉害。。。。
warship
6楼-- · 2019-07-21 23:35
正点原子 发表于 2018-7-3 01:16
厉害。。。。

谢谢原子亲自过来夸奖,难道我理解正确无误了吗?

一周热门 更多>