首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

[求助]mc9s12xdp512 Period Interrupt Timer

[求助]mc9s12xdp512 Period Interrupt Timer

各位大侠;
我现在用到了mc9s12xdp512的Period Interrupt Timer.
在for循环之前使能了一个5ms的PIT,并打开中断,中断用MCU来处理。用单步运行的时候发现,在执行完EnableInterrupt;这句就进入了中断服务程序,而后才进入for循环.请问这是怎么回事?

void SetupPITimer (void)
{
/* time-out period = (PITMTLD0 + 1) * (PITLD0 + 1) / Fbus */
PITMUX &= 0xfe;
PITCE |= 0x01
PITCFLMT |= 0x80;
}

void Enable5msPITimer (void)
{
PITTF |= 0x01; /* clear PIT interrupt */
PITMTLD0 = 0x01; /* MT0 load value (divides bus clock) */
PITLD0 = 9999; /* T0 load value (5 ms) */
PITCFLMT |= 0x01; /* PFLMT0=1 (reload MT0) */
PITFLT |= 0x01; /* force reload of PIT channel 0 */
PITINTE |= 0x01; /* enable PIT channel 0 interrupt */
}

void main(void)
{
SetupPITimer();

Enable5msPITimer();

EnableInterrupts;

for(;;)
{
Strobbing();
}
}

/* interrupt handler for PIT 0 */

interrupt void ISR_PIT0 ()
{
PITINTE &= 0xfe;
PITTF |= 0x01;

}
坚持到底,有恒则成!
一般来说,在使能某个中断之前,应该先清一下它的中断标志。
海纳百川  有容乃大
谢谢版主!我也是首先清除了标志(PITTF |= 0x01;)。我在调试中发现:把清标志这一句放到void Enable5msPITimer (void)最后一句,就可以了。挺奇怪的。
坚持到底,有恒则成!
一般都是这样的,要放在紧挨着使能中断的上面一句。因为在初时化过程中有可能产生中断标志。
海纳百川  有容乃大
我已经找到答案了,和大家分享。
先disable PIT module,寄存器配置完后再enable PIT module(PITCFLMT |= 0x80;).如果一开始就enable PIT module和相应通道,中断标志就会立刻置起而产生中断。
坚持到底,有恒则成!
返回列表