Cortex - M3 位带别名首地址的计算方法
---------------------------------------------
-- 时间:2019-01-17
-- 创建人:Ruo_Xiao
-- 邮箱:xclsoftware@163.com
---------------------------------------------
一、源代码
#define BITBAND(addr, bitnum) ((addr & 0xF0000000)+0x2000000+((addr &0xFFFFF)<<5)+(bitnum<<2))
#define MEM_ADDR(addr) *((volatile unsigned long *)(addr))
#define BIT_ADDR(addr, bitnum) MEM_ADDR(BITBAND(addr, bitnum))
二、功能
已知SRAM区或者Peripheral区的位带区某一位的地址,计算该位对应的位带别名区的地址,即:1b转到32b。
三、解释
上述代码主要理解的是第1行。第1行代码可以分解成以下几部分:
(1)addr & 0xF000_0000
因为位带功能只存在于SRAM区和Peripheral区,二者的位带区的地址范围如下:
SRAM区:0x2000_0000
Peripheral区:0x4000_0000
该代码的意思是获知当前位带区是位于SRAM区和Peripheral区。
(2)(addr & 0xF000_0000) + 0x200_0000
SRAM区和Peripheral区的位带别名区的首地址分别是0x2200_0000和0x4200_0000,所以这行代码的功能是计算所在区的位带别名区的首地址。
(3)(addr &0xFFFFF)<<5)+(bitnum<<2)
因为SRAM区和Peripheral区的位带区的大小为1M,故该区里面的位的地址最大为0xF_FFFF,所以addr &0xF_FFFF的功能是获取位带区中的位相对于位带区首地址的偏移。
为了便于理解,这里将(addr &0xFFFFF)<<5)+(bitnum<<2)拆解成((addr & 0xFFFFF)<<3 + bitnum)<<2。
① (addr & 0xFFFFF)<<3
将位带区的位转换成字节形式。“<<3”意思就是乘以8。
② (addr & 0xFFFFF)<<3 + bitnum
加上bitnum,转到指定的位。
③ ((addr & 0xFFFFF)<<3 + bitnum)<<2
乘以4,再将位带区的位转到了32位的字中。
经过上述操作,就完成了计算位带区的位对应的位带别名区位的地址的操作。
参考:
https://www.cnblogs.com/szhb-5251/p/6662417.html
https://blog.csdn.net/bgk083/article/details/40082103
(SAW:Game Over!)
Cortex - M3 位带别名首地址的计算方法相关推荐
- STM32位带区和位带别名区的浅谈
1.首先谈下为什么要使用位带? 在学习51单片机时就已经使用过位操作,比如使用sbit对单片机IO口的定义,但是STM32中并没有这类关键字,而是通过访问位带别名区来实现,即通过将每个比特位膨胀成一个 ...
- 【STM32】标准库与HAL库对照学习教程六--位带操作
[STM32]标准库与HAL库对照学习教程六--位带操作 一.前言 二.准备工作 三.位带介绍 1.位带操作 2.STM32位带及位带别名区域 四.位带区与位带别名区地址转换 五.GPIO的位带操作 ...
- STM32的位带操作
1. 什么是位带操作? 学习 51 单片机的时候就使用过位操作,通过关键字 sbit 对单片机IO口进行位定义.但STM32没有这样的关键字,于是便要通过访问位带别名区的方式来实现.即:将每一位膨胀成 ...
- 我对位带操作的新认识
接触STM32快一年了,前段时间才偶尔听到一个叫位带操作的概念... 惭愧惭愧 经过查阅前辈们的经验和相关资料,有了点认识在此记录一下,有不正确的地方请多多指教 /****************** ...
- STM32开发项目:GPIO的位带操作
目录 背景介绍 GPIO位带操作的实现 使用指南 背景介绍 位操作就是可以单独的对一个比特位读和写,这个在 51 单片机中非常常见.51 单片机中通过关键字 sbit 来实现位定义,STM32-M3, ...
- STM32(五)------GPIO位带操作
GPIO位带操作 介绍 位带简介 外设位带区 SRAM位带区 位带区和位带别名区地址转换 GPIO 位带操作 代码解析 GPIO 寄存器映射 GPIO位操作 主函数 介绍 位带简介 位操作就是可以单独 ...
- STM32:位带操作分析
STM32的位带操作分析 8051单片机可以直接对某一位IO进行读写操作,而Cortex-M3的位带操作是8051位寻址区的加强版.使用位带操作后,可以使用普通的加载/存储指令对单一的比特进行读写操作 ...
- 秉火429笔记之七位带操作
目录 位带概况 位带概况 位操作,简单的理解,可以单独的对一个比特位读和写,51单片机非常常见.类如,51单片机通过关键字sbit来实现位定义,STM32并没有这个关键字,而是通过访问位带别名区(Bi ...
- 对位带操作的理解和应用
嵌入式_对位带操作的理解和应用 最近返回去研究stm32,看到STM32部分空间支持了位带操作,就是可以使用普通的加载/存储指令来对单一的比特进行读写.所以写篇日志记录以下对于位带操作的理解,本文参考 ...
最新文章
- 菜菜从零学习WCF十(序列化)
- 2017 必备的八款最佳反勒索软件工具
- cocos2d-x 从onEnter、onExit、 引用计数 谈内存泄露问题
- AD域中NTP服务器的配置
- 考前自学系列·计算机组成原理·控制器的组成及各部分的功能
- MAUI安卓子系统调试方法(附安装教程)
- 执行计划生成及查看的几种方法
- Hbase的伪分布式安装
- Eclipse中离线安装ADT插件详细教程
- EDEM创建用于模拟颗粒工厂的多边形后,选中多边形视图中不显示红色多边形
- DataFrame 修改列名
- 拿大厂机器学习岗offer,吐血整理的面试秘籍!
- 【iOS开发】—— 调用相机、相册
- 国足3比1叙利亚,晋级世预赛12强赛,国足会在12强赛中取得怎样的成绩呢?
- 企业流程篇--项目管理(七)
- 数据安全运营体系建设
- 第19篇 基础(十九)详解QVector(数组)
- 2021年N1叉车司机考试题库及N1叉车司机模拟考试
- 网站收录前期如何优化
- [WARNING]: Invalid characters were found in group names but not replaced, use -vvvv to see details