szt1993 发表于 2025-2-7 16:29

芯源CW32L010GPIO翻转速度到底可以有多快?

芯源的CW32L010 MCU,这颗MCU是Cortex-M0+内核,但是其GPIO没有直接挂在内核上,而是挂在AHB总线上。该MCU最高主频是48Mhz。

我们基于CW32L010_StandardPeripheralLib_V1.0.2ExamplesGPIOgpio_blink做了简单修改,该例子默认跑的是4Mhz主频,将其修改为48Mhz

实际测试结果只有8Mhz,这是什么原因呢?我们可以看到低电平时间是2个指令周期,但是高电平时间却是4个指令周期。

这是因为Flash读等待所导致的,当主频大于24Mhz之后,需要插入1个等待周期,所以无法保证每个翻转都能达到2个指令周期。

我们可以再做一个测试,将其主频降低为24Mhz,可以看到此时GPIO翻转速率可以达到6Mhz,这是因为没有flash读等待周期了。


szt1993 发表于 2025-2-7 16:31

最后再做一个测试,把上述翻转GPIO的代码做一点修改,上述用了BSRR、BRR寄存器来实现置位和清零,如果使用ODR寄存器会有什么效果呢?



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


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


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


由此可见,影响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

翻转速度肯定是越快越好
页: [1]
查看完整版本: 芯源CW32L010GPIO翻转速度到底可以有多快?