cortex m3堆栈_arm m0 内核

cortex m3堆栈_arm m0 内核CortexM3Bit-banding简介分类: ARM MCU2012-06-1914:30 1369人阅读 评论(0) 收藏 举报存储byte语言iocbit-band是Cortex-M3内核中针对某一段区域进行位和字映射的机制,对于位操作,如IO控制LED,相比传递的C语言的位操作,提供了很大的方便.bit-band区域将存储器别名区(bit-ba

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

http://blog.csdn.net/shevsten/article/details/7676397


 

Cortex M3 Bit-banding简介

分类: ARM MCU
 
1369人阅读 
评论(0) 
收藏 
举报
bit-band是Cortex-M3内核中针对某一段区域进行位和字映射的机制,对于位操作,如IO控制LED,相比传递的C语言的位操作,提供了很大的方便.

bit-band 区域将存储器别名区(bit-band alias region)的一个字映射为 bit-band区的一个位. 处理器存储器映射包括两个 bit-banding 区域, 它们分别为 SRAM 和外设存储区域中的最低的 1MB.

下图是处理器的地址空间映射,包含了(bit-banding区域的映射)

cortex m3堆栈_arm m0 内核

Cortex-M3 存储器映射有2个32MB别名区,它们被映射为两个1MB的bit-band 区:

  • 对 32MB SRAM 别名区的访问映射为对1MB SRAM bit-band区的访问
  • 对 32MB 外设别名区的访问映射为对1MB外设bit-band区的访问 

cortex m3堆栈_arm m0 内核
映射公式显示如何将别名区中的字与 bit-band 区中的对应位或目标位关联,映射公式如下:
bit_word_offset = (byte_offset x 32) + (bit_number x 4)
bit_word_addr = bit_band_base + bit_word_offset

这里: 

  • Bit_word_offset 为bit-band存储区中的目标位的位置
  • Bit_word_addr为别名存储区中映射为目标位的字的地址
  • Bit_band_base 是别名区的开始地址
  • Byte_offset 为bit-band 区中包含目标位的字节的编号
  • Bit_number 为目标位的位位置(0-7) 

下图显示了 SRAM bit-band 别名区和 SRAMbit-band 区之间的 bit-band 映射的例子:

  • 地址 0x23FFFFE0 的别名字映射为 0x200FFFFF 的bit-band 字节的位 0:
    0x23FFFFE0=0x22000000+(0xFFFFF*32)+0*4 
  • 地址 0x23FFFFFC 的别名字映射为 0x200FFFFF 的bit-band 字节的位 7: 
    0x23FFFFFC=0x22000000+(0xFFFFF*32)+7*4 
  • 地址 0x22000000 的别名字映射为 0x20000000 的bit-band 字节的位 0:
    0x22000000=0x22000000+(0*32)+0*4 
  • 地址 0x220001C 的别名字映射为 0x20000000 的bit-band 字节的位 0:
    0x2200001C=0x22000000+(0*32)+7*4 

cortex m3堆栈_arm m0 内核

向别名区写入一个字与在 bit-band 区的目标位执行读-修改-写操作具有相同的作用.

写入别名区的字的位0决定了写入bit-band 区的目标位的值。将位 0 为1的值写入别名区表示向 bit-band 位写入1, 将位0 为0 的值写入别名区表示向bit-band 位写入 0.

别名字的位[31:1]在 bit-band 位上不起作用。写入 0x01 与写入 0xFF 的效果相同, 写入0x00 与写入0x0E 的效果相同.

读别名区的一个字返回 0x01 或0x00, 0x01 表示 bit-band 区中的目标位置位, 0x00 表示目标位清零。位[31:1]将为 0。 

注:采用大端格式时,对 bit-band 别名区的访问必须以字节方式。否则访问值不可预知。  

以下是一个根据bit-band区域地址和目标位来计算bit-band alias region映射的对应字节的宏(来源于Atmel ASF的bit-banding Example):

[cpp] 
view plain
copy

  1. /** 
  2.  *  \brief Calculate bit band alias address. 
  3.  *  
  4.  *  Calculate the bit band alias address and return a pointer address to word. 
  5.  * 
  6.  *  \param addr The byte address of bitbanding bit. 
  7.  *  \param bit  The bit position of bitbanding bit. 
  8.  *  \callergraph 
  9.  */  
  10. #define BITBAND_ALIAS_ADDRESS(addr, bit) \  
  11.     ((volatile uint32_t*)((((uint32_t)(addr) & 0xF0000000) + 0x02000000) \  
  12.                           +((((uint32_t)(addr)&0xFFFFF)*32)\  
  13.                           +(  (uint32_t)(bit)*4))))  
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/182564.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 02-continue与break的区别「建议收藏」

    02-continue与break的区别「建议收藏」大家好,我是Python领域的博主,如果觉得我的写的不错的话,请点赞关注支持我一下。如果你是初学者,可以和小编一起学习,在这里我每天都会发Python的基础知识,以及相关的代码。关注我和我一起学习吧文章目录 一、continue和break的区别 二、使用方法 1.continue 2.break 总结一、continue和break区别break和continue是python语…

    2022年9月13日
    0
  • Vue大数据可视化(大屏展示)解决方案

    Vue大数据可视化(大屏展示)解决方案一个基于vue、datav、Echart框架的大数据可视化(大屏展示)模板,最近更新了详细的介绍说明,实现大数据可视化。通过vue组件实现数据动态刷新渲染,内部图表可自由替换。部分图表使用DataV自带组件,可自由进行更改,持续更新…项目地址:vue-big-screen(码云)一、项目描述一个基于vue、datav、Echart框架的”数据大屏项目”,通过…

    2022年6月7日
    462
  • 深入研究Clang(三) libclang

    深入研究Clang(三) libclang

    2021年11月15日
    39
  • mac怎么安装svn_eclipse svn插件安装

    mac怎么安装svn_eclipse svn插件安装相信在windows上朋友,应该都使用过svn,其中TortoiseSVN简单高效,都习惯了,但是TortoiseSVN没有Mac版,今天给大家推荐一款非常相似的软件——SnailSVN

    2022年10月8日
    0
  • plsql oracle 使用教程

    plsql oracle 使用教程课程一PL/SQL基本查询与排序    本课重点:    1、写SELECT语句进行数据库查询    2、进行数学运算    3、处理空值    4、使用别名ALIASES    5、连接列    6、在SQLPLUS中编辑缓冲,修改SQLSCRIPTS    7、ORDERBY进行排序输出。  8、使用WHERE字段。    一…

    2022年6月3日
    47
  • 如火热链接到css,用于在Webpack中启用热式样装入器以同步css的配置

    如火热链接到css,用于在Webpack中启用热式样装入器以同步css的配置

    2021年8月16日
    52

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号