打印
[开发资料]

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

[复制链接]
12|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
GPIO, IO, cw, gp, pi
芯源的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读等待、翻转语句写法、编译器优化等级等多个因素。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

294

主题

2410

帖子

5

粉丝