Chinaunix首页 | 论坛 | 博客
  • 博客访问: 116269
  • 博文数量: 32
  • 博客积分: 2015
  • 博客等级: 大尉
  • 技术积分: 475
  • 用 户 组: 普通用户
  • 注册时间: 2005-11-01 14:29
文章分类

全部博文(32)

文章存档

2011年(1)

2009年(12)

2008年(19)

我的朋友

分类:

2008-12-19 21:24:17

在浪费了将近一个星期的业余时间,看门狗频率问题的真相终于搞清楚了。
在利用看门狗定时器作为Billux OS的tick时钟的时候发现tick与实际的时间存在两倍关系,即我task_delay(100)的时候,实际等待的时间只有0.5秒。我的直觉告诉我,我在设置看门狗定时器或系统时钟的时候设置错了,于是开始了漫漫的确认道路,结果没有发现问题,于是到21ic arm论坛向高手询问,没有什么结果。于是不想在这棵树上吊死,换成用PWM定时器作为tick时钟,结果和看门狗定时器完全一样,这个时候我还是执迷不悟,怀疑是我频率设置太高(当时设置为192MHZ)导致芯片工作不稳定,于是将工作频率调低到90MHZ,结果还是依旧。这个时候我开始反思,因为这其中一直有这样一个问题让我怀疑,UART0的工作是正常的,而它的波特率分频也是根据PCLK计算出来。
最终在我对中断程序进行检查时,终于发现了问题所在,我把清INTPND放在了SRCPND的前面了。真是天大的笑话!于是一切都清楚了:
当定时中断到来时,执行完中断处理程序后,先清INTPND,这时由于SRCPND没有清,所以INTPND马上又被置上了。然后清SRCPND,中断推出,但马上又被触发中断,因为INTPND还置着呢!于是再次进入中断执行相应的中断处理程序。清INTPND,由于这时SRCPND已经被清了,所以INTPND不会再此被置上。再清SRCPND,已经是空操作,因为SRCPND已经在前面被清了。于是,1个中断变成了2个,100HZ变成了200HZ。
真是荒唐啊!
 
阅读(917) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~