[AT32F421] AT32F421的GPIO是否支持位带操作

[复制链接]
 楼主| zhjerry 发表于 2020-12-4 19:07 | 显示全部楼层 |阅读模式
AT32F421的GPIO是否支持位带操作

正在使用AT32F421移植原来使用SXX32F103的设计。
发现GPIO的位带操作无效。相对F103的GPIO位带定义已经把OsODR/OsIDR分别由12/8改为20/16, 已经验证无效。
请厂家确认。如果可行请指导正确方法。
muyichuan2012 发表于 2020-12-4 21:22 来自手机 | 显示全部楼层
421的地址是按着st030排的 因此和st030一样,gpio 不支持bitband。但是 421 gpio有单独的set 和rset寄存器,和bitband操作一样。
 楼主| zhjerry 发表于 2020-12-7 08:51 | 显示全部楼层
谢谢解答。改代码问题解决了,没有BITBAND效率稍低而已。
M4内核本身是支持BITBAND的, 而且F421的SRAM区域也支持这个功能,开发库有应用实例。
不了解为什么把GPIO的BITBAND功能给阉割了,能节省很多逻辑门 ?
更不理解的是这么重要的信息在DS和RM中为什么只字不提?一定要用户自己摸索或到论坛提问?
ughbss 发表于 2020-12-7 22:25 | 显示全部楼层
其实DS和RM中已经说明,BITBAND地址段是ARM规定的,而421的GPIO相关寄存器不在BITBAND地址段中,所以不支持BITBAND功能。参考M4权威手册
嵌入小菜菜 发表于 2020-12-8 21:48 | 显示全部楼层
现在的位操作效率很低吧,为什么还用?
muyichuan2012 发表于 2020-12-9 17:17 | 显示全部楼层
本帖最后由 muyichuan2012 于 2020-12-9 17:18 编辑
zhjerry 发表于 2020-12-7 08:51
谢谢解答。改代码问题解决了,没有BITBAND效率稍低而已。
M4内核本身是支持BITBAND的, 而且F421的SRAM区域 ...

前面已经很明确的回答您了,使用GPIOx_BSRE 效率和bitband是一样的。GPIOx_BSRE 设计的目的就是为了快速进行GPIO set和reset,
其优势在于:操作时,直接写1即可,写0是无效的,无须把寄存器值读出来。

gpio.png


 楼主| zhjerry 发表于 2020-12-9 20:18 | 显示全部楼层
muyichuan2012 发表于 2020-12-9 17:17
前面已经很明确的回答您了,使用GPIOx_BSRE 效率和bitband是一样的。GPIOx_BSRE 设计的目的就是为了快速进 ...

写操作效率差不多,读操作效率略低。
而代码可读性也差一点。
muyichuan2012 发表于 2020-12-9 20:37 | 显示全部楼层
本帖最后由 muyichuan2012 于 2020-12-9 20:38 编辑

代码可读性的决定因素是程序员编写风格,421对标的是st030,st030的设计也是这样的。
当然您的确想使用bitband功能,也可以使用at32f415  413 403a 407等型号,这些型号对标的是st103.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

53

主题

232

帖子

4

粉丝
快速回复 在线客服 返回列表 返回顶部