初学ARM,使用定时器遇到问题了,请大家帮忙看一下,<br /><br />Timer0初始化函数如下:<br /><br />void Timer0Init(FuncPtr timer0IrqHandler)<br />{<br /> U32 dummy;<br /> <br /> if(timer0IrqHandler == NULL)<br /> {<br /> return;<br /> }<br /> <br /> //开TIMER0时钟<br /> AT91F_PMC_EnablePeriphClock(AT91C_BASE_PMC, 0x1<<AT91C_ID_TC0);<br /><br /> //禁止记数时钟<br /> AT91C_BASE_TC0->TC_CCR = AT91C_TC_CLKDIS;<br /><br /> //禁止中断<br /> AT91F_TC_InterruptDisable(AT91C_BASE_TC0, 0xFFFF);<br /><br /> dummy = AT91C_BASE_TC0->TC_SR;<br /> dummy = dummy;<br /><br /> //设置TC模式<br /> AT91C_BASE_TC0->TC_CMR = TC_CLKS_MCK1024;// |0x2<<13;<br /> // enable counter clock<br />// AT91C_BASE_TC0->TC_CCR = AT91C_TC_CLKEN;<br /><br /> // 打开定时器0中断<br /> AT91F_AIC_ConfigureIt(AT91C_BASE_AIC, //base<br /> AT91C_ID_TC0, //ID<br /> TIMER0_INTERRUPT_LEVEL,<br /> AT91C_AIC_SRCTYPE_INT_HIGH_LEVEL,<br /> timer0IrqHandler);<br /><br /> //设置记数值, 0.1ms一次中断<br /> AT91C_BASE_TC0->TC_RC = TIMER_100US_MCK1024_RC;<br /> AT91C_BASE_TC0->TC_IER = AT91C_TC_CPCS; // IRQ使能CPC<br /><br /> //允许TC0中断<br /> AT91F_AIC_EnableIt(AT91C_BASE_AIC, AT91C_ID_TC0);<br /><br />}<br /><br />中断处理函数<br />void Timer0IrqHandler(void)<br />{<br /> unsigned int clear_SR;<br /><br /> //读取,同时清除状态积存器<br /> clear_SR = AT91C_BASE_TC0->TC_SR;<br /> //避免编译警告<br /> clear_SR = clear_SR;<br />}<br /><br />中断处理函数总是进入不了,请大家帮忙看一下,谢谢了。<br />编译器:Keil 3.4<br /> |
|