STM32中的位带(bit-band)操作与原理解析.docx
《STM32中的位带(bit-band)操作与原理解析.docx》由会员分享,可在线阅读,更多相关《STM32中的位带(bit-band)操作与原理解析.docx(7页珍藏版)》请在优知文库上搜索。
1、STM32中的位带(bit-band)操作支持了位带操作后,可以使用普通的加载/存储指令来对单一的比特进行读写。在CM3中,有两个区中实现了位带。其中一个是SRAM区的最低IMB范围,第二个则是片内外设区的最低IMB范围。这两个区中的地址除了可以像普通的RAM一样使用外,它们还都有自己的“位带别名区”,位带别名区把每个比特膨胀成一个32位的字。当你通过位带别名区访问这些字时,就可以达到访问原始比特的目的。位带操作的概念其实30年前就有了,那还是8051单片机开创的先河,如今,CM3将此能力进化,这里的位带操作是8051位寻址区的威力大幅加强版。CM3使用如下术语来表示位带存储的相关地址:位带区
2、:支持位带操作的地址区、位带别名:对别名地址的访问最终作用到位带区的访问上(这中途有一个地址映射过程)在位带区中,每个比特都映射到别名地址区的一个字一一这是只有1.SB有效的字。当一个别名地址被访问时,会先把该地址变换成位带地址。对于读操作,读取位带地址中的一个字,再把需要的位右移到1.SB,并把1.SB返回。对于写操作,把需要写的位左移至对应的位序号处,然后执行一个原子的“读-改-写”过程。图5.3B位带区与位带别名区的膨胀对应关系图B举例:欲设置地址0x20OOJ)OOO中的比特2,划使用位带操令的设置过程如下图所示:不使用位带功能使用位带功能读取0x200(1.OOOO处的值到寄行器中置
3、位寄存SS的bit2阳寄存器的值写回)0x20000000读取0x20000000处的值到内部缓冲区位置bit2后,再犯僵g02000.0000图5.4写数据到位带别名区对应的汇编代码如图5.5所示WithoutBit-Band1.DRR0,020000000;Stupaddr1.DRRl,(R0;ReadORR.WRl,0x4;ModifybitSTRRl,(R0;WritebackresultWithBit-Band1.DRRO,0x22000008SetupaddressMOVRl,1iSetupdataSTRRlt(R0;Write图5.5位带操作与普通操作的对比,在汇编程序的珀度上位
4、带读操作相对简单些:无Bit-BandRead0x200000toregister把bit2右移到1.SB再簿蔽其它的位S*Bit-Band映射成3次Readfrom总线传0x2200CXX)8从0x20000000读出数据后,再阳bit2攫取出来$5.6从位带别名区中读取比特无位带有位带1.DRRO,-0x20000000;建立地址1.DRRO,-0x22000008;建立地址1.DRRlf(RO);Read1.DRRl,RO;ReadUBFX-WR1,R1,#2,#1;提取除2图5.7读取比特时传统方法与位带方法的比较支持位带操作的两个内存区的范围是:0x2000-0000-0x200F_
5、FFFF(SRAM区中的最低1MB)0x4000_0000-0x400F_FFFF(片上外设区中的最低IMB)对SRAM位带区的某个比特,记它所在字节地址为A,位序号为n(0=n=7),则该比特在别名区的地址为:AliasAddr=0x22000000+(A-0x20000000)*8+n)*4=0x22000000+(A-0x20000000)*32+nM对于片上外设位带区的某个比特,记它所在字节的地址为A,位序号为n(0=n=7),则该比特在别名区的地址为:AliasAddr=0x42000000+(A-0x40000000)*8+n)*4=0x42000000+(A-0x40000000
6、)*32+nM上式中,“*4”表示一个字为4个字节,“*8”表示一个字节中有8个比特。这里再不嫌啰嗦地举一个例子:1.在地址0x20000000处写入0x3355AACC2.读取地址0x22000008。本次读访问将读取0x20000000,并提取比特2,值为1。3.往地址0x22000008处写Oo本次操作将被映射成对地址0x20000000的“读-改-写”操作(原子的),把比特2清Oo4.现在再读取0x20000000,将返回0x3355AAC8(bitl2已清零)。位带别名区的字只有1.SB有意义。另外,在访问位带别名区时,不管使用哪一种长度的数据传送指令(字/半字/字节),都把地址对齐
7、到字的边界上,否则会产生不可预料的结果。Icpplviewplaincopy位带操作,实现51类似的GPIO控制功能具体实现思想,参考第五章(87页92页).IO口操作宏定义#defineBlTBAND(addr,bitnum)(addr&0xF0000000)+0x2000000+(addr&0xFFFFF)5)+(bitnum2)#defineMEM_ADDR(addr)*(volatileunsignedlong*)(addr)#defineBIT_ADDR(addr,bitnum)MEM_ADDR(BITBAND(addr,bitnum)/IO口地址映露#defineGP10A_0DR
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- STM32 中的 bit band 操作 原理 解析