BIT_BAND(帮你理解M3的位断区).doc

上传人:壹****1 文档编号:543872784 上传时间:2023-04-28 格式:DOC 页数:3 大小:112.50KB
返回 下载 相关 举报
BIT_BAND(帮你理解M3的位断区).doc_第1页
第1页 / 共3页
BIT_BAND(帮你理解M3的位断区).doc_第2页
第2页 / 共3页
BIT_BAND(帮你理解M3的位断区).doc_第3页
第3页 / 共3页
亲,该文档总共3页,全部预览完了,如果喜欢就下载吧!
资源描述

《BIT_BAND(帮你理解M3的位断区).doc》由会员分享,可在线阅读,更多相关《BIT_BAND(帮你理解M3的位断区).doc(3页珍藏版)》请在金锄头文库上搜索。

1、摘录的Chuzhujun的一点经验,和大家一起分享!首先追溯到51,51单片机RAM内从从20H往后到3FH是位访问区,每一个字节的每一个位也对应有从00h开始的的每一个字节的最后一位,例如20H.0对应00h,20H.1对应于01h,.其中00h,01h中起作用的也只是最后一位,其他位都是没意义的,又如FLAG1BIT00H,这样的话如果SetbFLAG1这条语句执行,实际上市对RAM中20H这个字节的Bit0置一了,由此看来,这能ARM也是受Intel的影响和启发啊!其次:开始讲cm3的BIT_BAND,处理器存储器映射包括两个bit-banding区域。它们分别为SRAM和外设存储区域中

2、的最低的1MB。这些bit-band区域将存储器别名区的一个字映射为bit-band区的一个位。请看下图:file:/C:/Documents%20and%20Settings/jishu/桌面/isp/未命名.jpg图中1M的bitband区域的每一个字节的每一位分别有bitband别名区的每一个字(四字节)对应,那么,这是不是和51的位区原理一样啊?呵呵,但是我们要知道,这里的位区可不是51里面的那么几十个字节啊,而是偌大的空间,很多人会认为,这样好浪费啊,每一个位对应一个字,那么这个字的其他剩余31个字节就等于是浪费的啊,虽然这是对的,是有点浪费,但是这样做的好处是不可估量的,想象看吧,

3、我们这么举个例子来看看,就比如说现在忘SRAM的首地址写一个字节吧,也就是地址:0x20000000,但是我们想往0x20000000这个字节的bit3写1而保证其他的位都不发生变化,我们会怎么做,当然了,这肯定都会,就是一个读-修改-写的过程嘛,首先读出来这个字节给一个temp临时字节类型变量,然后同11110111b相与,然后再把temp给0x20000000完成位修改的操作,这样麻烦啊,还要定义一个变量,还一不小心把别的位也改变了,岂不出问题?现在好了,我们知道0x20000000这个字节对应的bit0位是对应在别名区的0x22000000往后的一个字(四字节)中,那么,我现在直接像这个

4、别名区写一个最后一位为1就可以了的一个字:(*(u32*)0x2200000b)=1,这样一条语句就可以往0x20000000这一字节的bit3写1了,不用定义变量,不用担心会影响其他位,这样带来的好处同刚才我们认为的浪费空间的想法来比,不言而喻啦!第三:方法和思想都清楚啦,接下来就是要寻找一个有效的方法来高效的写入啦,否则要是这样写一个位都算老半天该往那一个别名区的地址里写数,那可就麻烦了,所以请大家先看一个图,我手画然后扫描上去的,不是很好看,大家将就着看吧,别因为我图画的不好就认为我人品不好啊,我可是花了半天时间扫描的呢:C:DocumentsandSettingsjishu桌面isp1

5、.jpgCortex-M3存储器映射有2个32MB别名区,它们被映射为两个1MB的bit-band区:32MBSRAM别名区和32MB外设别名区,我这里图示的是SRAM位区同他们的别名区所对应的关系:SRAM是从0x20000000开始的,他的别名区是从0x22000000开始的,这一点首先要弄清楚,0x20000000的每一个位对应于0x22000000往后的一个一个字,如:(0x22000000).0对应0x220000000x22000003这一个字空间,你只需要定义一个指向32位地址的指针:(u32*)0x22000000,往这个指针对应的地址中写1就是对:(0x22000000).0

6、这一位置一,写0就是清零,诚然,这个别名区的一个字中,1到31位都没有用到,也就是我们先前所说的浪费空间问题,不过优点已经很明显了!依此类推,向图中的0x20004001的第3位,图上是BIT3(我这里没有将第一位写成BIT0)写1,那么由途中对应的关系,我们就应该向0x22080024地址往后的四个字节中写1即:*(u32*)0x22080024)=1;这怎么用公式算呢,很好算,首先我们先确定两个区的基地址,我现在要向0x20004001的第三位写一,它偏移了0x20000000一共是(0x20004001-0x20000000)个字节外加3位,而图中我们可以看到,位区的每一个字节的每一个位

7、对应别名区中四个字节,所以总的表达式是:0x22000000+(0x20004001-0x20000000)*8*4+3*4这样表达式就小荷才露尖尖角啦:会变的部分有两个:1.(0x20004001-0x20000000),我们称其为字节偏移,用byte_offset表示2.3,这个我们称其为比特偏移,用bit_offset表示,那么通用表达式就是:0x22000000+(byte_offset*32)+(bit_offset*4),得出的便是在别名区中相对于首地址0x22000000偏移的字节数。当然啦,我们这里是对SRAM而言的,如果对外设位区的话,那么以上式子中就不是0x22000000了,而应该改成0x42000000啦,说到这里,大家都应该龇牙笑了吧?因为都懂了,不会吧?你为什么不笑,还不懂?那和我联系好了:

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号