OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6441|回复: 4

位带寻址疑惑,求解答

[复制链接]

1

主题

4

帖子

0

精华

新手入门

积分
28
金钱
28
注册时间
2012-12-24
在线时间
0 小时
发表于 2012-12-30 10:43:00 | 显示全部楼层 |阅读模式
  刘老师or各位大侠,
    买了mini开发板一周了,看了下ARM周边资料,现在看《例说STM32第一个例程》点LED灯,对其中IO口的位操作定义始终无法理解,见如下:
    ARM-CORTEX M3中有段无法理解,见附件
     图片中最下面一句:“*4表示一个字为4个字节,*8表示一个字节中又8个位”,而在文中貌似*4是乘4?
     十分感谢!
  

    
190401sf5d3zt2vqskj3f4.jpg.bmp
。。。。。。。。。。。。。。。。。。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

6

帖子

0

精华

新手上路

积分
38
金钱
38
注册时间
2012-10-27
在线时间
3 小时
发表于 2012-12-30 11:52:37 | 显示全部楼层
回复 支持 反对

使用道具 举报

1

主题

4

帖子

0

精华

新手入门

积分
28
金钱
28
注册时间
2012-12-24
在线时间
0 小时
 楼主| 发表于 2012-12-30 11:53:01 | 显示全部楼层

归根结底为以下三条指令难以理解:
#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)) 
。。。。。。。。。。。。。。。。。。
回复 支持 反对

使用道具 举报

1

主题

4

帖子

0

精华

新手入门

积分
28
金钱
28
注册时间
2012-12-24
在线时间
0 小时
 楼主| 发表于 2012-12-30 12:03:14 | 显示全部楼层
回复【2楼】wsk36789:
---------------------------------
兄弟,有些地方真是赞同。衔接有些不好,高手可能看得懂,我这初学者,MD,只好把英文原档拿出来对着看。
。。。。。。。。。。。。。。。。。。
回复 支持 反对

使用道具 举报

0

主题

6

帖子

0

精华

新手上路

积分
38
金钱
38
注册时间
2012-10-27
在线时间
3 小时
发表于 2012-12-30 14:07:13 | 显示全部楼层
其实这三个宏不是很难理解的,展开后是这样的*((volatile unsigned long  *)(((addr & 0xF0000000)+0x2000000+((addr &0xFFFFF)<<5)+(bitnum<<2)))) 。(addr & 0xF0000000)取基地址,(addr &0xFFFFF)<<5)取偏移地址然后*32,(bitnum<<2)==bitnum*4。最后得到的是一个位带地址
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-20 04:38

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表