位带概况
位操作,简单的理解,可以单独的对一个比特位读和写,51单片机非常常见。类如,51单片机通过关键字sbit来实现位定义,STM32并没有这个关键字,而是通过访问位带别名区(Bit band alias)来实现的。
通过查看《M4内核参考手册》3.4 system address map 可知下图:
M4中2个区域实现了位带,其一为SRAM的最低1MB空间,其二为外设区域的最低1MB空间。
参考3.7 Bit-banding 可知,位带区的一个比特经过膨胀后,虽然变大到4个字节,但是还是LSB才有效。有人会问这不是浪费空间吗,要知道F429的系统总线是32位的,按照4个字节访问的时候是最快的,所以膨胀成4个字节来访问是最高效的。通过指针的形式访问位带别名区地址从而达到操作位带区比特位的效果。
// 把“位带地址+位序号”转换成别名地址的宏
#define BITBAND(addr, bitnum) ((addr & 0xF0000000)+0x02000000+((addr & 0x000FFFFF)<<5)+(bitnum<<2))
// 把一个地址转换成一个指针
#define MEM_ADDR(addr) *((volatile unsigned long *)(addr))
// 把位带别名区地址转换成指针
#define BIT_ADDR(addr, bitnum) MEM_ADDR(BITBAND(addr, bitnum))
上一篇:秉火429笔记之五控制RGB彩灯
下一篇:秉火429笔记之四启动文件分析
推荐阅读最新更新时间:2024-11-19 12:45
设计资源 培训 开发板 精华推荐
- 用于 SRC Crowbar 的 NCP432B 可编程精密基准的典型应用
- MAXREFDES48#:24V至12V、40W隔离电源,带EFD20磁芯变压器
- LT3091MPFE 恒流恒压实验室电源的典型应用
- LTM8025EV 演示板、36Vin、3A 降压模块转换器
- #第六届立创电赛#多功能语音台灯
- 【训练营】一只滑板腿
- AD8602ARZ-REEL7放大器光电二极管电路典型应用
- 适用于 36V SLA 电池充电器的 LT3791MPFE-1 2.5A 降压-升压 LED 驱动器的典型应用电路
- 具有高侧电流检测功能的 HV9918 迟滞、降压、高亮度 LED 驱动器的典型应用
- DRSSTC/SSTC灭弧驱动板