关于使用GD32 MCU实现位带操作的指南

mcs-51单片机可以简单的将p1口的第2位独立操作,如p1.2=0;p1.2=1,就是这样把p1口的第三个脚(bit2)置0置1。对于32位arm mcu 我们可以像51单片机一样单独的对某个端口的某一个io单独操作吗?答案是可以的。并且这样就引入了“位带操作”的概念。简而言之,为了能够实现单独的位控制,所以就有了位带这样的操作机制。
arm cortex-m3处理器采用哈佛结构,可以使用相互独立的总线来读取指令和加载/存储数据。指令代码和数据都位于相同的存储器地址空间,但在不同的地址范围。程序存储器,数据存储器,寄存器和i/o端口都在同一个线性的4 gb的地址空间之内。这是cortex-m3的最大地址范围,因为它的地址总线宽度是32位。此外,为了降低不同客户在相同应用时的软件复杂度,存储映射是按cortex-m3处理器提供的规则预先定义的。
arm cortex-m3的自带的系统外设也占用了一些地址空间。如gd32f1x0系列设备的存储映射,包括指令代码、sram、外设和其他预先定义的区域。为了简化外设的地址译码,每个外设分配的地址空间都是1kb。
为了实现位带操作,我们可以设置gd32的位带别名区。对象可以是sram、i/o外设空间,从而实现对这些地方的某一位的操作。这样就可以把代码缩小、速度更快、效率更高也更安全。
在寻址空间(32位地址是 4gb)的另一地方,取个别名区空间,从这地址开始处,每一个字(32bit)就对应sram或i/o的一位。这样,1mb sram就可以有32mb的对应别名区空间,就是1位膨胀到32位(1bit 变为1个字)。我们对这个别名区空间开始的某一字操作,置0或置1,就等于它映射的sram或i/o相应的某地址的某一位的操作。
支持了位带操作后,用户可以使用普通的加载/存储指令来对单一的比特进行读写。cortex-m3处理器提供了两个支持位带操作的区域。其中一个是sram区的最低1mb范围,第二个是片内外设区的最低1mb范围。这两个区域中的地址除了普通应用外,还有自己的“位带别名区”。位带别名区把每个比特扩展成一个32位的字。当用户访问位带别名区时,就可以达到访问原始比特的目的。
下面的映射公式表明了位带别名区的每个32位字如何对应位带区的某个比特。
位带别名区地址 = 位带别名区基地址 + (字节偏移×32) + (位数×4)
其中:
位带别名区地址指的是位带区目标比特对应在位带别名区的地址
位带别名区基地址指的是位带别名区的起始地址
字节偏移指的是位带区目标比特所在的字节的字节地址偏移量
位数指的是目标比特在对应字节中的位置
例如,要想访问0x2000 0200地址的第7位, 可访问的位带别名区地址是:
位别名地址= 0x2200 0000 + (0x200 * 32) + (7 * 4) = 0x2200 401c
如果对0x2200 401c进行写操作,那么0x2000 0200的第7位将会相应变化;
如果对0x2200 401c进行读操作,那么视0x2000 0200的第7位状态而返回0x0000 0001或0x0000 0000。

百度VR技术支撑多场景赋能 核心技术层与业务层分离
PLC流量监控系统有什么应用场景
光电式液位传感器工作原理
加热板:真空共晶炉的热力中心与材料塑造者
中兴和紫光展锐海外发布国产新机全面提升拍照体验
关于使用GD32 MCU实现位带操作的指南
小米6抢先三星s8发布骁龙835:雷军或演绎又一段单口相声!
物联网操作系统RT-Thread获纪源资本领投 完成新一轮近亿元B轮融资
持续亮相东京行业技术展 峰岹科技稳扎海外市场
SF-EP1C学习板:DIY数码相框
锂电池试验箱选择时需要注意哪些?
携号转网如此困难 到底是谁在捣鬼?
请问倍压整流电路跟三极管放大电路有什么区别?
电路分析学习笔记之运算放大器分析
英伟达"特供版"芯片遭冷遇,中国厂商寻求自主可控
扫地机器人哪个牌子好?向德国大牌看齐避免“入坑”
萤石进军AIoT产业,两大物联网服务加码智能化转型
小马智行获颁北京市智能网联汽车政策先行区首批无人化道路测试许可
整流二极管紧贴电路板安装不妥
国内芯片龙头企业有哪些?