打印

AM335x能够准确响应的最短定时中断是多少?

[复制链接]
3744|32
手机看帖
扫描二维码
随时随地手机跟帖
沙发
wyjie| | 2016-7-23 21:30 | 只看该作者
详细说说

使用特权

评论回复
板凳
wuhany|  楼主 | 2016-7-23 21:32 | 只看该作者
如题,我设置定时器每10us中断一次,发现1秒时间内只响应了7万多次,而理论上应该会有10万次中断产生。差距有点大,ARM A8的中断响应时间不应该是ns级别的吗?

使用特权

评论回复
地板
yszong| | 2016-7-23 21:33 | 只看该作者
怎么会差这么多?

使用特权

评论回复
5
wuhany|  楼主 | 2016-7-23 21:36 | 只看该作者
我是裸机跑的,中断处理函数中也没做什么事情,应该对中断响应没什么影响才对。

使用特权

评论回复
6
dengdc| | 2016-7-23 21:36 | 只看该作者
具体描述下

使用特权

评论回复
7
wuhany|  楼主 | 2016-7-23 21:37 | 只看该作者
我使用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,丢失的中断会少很多,但还是存在。

请问这究竟是怎么回事?AM335x的中断响应时间应该是非常短才对呀。

使用特权

评论回复
8
jiahy| | 2016-7-23 21:40 | 只看该作者
我没用过AM335x。
但我觉得这个操作过程肯定有占用时间影响中断的操作

使用特权

评论回复
9
shimx| | 2016-7-23 21:41 | 只看该作者
你看没看过这个过程执行一次花费多长时间?

使用特权

评论回复
10
jiaxw| | 2016-7-23 21:42 | 只看该作者
你确定一下Timer clock in
和System clk的关系  

使用特权

评论回复
11
liliang9554| | 2016-7-23 21:43 | 只看该作者
10us应该是没问题的

使用特权

评论回复
12
wuhany|  楼主 | 2016-7-23 21:44 | 只看该作者
我把1秒中断处理函数中的打印语句移到主循环中,然后把两个中断处理函数中清中断操作都改成直接操作寄存器,之前是调用库函数做的。现在1秒能够响应99585次左右中断,但还是没达到100%正确。之前没想到这两个地方对中断响应影响这么大!因为我一直以为AM3359工作在700M主频啊,10us应该能做很多事情。。。

使用特权

评论回复
13
wuhany|  楼主 | 2016-7-23 21:45 | 只看该作者
现在两个中断处理函数都已经非常精简了,再精简就啥事也做不成了。。。还有没有别的办法能再改进一下,保证1秒能响应100000个中断呢?

使用特权

评论回复
14
wuhany|  楼主 | 2016-7-23 21:46 | 只看该作者
我小白了,之前没想到中断处理程序占用了那么长的时间。。。现在1秒能够响应99585次左右中断了,离100000已经近在咫尺了,但还是不完全正确啊。

使用特权

评论回复
15
huangchui| | 2016-7-23 21:47 | 只看该作者
加油。不懂AM335x,你可以继续研究下执行一次操作花费了多长时间,甚至于每一句代码花费的时间

使用特权

评论回复
16
zhanghqi| | 2016-7-23 21:48 | 只看该作者
如果要做到非常精确  别的事情就别干了   虽然不影响定时器的中断   每次中断前后的进栈出栈耗得时间
别的也就干不了多少了   

使用特权

评论回复
17
wyjie| | 2016-7-23 21:49 | 只看该作者
个人觉得这已经差不多了  因为每次中断后要计数加一   还有请标志等操作都是要耗时的  
这些耗时肯定要算到你的1s定时中吧  所以1s内不可能达到100000个

使用特权

评论回复
18
wuhany|  楼主 | 2016-7-23 21:49 | 只看该作者
建议你进入中断后马上清标志使能10us的定时器  然后在加一

使用特权

评论回复
19
jlyuan| | 2016-7-23 21:53 | 只看该作者
还有每1s定时后   再次使能是否和10us的同时开始   这都会带来误差的

使用特权

评论回复
20
dengdc| | 2016-7-23 21:55 | 只看该作者

够多了....
600 000 000hz的cpu,1000个时钟周期完成一次中断.而不是响应一次中断.

我用600M的a9+Linux测也比你这个高...估计测试方法不对

使用特权

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

本版积分规则

879

主题

10435

帖子

4

粉丝