昨天调了一天的2440的定时器中断,本来一段很简单的程序,却问题多多,中断不能触发。
首先我怀疑的是INTPND和INTMSK对应位没有设置好,可是认真看了自己的程序,发现没有问题。
ClearPending(BIT_TIMER0);后来分析可能是中断向量表放错了位置,中断发生后,程序跑飞了,可是改了改程序,发现程序一直都能正常运行,并没跑飞。这时可以肯定中断向量表并没有放错位置,而是中断完全没有发生,可是这到底是为什么呢?
后来用AXD分析程序的每一步,观察MEMORY的变化,发现TCNTO0(0x51000014)一直是0x00000000,就是说定时计数器完全没有计数,这时可以怀疑初值没有装入了,看了看2440的Datasheet,发现初值需要手动先装入:
后来在程序里加入了两句:
rTCON |= (0x1 << 1);
rTCON &= ~(0x1 << 1);
重新make,烧入运行,定时器中断被触发了,中断服务函数也能正常相应了,问题解决。
希望以上DEBUG过程对遇到同样问题的朋友有所帮助。
2010.12.05
用户345477 2012-3-12 13:55
xucun915_925777961 2010-12-6 08:40