STM32位带操作的原理

传统操作:修改一个32位寄存器内值的方法是,从寄存器中取出值,修改这个值,然后再放回这个寄存器中。

位带操作:对于位带区的每一位,在位带别名区都有一个32位的地址对应,当需要修改值时,直接对该地址所指向的值进行修改。

位带区:支持位带操作的地址区,也就是说此区域可以给它起一个地址别名。

位带别名:即为上述映射到的32位地址(别名)所在区域,对这个别名地址的访问最终作用到位带区的访问上。

支持位带操作的两个内存区域是:

    0X2000_0000-0X200F_FFFF(SRAM区中的最低1MB)

    0X4000_0000-0X400F_FFFF(片上外设区中的最低1MB)

位带区与位带别名区之间的映射关系见下图

位带区到位带别名区的地址映射公式:

在编程中,我们会把以上公式合并成一个公式

    (addr & 0xF0000000)+0x02000000+((addr & 0x00FFFFFF<<5)+(bitnum<<2)) 

    (addr & 0xF0000000)目的是取出addr的最高位(根据映射表可知最高位非2即4),通过最高位来区分是SRAM还是片上外设,再加上0x02000000即复原了SRAM/外设位带别名区的起始地址,(addr & 0x00FFFFFF<<5)实际上是实现原式中的(A-0x20000000)*8*4,(bitnum<<2)等同于n*4.

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页