eric2013 发表于 2018-12-14 00:52:15

测试STM32H7进出中断的速度能跑到12.5MHz,所有程序在TCM和Flash运行没差别

1、开启最高等级优化和时间优化。
2、测试下面情况下,性能没差别
(1)程序在Flash运行,变量在DTCM,开启Cache。
(2)程序和变量都在DTCM运行

测试中断:
/*
*********************************************************************************************************
*      函 数 名: TIM6_DAC_IRQHandler
*      功能说明: TIM6定时中断服务程序
*      返 回 值: 无
*********************************************************************************************************
*/
void TIM6_DAC_IRQHandler(void)
{
   TIM6->SR = ~TIM_FLAG_UPDATE;
   //GPIOB->ODR ^= GPIO_PIN_1;
   HC574_TogglePin(GPIO_PIN_23);
}


IO翻转10MHz,方波频率5MHz:


IO翻转12.5MHz,方波频率6.25MHz:



tianyekpsex 发表于 2018-12-14 10:01:15

这个没有1052快哦

eric2013 发表于 2018-12-14 11:05:38

tianyekpsex 发表于 2018-12-14 10:01
这个没有1052快哦

是的,这个是纯跑主频了。

gpfrank 发表于 2018-12-14 19:40:00

使用QSPI的FLASH跑速度是什么样子的呢?

eric2013 发表于 2018-12-15 08:52:33

gpfrank 发表于 2018-12-14 19:40
使用QSPI的FLASH跑速度是什么样子的呢?

http://www.armbbs.cn/forum.php?mod=viewthread&tid=89720&highlight=QSPI

只要干不死就学 发表于 2021-4-22 15:20:35

你好,硬汉,H7定时器中断服务函数里面,如果加上条件判断,能做4M的io控制电平吗

laofa 发表于 2021-4-22 21:14:24

你的方法太啰嗦,并不高效

eric2013 发表于 2021-4-23 08:37:24

只要干不死就学 发表于 2021-4-22 15:20
你好,硬汉,H7定时器中断服务函数里面,如果加上条件判断,能做4M的io控制电平吗

可以的。主频开到最高480MHz。程序尽可能的简单。

eric2013 发表于 2021-4-23 08:37:41

laofa 发表于 2021-4-22 21:14
你的方法太啰嗦,并不高效

欢迎补充高效方案:handshake

laofa 发表于 2021-4-26 19:51:39

eric2013 发表于 2021-4-23 08:37
欢迎补充高效方案

你的方法是读-修改-写,当然会浪费很多时间,要用只写不读的方法,并且用空间换时间,尽可能减少跳转。例如:
GPIOB->BSRR = GPIO_PIN_1;
GPIOB->BSRR = GPIO_PIN_1<<16;
GPIOB->BSRR = GPIO_PIN_1;
GPIOB->BSRR = GPIO_PIN_1<<16;
GPIOB->BSRR = GPIO_PIN_1;
GPIOB->BSRR = GPIO_PIN_1<<16;
GPIOB->BSRR = GPIO_PIN_1;
GPIOB->BSRR = GPIO_PIN_1<<16;
还有你用定时器中断也是会大幅消耗时间的,因为要压栈出栈,要好多个周期。实际还要看编译器如何处理了。

eric2013 发表于 2021-4-26 23:46:10

laofa 发表于 2021-4-26 19:51
你的方法是读-修改-写,当然会浪费很多时间,要用只写不读的方法,并且用空间换时间,尽可能减少跳转。例 ...
谢谢。

我以为你要说的是其它高级玩法。这个测得就是我们平时常用玩法下中断的进出速度。

deru_qq 发表于 2021-4-30 10:48:29

laofa 发表于 2021-4-26 19:51
你的方法是读-修改-写,当然会浪费很多时间,要用只写不读的方法,并且用空间换时间,尽可能减少跳转。例 ...

H7这样操作GPIO的话,翻转速度极限是16.67Mhz

emwin 发表于 2021-5-1 14:44:08

中断性能非常好,而且有Cache,即使在QSPI中,重复中断肯定能跑满速度

2859932063 发表于 2023-9-16 16:06:36

这样测对吗?:shutup: H7 cpu要操作io口好像要夸两个总线所以会很慢.....

2859932063 发表于 2023-9-16 16:11:21

:shutup:最佳的方法应该是使用计数器吧,在开启中断之后开启计数器,中断来了之后直接关闭所有中断,获取计数器的值这样应该会非常准确。H7用CPU操作IO需要跨两个总线,实际while循环操作的话,H7还不如F4快:funk:

eric2013 发表于 2023-9-16 16:19:18

2859932063 发表于 2023-9-16 16:11
最佳的方法应该是使用计数器吧,在开启中断之后开启计数器,中断来了之后直接关闭所有中断,获取计 ...
这个 HC574_TogglePin(GPIO_PIN_23);是FMC扩展IO测试的,这个扩展IO支持50MHz翻转。

不是GPIO。

yunqi 发表于 2023-9-22 09:36:55

能把CATCH 关掉试试?

eric2013 发表于 2023-9-23 07:32:54

yunqi 发表于 2023-9-22 09:36
能把CATCH 关掉试试?

关闭Cache没测。

longge 发表于 2024-2-4 17:16:57

eric2013 发表于 2023-9-16 16:19
这个 HC574_TogglePin(GPIO_PIN_23);是FMC扩展IO测试的,这个扩展IO支持50MHz翻转。

不是GPIO。

硬汉哥,你看这么理解对不,STM32H743 实际进出中断最快的速率差不多就是12.5Mhz,主要是因为要压栈、出栈。你这个测试如果换成翻转GPIO,不是FMC 扩展IO口,应该速度还会下降。
页: [1]
查看完整版本: 测试STM32H7进出中断的速度能跑到12.5MHz,所有程序在TCM和Flash运行没差别