HC32f460 GPIO翻转速度
按照官方hc32f460_ddl_Rev2.2.0例程配置的时钟,配置GPIO翻转,其速度只能到6Mhz左右。有没有哪位老师的配置能够使GPIO翻转速度达到10Mhz以上的呢? ddl 库都出 3.1.0 版本了,怎么还在使用旧版本呢?使用寄存器写翻转功能是最快的,别用库函数。 yang377156216 发表于 2023-8-15 14:02ddl 库都出 3.1.0 版本了,怎么还在使用旧版本呢?使用寄存器写翻转功能是最快的,别用库函数。 ...
翻转直接操作的寄存器 翻过20Mhz以上的,不过用的是寄存器写法,没有调用库函数 追求速度的,不要使用库,最好直接操作寄存器,看编译后汇编代码指令数,越少越好 wubangmi 发表于 2023-8-15 15:33
翻过20Mhz以上的,不过用的是寄存器写法,没有调用库函数
POx = (uint16_t *)((uint32_t)(&M4_PORT->PORRB) );
*POx = (*POx) | Pin12;
POx = (uint16_t *)((uint32_t)(&M4_PORT->POSRB) );
*POx = (*POx) | Pin12;
翻到8.7M 本帖最后由 zlf1208 于 2023-8-15 16:20 编辑
nokiaboy 发表于 2023-8-15 15:47
POx = (uint16_t *)((uint32_t)(&M4_PORT->PORRB) );
*POx = (*POx) | Pin12;
把格式转换、求地址等操作都移到循环外面,频率就上去了。
编程不能仅讲究书写工整,要明白程序编译后是什么样的,什么样的格式是重复低效的。 nokiaboy 发表于 2023-8-15 15:47
POx = (uint16_t *)((uint32_t)(&M4_PORT->PORRB) );
*POx = (*POx) | Pin12;
如图
nokiaboy 发表于 2023-8-15 15:47
POx = (uint16_t *)((uint32_t)(&M4_PORT->PORRB) );
*POx = (*POx) | Pin12;
你这不是最快的,有专用的翻转寄存器,而不是SET,RESET
zlf1208 发表于 2023-8-15 16:17
把格式转换、求地址等操作都移到循环外面,频率就上去了。
编程不能仅讲究书写工整,要明白程序编译后是 ...
好的,谢谢你 wubangmi 发表于 2023-8-15 16:18
如图
谢谢你,如果我要同时写PB0-PB7呢?是不是应该操作SET和RESET寄存器 fxyc87 发表于 2023-8-15 17:20
你这不是最快的,有专用的翻转寄存器,而不是SET,RESET
那个试过了,没有直接用SET和RESET快 用新不用旧 本帖最后由 xch 于 2023-8-15 22:09 编辑
nokiaboy 发表于 2023-8-15 17:42
那个试过了,没有直接用SET和RESET快
通用输出翻转寄存器(POTRx) ?
for(;;)
{
CM_GPIO->POTRx = 1<<PIN_NUM;
}
照理说编译后,仅两条指令。就算4周期吧?速度200MHZ的M4 可以达到50mhz翻转,25MHZ频率
xch 发表于 2023-8-15 21:50
通用输出翻转寄存器(POTRx) ?
for(;;)
{
嗯,差不多。但是操作IO口给8位并口LCD屏写数据就变慢了 学习 要达到最快翻转速率,只能用库函数。 GPIO翻转速度会受到多种因素影响 具体的翻转速度可能会受到其他硬件和软件环境的影响。 GPIO的工作模式越高,其翻转速度就越快。
页:
[1]
2