[LPC] LPC1114的定时器捕获中断问题

[复制链接]
 楼主| wheats 发表于 2014-11-14 10:54 | 显示全部楼层 |阅读模式
本帖最后由 wheats 于 2014-11-14 10:56 编辑

小弟用LPC1114进行一段非周期性方波的占空比测量,板子用的是周公的TinyM0,但是发现在30s内有时候低电平的时间会突然增加好几秒,而在示波器上观察到的波形里,基本上都在几到几百毫秒的样子,不知道出现这样的误差原因在哪里,实在是想不到,求解释。下面是定时器初始化和中断部分的代码
  1. /*********************************************************************************************************
  2. * Function Name:        timer0Isr
  3. * Description:          TIMER0 下降沿捕获中断处理函数
  4. * Input:                无
  5. * Output:               无
  6. * Return:               无
  7. *********************************************************************************************************/
  8. void timer0Isr(void)
  9. {
  10.         IRflag=TMR32B0IR;
  11.         if((IRflag&0x10)==0x10)
  12.         {
  13.                 TMR32B0IR=0x1f; //清除中断标志位
  14.                 flagALL = TMR32B0CCR;
  15.                 flags=flags+1;
  16.                
  17.                 if(flagALL == 0x06)
  18.                 {
  19.                         flagDOWN=TMR32B0CR0;
  20.                         TMR32B0CCR=0x05;
  21.                         flagsd=flagsd+1;
  22.                         flagLOW=flagLOW+(flagDOWN-flagUP);
  23.                 }
  24.                 if(flagALL == 0x05)
  25.                 {
  26.                         flagUP=TMR32B0CR0;
  27.                         TMR32B0CCR=0x06;
  28.                         flagsu=flagsu+1;
  29.                         
  30.                 }
  31.         }
  32.         else if((IRflag&0X01)==0X01)
  33.         {
  34.                 flagLOW=0;
  35.                 OUTflag = OUTflag +1;
  36.         }
  37.         return;
  38. }

  39. /*********************************************************************************************************
  40. ** Function name:       timer0Init
  41. ** Descriptions:        32位定时器0初始化函数
  42. ** input parameters:    无
  43. ** output parameters:   无
  44. ** Returned value:      无
  45. *********************************************************************************************************/
  46. void timer0Init (void)
  47. {
  48.         SYSAHBCLKCTRL |= (1<<16);                                                                                          // 使能IOCON时钟
  49.         IOCON_PIO1_5 &= ~0x07;                                                                                                //初始化捕获引脚
  50.         IOCON_PIO1_5 |=0x02;
  51.         SYSAHBCLKCTRL &= ~(1<<16);                                                                                  //  禁能IOCON时钟
  52.     SYSAHBCLKCTRL |= (1ul << 9);                                        //  打开定时器模块      
  53.         
  54.         TMR32B0TCR =0x02;                                                                                                        //复位定时器
  55.     TMR32B0PR  =4800-1;                                                       //  设置分频系数      
  56.         TMR32B0IR = 0x1F;                                                                                                        //清中断
  57.         TMR32B0CCR  = 0x05;                                                         //  设置CAP0.0上升沿捕获
  58.         TMR32B0MR0 = 0xFFFFFFFF;                                                                                        //匹配值
  59.         TMR32B0MCR = 0x01;//MR0匹配中断
  60.         TMR32B0TC  = 0;                                                                                                        
  61.     zyIsrSet(NVIC_TIMER32B0, (unsigned long)timer0Isr, PRIO_ONE);       //  设置外部中断并使能         
  62.         TMR32B0TCR=0x01;                                                                                                           //启动定时器
  63. }
 楼主| wheats 发表于 2014-11-17 21:34 | 显示全部楼层
为甚没有人啊,求解释
airwill 发表于 2014-11-17 23:22 | 显示全部楼层
可能是漏掉脉冲了, 可以先检查和排除硬件信号处理的问题, 再借助调试器捕捉一下故障. 不是太难的问题
w_乐天 发表于 2014-11-19 09:06 | 显示全部楼层
你可以用周期性的方波测量看看是否还有这个现象
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

5

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部