LPC1114 的定时器捕获中断总是出错

2019-03-25 20:18发布

用的是周公的模板,我用两个定时器分别进行上升沿和下降沿捕获,然后把前后两次的时间相减,得出高电平的时间,但是通过设置的flags和flags0发现进入两个定时器中断的次数不一样,问题出在哪里啊?
  1. /*********************************************************************************************************
  2. * Function Name:        timer0Isr
  3. * Description:          TIMER0 下降沿捕获中断处理函数
  4. * Input:                无
  5. * Output:               无
  6. * Return:               无
  7. *********************************************************************************************************/
  8. void timer0Isr(void)
  9. {

  10.         TMR32B0IR=0x1f; //清除中断标志位
  11.         flagDOWN=TMR32B0CR0;
  12.         flags0=flags0+1;

  13.         return;
  14. }
  15. /*********************************************************************************************************
  16. * Function Name:        timer1Isr
  17. * Description:          TIMER1 上升沿捕获中断处理函数
  18. * Input:                无
  19. * Output:               无
  20. * Return:               无
  21. *********************************************************************************************************/
  22. void timer1Isr (void)
  23. {
  24.           TMR32B1IR=0x1f; //清除中断标志位         
  25.         flagUP=TMR32B1CR0;
  26.         flags=flags+1;
  27.         if((flags==1)&&(flagDOWN==0))
  28.         {
  29.                 flagLOW=flagLOW+flagUP;
  30.         }
  31.         else
  32.         {
  33.                 flagLOW=flagLOW+(flagUP-flagDOWN);
  34.         }
  35.         return;

  36. }
  37. /*********************************************************************************************************
  38. ** Function name:       timer0Init
  39. ** Descriptions:        32位定时器0初始化函数
  40. ** input parameters:    无
  41. ** output parameters:   无
  42. ** Returned value:      无
  43. *********************************************************************************************************/
  44. void timer0Init (void)
  45. {
  46.     SYSAHBCLKCTRL |= (1ul << 9);                                        //  打开定时器模块              
  47.     TMR32B0PR  =480-1;                                                       //  设置分频系数      
  48.         IOCON_PIO1_5 &= ~0x07;                                                                                                //初始化捕获引脚
  49.         IOCON_PIO1_5 |=0x02;
  50.         TMR32B0CCR  = 0x05;                                                         //  设置CAP0.0上升沿捕获
  51.         TMR32B0TC  = 0;
  52.     zyIsrSet(NVIC_TIMER32B0, (unsigned long)timer0Isr, PRIO_ONE);       //  设置外部中断并使能         
  53.         TMR32B0TCR=0x01;   //启动定时器
  54. }
  55. /*********************************************************************************************************
  56. ** Function name:       timer1Init
  57. ** Descriptions:        32位定时器1初始化函数
  58. ** input parameters:    无
  59. ** output parameters:   无
  60. ** Returned value:      无
  61. *********************************************************************************************************/
  62. void timer1Init (void)
  63. {
  64.     SYSAHBCLKCTRL |= (1ul << 10);                                       // 打开32定时器1模块         
  65.     TMR32B1PR   =480-1;                                                // 设置分频系数                 
  66.         IOCON_PIO1_0 &= ~0x07;                                                                                                //初始化捕获引脚
  67.         IOCON_PIO1_0 |=0x03;
  68.         TMR32B1CCR  = 0x06;                                                         //  设置CAP1下降沿捕获
  69.         TMR32B1TC = 0;
  70.     zyIsrSet(NVIC_TIMER32B1, (unsigned long)timer1Isr, PRIO_TWO);       //  设置外部中断并使能         
  71.         TMR32B1TCR=0x01;   //启动定时器
  72. }
复制代码 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。