智能车制作

 找回密码
 注册

扫一扫,访问微社区

12
返回列表 发新帖
楼主: westzhao
打印 上一主题 下一主题

问个简单的问题 关于pit

[复制链接]

15

主题

168

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2419
威望
1433
贡献
598
兑换币
530
注册时间
2014-1-13
在线时间
194 小时
11#
发表于 2014-2-7 21:00:00 | 只看该作者
hjhee 发表于 2014-2-7 19:50
可以在PIT的ISR里面写一个延时函数看看效果,例如B0接LED灯
void pit0_isr(void){
    int i;

这也不能验证中断服务程序之间的时间间隔是相等与不相等啊?
回复 支持 反对

使用道具 举报

0

主题

10

帖子

0

精华

高级会员

Rank: 4

积分
642
威望
311
贡献
209
兑换币
191
注册时间
2013-9-14
在线时间
61 小时
12#
发表于 2014-2-7 22:31:03 | 只看该作者
本帖最后由 hjhee 于 2014-2-7 22:43 编辑
gufeng 发表于 2014-2-7 21:00
这也不能验证中断服务程序之间的时间间隔是相等与不相等啊?

参照下面的代码,可以尝试更改下N、"PIT_FLAG_CLEAR(0);"的执行位置(ISR的开头、末尾)、还有是否禁止总中断等,看看LED灯的闪烁时间间隔各有什么变化。

#define N 100
#define M 1000000

void delay(int t){
    int i;
    while(t--)
        for(i=0; i<M; ++i);
}

void pit0_isr(void){
    DisableInterrupts;
    delay(N);
    gpio_toggle(PORTB, 0);
    PIT_FLAG_CLEAR(0);
    EnableInterrupts;
}

假设PIT0的周期为500ms,设置长一些可以看到LED灯闪烁的频率。
ARM在一个周期内是不能完成10^8次加法的,所以在一个ISR中设置上面那样的delay函数,可能会导致在一个中断函数的语句未执行完毕之前,下一个中断请求已经到了。而PIT有中断标志位,未清除标志位之前是不会进入下一个PIT中断的。

如果进入ISR后,PIT的计时器还在计时,那么清除了中断标志后(PIT_FLAG_CLEAR(0);),我想应该就会再次进入ISR函数。
在上面的pit0_isr函数中,把“gpio_toggle(PORTB, 0);”语句放在delay函数之前的话,那么gpio_toggle会在进入ISR后立即执行,所以会看到LED闪烁的频率与正常的相比没有明显变化。

如果是进了中断后停止计时,出了中断程序再开始500ms计时,那么在ISR中放置的delay函数,中断里面的程序执行时间超过了500ms,PIT会产生混乱。那么改变上面程序的M、N的大小,应该会看到LED闪烁的频率有所变化。即便所设置的M、N使得ISR函数能在500ms内执行完毕,比如ISR函数要执行20ms或者100ms,这些频率的变化应该都是能看出来的。

还有,如果事实上是清除了中断标志后,PIT才开始计时,可以再另想其他办法看看究竟是怎么回事。不过最好还是先看看文档的说明吧,虽然长,但讲的比较清楚。
回复 支持 反对

使用道具 举报

15

主题

168

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2419
威望
1433
贡献
598
兑换币
530
注册时间
2014-1-13
在线时间
194 小时
13#
发表于 2014-2-7 23:10:43 | 只看该作者
hjhee 发表于 2014-2-7 22:31
参照下面的代码,可以尝试更改下N、"IT_FLAG_CLEAR(0);"的执行位置(ISR的开头、末尾)、还有是否禁止总 ...

好办法
回复 支持 反对

使用道具 举报

13

主题

1457

帖子

0

精华

知名人物

黑暗中的光

Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15

积分
41708

活跃会员奖章优秀会员奖章论坛元老奖章在线王奖章

威望
32976
贡献
7072
兑换币
272
注册时间
2014-10-25
在线时间
830 小时
14#
发表于 2015-4-19 14:58:11 | 只看该作者
在退出中断函数是,把计数器清零一次,中断标志位清零即可
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-9-20 21:40 , Processed in 0.074365 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表