智能车制作

标题: KL26 PIT单独关中断疑惑 [打印本页]

作者: 狂野的庄稼汉    时间: 2014-5-22 12:10
标题: KL26 PIT单独关中断疑惑
  1. void PIT_IRQHandler(void)
  2. {
  3.     if(PIT_TFLG(PIT0) == 1 )
  4.     {
  5.         led_turn(LED0);             //闪烁 LED0
  6.     PIT_TCTRL0 &=~ PIT_TCTRL_TIE_MASK;
  7.     PIT_TFLG0  |=  PIT_TFLG_TIF_MASK;
  8.     }
  9. }
  10. void main()
  11. {
  12.     led_init(LED0);                                         
  13.     pit_init_ms(PIT0, 1000);                                
  14.     set_vector_handler(PIT_VECTORn ,PIT_IRQHandler);
  15.     enable_irq (PIT_IRQn);                                 //使能PIT0中断

  16.     while(1);
  17. }
复制代码
1.只用一个PIT定时器,可以通过PIT_TCTRLn &=~ PIT_TCTRL_TIE_MASK;来关闭定时器中断
  1. void PIT_IRQHandler(void)
  2. {
  3.     if(PIT_TFLG(PIT0) == 1 )
  4.     {
  5.         led_turn(LED0);
  6.     PIT_TCTRL0 &=~ PIT_TCTRL_TIE_MASK;
  7.     PIT_TFLG0  |=  PIT_TFLG_TIF_MASK;
  8.     }
  9.     if(PIT_TFLG(PIT1) == 1 )
  10.     {
  11.       led_turn(LED1);
  12.       PIT_TFLG1 |= PIT_TFLG_TIF_MASK;
  13.     }
  14. }
  15. void main()
  16. {
  17.     led_init(LED0);
  18.     led_init(LED1);
  19.     pit_init_ms(PIT1, 1000);
  20.     pit_init_ms(PIT0, 1000);                                
  21.     set_vector_handler(PIT_VECTORn ,PIT_IRQHandler);
  22.     enable_irq (PIT_IRQn);                                 //使能PIT0中断

  23.     while(1);
  24. }
复制代码
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