智能车制作
标题:
KL26 PIT单独关中断疑惑
[打印本页]
作者:
狂野的庄稼汉
时间:
2014-5-22 12:10
标题:
KL26 PIT单独关中断疑惑
void PIT_IRQHandler(void)
{
if(PIT_TFLG(PIT0) == 1 )
{
led_turn(LED0); //闪烁 LED0
PIT_TCTRL0 &=~ PIT_TCTRL_TIE_MASK;
PIT_TFLG0 |= PIT_TFLG_TIF_MASK;
}
}
void main()
{
led_init(LED0);
pit_init_ms(PIT0, 1000);
set_vector_handler(PIT_VECTORn ,PIT_IRQHandler);
enable_irq (PIT_IRQn); //使能PIT0中断
while(1);
}
复制代码
1.只用一个PIT定时器,可以通过
PIT_TCTRLn &=~ PIT_TCTRL_TIE_MASK;来关闭定时器中断
void PIT_IRQHandler(void)
{
if(PIT_TFLG(PIT0) == 1 )
{
led_turn(LED0);
PIT_TCTRL0 &=~ PIT_TCTRL_TIE_MASK;
PIT_TFLG0 |= PIT_TFLG_TIF_MASK;
}
if(PIT_TFLG(PIT1) == 1 )
{
led_turn(LED1);
PIT_TFLG1 |= PIT_TFLG_TIF_MASK;
}
}
void main()
{
led_init(LED0);
led_init(LED1);
pit_init_ms(PIT1, 1000);
pit_init_ms(PIT0, 1000);
set_vector_handler(PIT_VECTORn ,PIT_IRQHandler);
enable_irq (PIT_IRQn); //使能PIT0中断
while(1);
}
复制代码
2.使用两个PIT定时,就不能通过
PIT_TCTRLn &=~ PIT_TCTRL_TIE_MASK;单独关闭一个PIT的定时中断
请问大家这是为什么?
作者:
一誓灬千年
时间:
2014-5-22 12:51
KL26两个中断是公用一个中断号的,你关了一个另一个也关了
作者:
狂野的庄稼汉
时间:
2014-5-22 16:02
一誓灬千年 发表于 2014-5-22 12:51
KL26两个中断是公用一个中断号的,你关了一个另一个也关了
共用一个中断号不代表每一个模块不可以独立中断,况且你回答的也不是我所提出的问题呀
作者:
狂野的庄稼汉
时间:
2014-5-22 16:18
问题已解决,以下是山外メ雲ジ给的解释
还有关闭定时器:PIT_TCTRL_TEN_MASK
否则的话,标志位一样会置位,只不过不触发中断。
而另外一个定时器触发中断,可以误以为根据标志位认为之前那个定时器也触发中断
欢迎光临 智能车制作 (http://111.231.132.190/)
Powered by Discuz! X3.2