[开发资料] 芯源CW32L010GPIO翻转速度到底可以有多快?

[复制链接]
 楼主| szt1993 发表于 2025-2-7 16:29 | 显示全部楼层 |阅读模式
GPIO, IO, cw, gp, pi
芯源的CW32L010 MCU,这颗MCU是Cortex-M0+内核,但是其GPIO没有直接挂在内核上,而是挂在AHB总线上。该MCU最高主频是48Mhz。
1.png
我们基于CW32L010_StandardPeripheralLib_V1.0.2ExamplesGPIOgpio_blink做了简单修改,该例子默认跑的是4Mhz主频,将其修改为48Mhz
2.png
实际测试结果只有8Mhz,这是什么原因呢?我们可以看到低电平时间是2个指令周期,但是高电平时间却是4个指令周期。
3.png
这是因为Flash读等待所导致的,当主频大于24Mhz之后,需要插入1个等待周期,所以无法保证每个翻转都能达到2个指令周期。
4.png
我们可以再做一个测试,将其主频降低为24Mhz,可以看到此时GPIO翻转速率可以达到6Mhz,这是因为没有flash读等待周期了。
5.png

 楼主| szt1993 发表于 2025-2-7 16:31 | 显示全部楼层
最后再做一个测试,把上述翻转GPIO的代码做一点修改,上述用了BSRR、BRR寄存器来实现置位和清零,如果使用ODR寄存器会有什么效果呢?

1.png

可以看到,翻转速率直接只有4Mhz。

2.png
通过汇编代码可以看到,多了一条MOVS指令,该指令需要1个指令周期,所有最高翻转速率为24Mhz/(3+3)=4Mhz。

3.png
除了置位/清零寄存器、输出数据寄存器实现GPIO翻转外,有的MCU还有翻转寄存器,比如CW32L010有,MM32G0001和PY32F002B没有,直接用这一个寄存器就可以实现IO翻转,实测这个效果和BSRR/BRR一样。
4.png

由此可见,影响MCU GPIO翻转速度的因素有很多,包括系统主频、是否支持单周期翻转、Flash读等待、翻转语句写法、编译器优化等级等多个因素。

peterLaw 发表于 2025-2-18 17:06 | 显示全部楼层
芯源的CW32L010 MCU,这颗MCU是Cortex-M0+内核,但是其GPIO没有直接挂在内核上,而是挂在AHB总线上。该MCU最高主频是48Mhz速率非常快的
星辰大海不退缩 发表于 2025-2-20 11:04 | 显示全部楼层
GPIO的翻转速率其实还是比较快的满足大部分场景需求
stormwind123 发表于 2025-2-21 19:00 | 显示全部楼层
在实际测试中,CW32L010的GPIO翻转速度可能低于理论值。
laocuo1142 发表于 2025-2-21 22:00 | 显示全部楼层
芯源CW32L010的GPIO翻转速度受多个因素影响,其实际翻转速度可能低于理论值。在具体应用中,需要根据实际需求和条件来选择合适的配置和优化方式,以实现最佳的GPIO翻转性能。
小小蚂蚁举千斤 发表于 2025-2-23 22:24 | 显示全部楼层
一般IO反转速率就够输出输入使用了
中国龙芯CDX 发表于 2025-3-19 22:33 | 显示全部楼层
芯源的CW32L010 MCU性能非常不错
jf101 发表于 2025-3-20 17:37 | 显示全部楼层
翻转速度肯定是越快越好
您需要登录后才可以回帖 登录 | 注册

本版积分规则

344

主题

2836

帖子

6

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

344

主题

2836

帖子

6

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