原创 AMR9 2440 定时器中断不能触发的原因

2010-12-5 12:12 3646 4 6 分类: MCU/ 嵌入式

昨天调了一天的2440的定时器中断,本来一段很简单的程序,却问题多多,中断不能触发。


首先我怀疑的是INTPND和INTMSK对应位没有设置好,可是认真看了自己的程序,发现没有问题。

  ClearPending(BIT_TIMER0);
  pISR_TIMER0 = (U32)IRQ_Timer0_Handle;
  EnableIrq(BIT_TIMER0);

后来分析可能是中断向量表放错了位置,中断发生后,程序跑飞了,可是改了改程序,发现程序一直都能正常运行,并没跑飞。这时可以肯定中断向量表并没有放错位置,而是中断完全没有发生,可是这到底是为什么呢?


后来用AXD分析程序的每一步,观察MEMORY的变化,发现TCNTO0(0x51000014)一直是0x00000000,就是说定时计数器完全没有计数,这时可以怀疑初值没有装入了,看了看2440的Datasheet,发现初值需要手动先装入:


a21f5b00-6d27-47e4-b454-6b420a524136.jpg


后来在程序里加入了两句:


  rTCON |=   (0x1 << 1);    


  rTCON &= ~(0x1 << 1);


重新make,烧入运行,定时器中断被触发了,中断服务函数也能正常相应了,问题解决。


希望以上DEBUG过程对遇到同样问题的朋友有所帮助。


JJ.Deng@SCUT


2010.12.05


 

PARTNER CONTENT

文章评论2条评论)

登录后参与讨论

用户345477 2012-3-12 13:55

我用MDK 编写就是keil 4 也是进不去中断服务函数里面 不懂怎么弄???求救

xucun915_925777961 2010-12-6 08:40

来学习一下,现在也在学习ARM^_^
相关推荐阅读
用户309047 2011-01-19 21:23
内核链表使用——删除链表节点
当我们使用遍历的方法来删除链表时: list_for_each(pos, &student_list) {          list_del(pos);     }   list_for_...
用户309047 2011-01-04 19:30
一步步解决Linux上网问题
刚刚接触Linux系统,安装好Linux后,发现不能上网,从网上搜索到了许多鱼龙混杂的资料,经过半天的努力终于把Linux上网问题解决了。 1、查看是否有网卡硬件当然要确保电脑上有网卡,然后在终端上输...
用户309047 2010-12-07 16:26
ARM9 2440 UART串口调试总结
今天很有激情的写了2440的UART的程序,写完调试的时候果然不出所料:电脑串口没有接收到2440发送的数据。认真检查了所有与UART的寄存器的配置,发现都没问题,但是就是不能接收到数据。经过一个下午...
用户309047 2010-11-29 16:42
Can't resolve multiple constant drivers for net **
Can't resolve multiple constant drivers for net ** 这种错误一般是由于定义的reg寄存器在多个always中进行赋值。always是并行执行的,在多个...
用户309047 2010-11-20 11:22
(转载)shell的一些问题
1、bc中的scaleecho "scale=0;13 * 0.6 "|bcecho "scale=0;13 * 0.6 / 1"|bc -lJared Liu: bc做乘法是不受scale变量影响的...
我要评论
2
4
关闭 站长推荐上一条 /3 下一条