位带的概述
2.1.1 什么是位带操作?
先认识两个概念:位带区、位带别名区。
位带区:支持位带操作的地址区。
位带别名区:位带区映射的地址区
由图可知,位带区的每一位,在位带别名区中都有32位对应。(假装理解:在位带区中它是1位,在位带别名区中它膨胀了,为32位)
位带操作:
简单理解,能对单片机的某一位进行单独操作。
复杂理解,对位带别名区的操作,最终会映射到位带区中。理解:你对位带别名的某32位地址写入1,相当于在这个32位地址对应的位带区中的某一位写1。
2.1.2位带操作的细节?
在位带区中,每个位(比特)都映射到别名地址区的一个(32位)字——这字只有 LSB (最低位)有效。
理解:在位带别名区中某个32位地址中写入0x1,0x3,0x7,0xf是一样的效果,都映射到位带区中的某一位写入1。
支持位带操作的两个内存区的范围是:
0x2000_0000-0x200F_FFFF( SRAM 区中的最低 1MB)
0x4000_0000-0x400F_FFFF(片上外设区中的最低 1MB)
2.1.3 位带操作的好处
《1》书写方便、使代码简洁
以前对某一位进行操作时(写操作)
读----读取整个寄存器
改----屏蔽不需要的位,修改需要的位
写----把修改好的值,写回寄存器
现在对某一位进行操作时(写操作)
写----确定需要修改的位,写入对应位带别名区
《2》安全
以前读、改、写,是三个步骤,在多中断系统中,存在数据写入丢失的风险。
位带操作、一步到位、直接写,不会存在数据写入丢失风险。底层是执行一个原子操作的读、改、写过程,不允许被中断。
2.1.4 位带操作的实现
映射公式:
理解公式从这个角度理解:位带操作的位带区与位带别名区的关系是:一个比特位(1位)与一个字(32位=4个字节)之间的映射
“1比特位与4个字节的对应”
2.2 位带软件实现
2.2.1 片上外设位带实现
以PA端口为例:
第一步:找出PA端口数据寄存器对应的地址。
复盘:
0x4000 0000
0x0002 0000
0x0000 0000
0x0000 0014
相加结果:
0x4002 0014
第二步:根据公式,求出位带区别名区中地址
2.3补充
位带操作开始难以理解其实现原理,但渐渐喜欢位带操作,渐渐了解一点一点。
《1》位带操作,实现51类似的IO控制功能
《2》位带区中的每一比特位,都映射到别名区的一个字(4个字节)(绑定关系)
《3》对别名地址的访问最终作用到位带区的访问上
以上文档51hei下载地址:
位带操作.docx
(1.91 MB, 下载次数: 22)
头文件:
M4位带操作文件.zip
(910 Bytes, 下载次数: 16)
欢迎光临 (http://www.51hei.com/bbs/) | Powered by Discuz! X3.1 |