位带的概述 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)
|