OpenEdv-开源电子网

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

使用位带别名的写操作:到底是让位带别名的地址空间左移,还是让位带地址空间左移?

[复制链接]

2

主题

6

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2011-10-21
在线时间
0 小时
发表于 2011-10-27 22:09:23 | 显示全部楼层 |阅读模式
 



上面是《Cortex-M3权威指南》第89页的内容,请看划红线的部分。问题如标题?先谢谢大家帮我解答。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2011-10-27 22:36:07 | 显示全部楼层
回复【楼主位】wangkaichao2:
---------------------------------
我的理解是:比如GPIOA->ODR,有16个位(位带区),然后这16个位对应着16个别名地址.以GPIOA->ODR的第10位为例.
在读操作到时候,先取位带地址的值,即获得GPIOA->ODR的值,然后右移10位,那么LSB的值就是GPIOA->ODR的值了,然后返回这个LSB.那么就实现了读GPIOA->ODR的第十位.
在写的时候,则需要把这个LSB左移10位,然后执行 清空第十位,写入第十位的操作(也就是读-改-写),这样就实现了GPIOA->ODR的第十位的一个写操作.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

2

主题

6

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2011-10-21
在线时间
0 小时
 楼主| 发表于 2011-10-28 16:10:27 | 显示全部楼层
哦,大概理解一点。
回复 支持 反对

使用道具 举报

2

主题

5

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2011-10-31
在线时间
3 小时
发表于 2011-11-1 01:33:35 | 显示全部楼层
准确地说,是让“写入位带别名区的那个字值”的LSB左移至“在位带区中对应位”的位置,然后,对这个位置的位(位带区的)做“读-改-写”操作。

所以会造成读者迷惑的原因,除了翻译的缘故外,也和作者写书的出发点有关。
作者这么描述,是试图让你了解运作机理。
而从编程者的角度,根本就不需要了解这个,你只需要明白:
有位带区,位带区的每个位,和位带别名区的一个字对应,对位带别名区的一个地址写入一个字,这个字的其他位值是没有任何效果的,只有LSB写入位带区的对应位;反过来,对位带别名区的一个地址读,读到的值,除了LSB是位带区相应的位值,这个“字值”的其他位都是0;
另外,顺便提一句,我的看法,位带别名区只是简化了对位的操作,但是,速度上并不是提高太多。网上有人想当然地说位带别名区的操作速度比普通的操作快10倍,那纯粹是胡说。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2011-11-1 08:58:44 | 显示全部楼层
 回复【4楼】yundm:
---------------------------------

位带别名区是不能提高速度的.想提高速度,用BSRR和BRR去设置,速度可以提高一些.但是也没有10倍那么多...
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

2

主题

5

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2011-10-31
在线时间
3 小时
发表于 2011-11-1 15:51:22 | 显示全部楼层
楼上的概念混乱了吧?
BSRR和BRR仅仅能操作GPIO口的ODR的位,一个STM32CPU中的ODR寄存器就那么几个。
位带别名区包含对应了片上外设区1M字节的所有位,同时也包含对应了RAM区1M字节的所有位。
进一步说,在STM32中,通过位带区可以操作ODR的每个位,也可以操作BSRR和BRR的每个位,并且能操作更多的位。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2011-11-1 16:50:23 | 显示全部楼层
回复【6楼】yundm:
---------------------------------
仅仅从提高输出速度来说.却是BSRR,BRR会快ODR很多倍的.
至于能不能用位带别名区来操作BSRR,就没研究了.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2011-11-1 16:50:33 | 显示全部楼层
回复【6楼】yundm:
---------------------------------
仅仅从提高输出速度来说.却是BSRR,BRR会快ODR很多倍的.
至于能不能用位带别名区来操作BSRR,就没研究了.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

2

主题

6

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2011-10-21
在线时间
0 小时
 楼主| 发表于 2011-11-5 22:11:01 | 显示全部楼层
3楼的解释很详细,我明白了,谢谢两位的解答
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-24 10:27

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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