KL25Z不进中断函数

2019-07-15 17:52发布

我的KL25Z怎么进不了中断啊,中断也开了,中断函数也写了,就是进不去啊
  1. void Pit_init(void)
  2. {
  3.   SIM_SCGC6 |= SIM_SCGC6_PIT_MASK;        /*PIT定时器系统时钟使能*/
  4.   enable_irq(INT_PIT-16);                 /*定时器中断向量使能*/
  5.   PIT_MCR=0X00;                           /*标准定时器时钟使能*/
  6.   PIT_TCTRL1=0X00;                        /*定时器的级联位,使能位,中断位全部清除*/
  7.   PIT_LDVAL1=48000;                       //定时器初始值,定时器采用倒计时方式,记到0是产生中断,这里计时PIT_LDVAL1/SYSCLOCK,这里相当于1ms
  8.   PIT_TCTRL1=PIT_TCTRL_tiE_MASK;          //定时器中断使能位使能
  9.   PIT_TFLG1=0X01;                         //中断标志位,标志超时并发送中断请求,向该位写1,即为清除该标志
  10.   PIT_TCTRL1=PIT_TCTRL_TEN_MASK;          //定时器使能位使能
  11. }

  12. void Pit1_isr(void)
  13. {

  14. //PIT_TCTRL1=PIT_TCTRL_TEN_SHIFT;          // 关闭定时器  
  15. PIT_TFLG1=0X01;                          //清除标志位

  16. RED_ON;                                   //红灯亮
  17. BLUE_ON;                                  //蓝灯亮
  18. // PIT_TCTRL1=PIT_TCTRL_TEN_MASK;

  19. }
复制代码在isr.h里也定义了
  1. #ifndef __ISR_H
  2. #define __ISR_H 1

  3. extern void tpm0_isr(void);
  4. extern void tpm1_isr(void);
  5. extern void Pit1_isr(void);


  6. #undef  VECTOR_033
  7. #define VECTOR_033 tpm0_isr

  8. #undef  VECTOR_034
  9. #define VECTOR_034 tpm1_isr

  10. #undef VECTOR_038
  11. #define VECTOR_038 Pit1_isr


  12. #endif  //__ISR_H
复制代码不知道为什么就是不执行中断,求帮助


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
ccly0208
1楼-- · 2019-07-15 18:33
 精彩回答 2  元偷偷看……
LY0206
2楼-- · 2019-07-15 18:45
  1. void Pit1_init(void)
  2. {
  3.     SIM_SCGC6 |= SIM_SCGC6_PIT_MASK; // enable PIT module
  4.    
  5.     /* Enable PIT Interrupt in NVIC*/   
  6.     enable_irq(INT_PIT - 16);
  7.       
  8.     PIT_MCR = 0x00;  // MDIS = 0  enables timer
  9.     PIT_TCTRL1 = 0x00; // disable PIT1
  10.     PIT_LDVAL1 = 48000; //
  11.     PIT_TCTRL1 = PIT_TCTRL_TIE_MASK; // enable PIT1 and interrupt
  12.     PIT_TFLG1 = 0x01; // clear flag
  13.     PIT_TCTRL1 |= PIT_TCTRL_TEN_MASK;
  14.    
  15. }
  16. CUInt16 ti_accel_sampling;
  17. CUInt16 base_time125m;
  18. CUInt16 ti_delay;
  19. CUInt16 ti_print;
  20. CUInt16 ti_task;
  21. void PIT_IRQHandler(void)
  22. //void Pit1_isrv(void)
  23. {  
  24.     static char count_mseg=125;
  25.     PIT_TFLG1 = 0x01; // clear flag
  26.     if (count_mseg)count_mseg--;
  27.     if (ti_accel_sampling) ti_accel_sampling--;
  28.     else
  29.     {
  30.      count_mseg=125;
  31.      base_time125m++;
  32.     }
  33.    if (ti_task) ti_task--;
  34.    if (ti_delay) ti_delay--;
  35.    if (ti_print) ti_print--;
  36. }
复制代码我在mkl05中测试,通过,能进中断
技术牛人小渣子
3楼-- · 2019-07-15 19:21
楼主还要注意一点:
定时器诸如:PIT、LPTMR、TPM之类的模块都有设置调试状态时他们的counter是如何运行的。
如果设置的不好,他们的counter在调试时是不会增长的,自然就会导致无法进入中断。
莎莎miu~
4楼-- · 2019-07-15 22:19
感谢楼上的各位大神,应该是我设置的问题,我再调整一下
莎莎miu~
5楼-- · 2019-07-16 01:35
xianyoudian 发表于 2015-1-6 17:35
使能中断,注意优先级

多谢啊
suyong_yq
6楼-- · 2019-07-16 04:25
 精彩回答 2  元偷偷看……

一周热门 更多>