---------------------------------------------
-- 时间: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 位带别名首地址的计算方法相关推荐

  1. STM32位带区和位带别名区的浅谈

    1.首先谈下为什么要使用位带? 在学习51单片机时就已经使用过位操作,比如使用sbit对单片机IO口的定义,但是STM32中并没有这类关键字,而是通过访问位带别名区来实现,即通过将每个比特位膨胀成一个 ...

  2. 【STM32】标准库与HAL库对照学习教程六--位带操作

    [STM32]标准库与HAL库对照学习教程六--位带操作 一.前言 二.准备工作 三.位带介绍 1.位带操作 2.STM32位带及位带别名区域 四.位带区与位带别名区地址转换 五.GPIO的位带操作 ...

  3. STM32的位带操作

    1. 什么是位带操作? 学习 51 单片机的时候就使用过位操作,通过关键字 sbit 对单片机IO口进行位定义.但STM32没有这样的关键字,于是便要通过访问位带别名区的方式来实现.即:将每一位膨胀成 ...

  4. 我对位带操作的新认识

    接触STM32快一年了,前段时间才偶尔听到一个叫位带操作的概念... 惭愧惭愧 经过查阅前辈们的经验和相关资料,有了点认识在此记录一下,有不正确的地方请多多指教 /****************** ...

  5. STM32开发项目:GPIO的位带操作

    目录 背景介绍 GPIO位带操作的实现 使用指南 背景介绍 位操作就是可以单独的对一个比特位读和写,这个在 51 单片机中非常常见.51 单片机中通过关键字 sbit 来实现位定义,STM32-M3, ...

  6. STM32(五)------GPIO位带操作

    GPIO位带操作 介绍 位带简介 外设位带区 SRAM位带区 位带区和位带别名区地址转换 GPIO 位带操作 代码解析 GPIO 寄存器映射 GPIO位操作 主函数 介绍 位带简介 位操作就是可以单独 ...

  7. STM32:位带操作分析

    STM32的位带操作分析 8051单片机可以直接对某一位IO进行读写操作,而Cortex-M3的位带操作是8051位寻址区的加强版.使用位带操作后,可以使用普通的加载/存储指令对单一的比特进行读写操作 ...

  8. 秉火429笔记之七位带操作

    目录 位带概况 位带概况 位操作,简单的理解,可以单独的对一个比特位读和写,51单片机非常常见.类如,51单片机通过关键字sbit来实现位定义,STM32并没有这个关键字,而是通过访问位带别名区(Bi ...

  9. 对位带操作的理解和应用

    嵌入式_对位带操作的理解和应用 最近返回去研究stm32,看到STM32部分空间支持了位带操作,就是可以使用普通的加载/存储指令来对单一的比特进行读写.所以写篇日志记录以下对于位带操作的理解,本文参考 ...

最新文章

  1. 菜菜从零学习WCF十(序列化)
  2. 2017 必备的八款最佳反勒索软件工具
  3. cocos2d-x 从onEnter、onExit、 引用计数 谈内存泄露问题
  4. AD域中NTP服务器的配置
  5. 考前自学系列·计算机组成原理·控制器的组成及各部分的功能
  6. MAUI安卓子系统调试方法(附安装教程)
  7. 执行计划生成及查看的几种方法
  8. Hbase的伪分布式安装
  9. Eclipse中离线安装ADT插件详细教程
  10. EDEM创建用于模拟颗粒工厂的多边形后,选中多边形视图中不显示红色多边形
  11. DataFrame 修改列名
  12. 拿大厂机器学习岗offer,吐血整理的面试秘籍!
  13. 【iOS开发】—— 调用相机、相册
  14. 国足3比1叙利亚,晋级世预赛12强赛,国足会在12强赛中取得怎样的成绩呢?
  15. 企业流程篇--项目管理(七)
  16. 数据安全运营体系建设
  17. 第19篇 基础(十九)详解QVector(数组)
  18. 2021年N1叉车司机考试题库及N1叉车司机模拟考试
  19. 网站收录前期如何优化
  20. [WARNING]: Invalid characters were found in group names but not replaced, use -vvvv to see details

热门文章

  1. ubuntu/deepin 禁用IPV6
  2. HTML学习笔记2—列表与清单
  3. C#接口-接口的继承
  4. favorites 不是一个有效的短文件名
  5. moss 2007 单点登录的配置
  6. 基于selenium实现12306的登录操作(图形验证码识别)
  7. Windows 安装redis
  8. 如何通过递归找父节点或子节点详解
  9. SpringBatch job执行流程分析(十六)
  10. reactjs redux集中式状态管理最简入门案例