TI中文支持网
TI专业的中文技术问题搜集分享网站

AM335x中断响应最短时间

使用beaglebone开发板,修改并调试StarteWare里面的定时器例程。具体描述如下:

1. 配置两个定时器DMTimer2和DMTimer3,都是自动重装载,其中DMTimer2设置10us中断一次(自动重装载值0xFFFFFFFF –  240),DMTimer3设置1秒中断一次(自动重装载值0xFFFFFFFF – 24000000).两个中断的优先级分别为0和1.

2. DMTimer2中断处理函数中只对一个变量cntValue进行自加操作

3. DMTimer3中断处理函数中通过串口输出cntValue的值,并将cntValue清零

调试发现输出的cntValue每次都只有74600多,按理论计算1秒时间内10us中断应触发100000次才对,这个差距太大了。将DMTimer2定时值修改为20us,30us,丢失的中断会少很多,但还是存在。

 

来自21ic论坛

leo chen:

可以看一下串口打印是否占用了时间

mangui zhang:

回复 leo chen:

串口打印的时候,10us的定时器应该是没关系的

Zhou Feng:

这个帖子是我在21ic发的,没想到这么快就有人转到这里来了。我之前在这里发过,但没人理我。

我现在把打印语句移到主循环中去了,然后把清中断标志位的地方改用直接操作寄存器,而不是调用库函数,现在已经能够达到每秒响应99500多次中断了。但中断处理程序中压根做不了什么事情,因为进入中断处理程序前压栈等操作占用了太多时间。

我用STM32做了测试,1秒能响应99800多次,而且中断处理函数长一点也没关系,难道AM335x在中断响应速度方面比STM32都不如?两个的主频差距可是差不多10倍啊。

kooking:

回复 Zhou Feng:

不知道我这个理解对你是否有帮助,这个和AM335x没有必然的联系,linux系统对中断的处理并不是时实的,所以对中断和时序要求比较高的场合,比如接收红外控制器的命令,都不会用linux,一般是用单独的M3或者实时性更高的μclinux

Yaoming Qin:

回复 kooking:

kooking

不知道我这个理解对你是否有帮助,这个和AM335x没有必然的联系,linux系统对中断的处理并不是时实的,所以对中断和时序要求比较高的场合,比如接收红外控制器的命令,都不会用linux,一般是用单独的M3或者实时性更高的μclinux

leo chen:

回复 mangui zhang:

也可以反汇编看一下,这个地方走了多少条指令周期,大概可以算出来时间

Zhou Feng:

回复 Yaoming Qin:

我把MMU和Cache都打开后,中断处理程序里多几条指令也没关系了,中断响应次数大致不变,但仍然达不到每秒中断100000次,请问您觉得这个误差是由什么原因产生的呢?

STONE:

回复 Zhou Feng:

个人认为DMTimer2设置10us溢出中断自动重装载值应为0xFFFFFFFF – 239.

另外两个Timer的中断号分为68和69,若将两个优先级都设置为0试试呢?

Zhou Feng:

回复 STONE:

果然是这样的,将自动重装载值设为0xFFFFFFFF – 239,则可以正确地得到100000次中断响应!

谢谢!

赞(0)
未经允许不得转载:TI中文支持网 » AM335x中断响应最短时间
分享到: 更多 (0)