打印
[LPC]

LPC1114的定时器捕获中断问题

[复制链接]
2013|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wheats|  楼主 | 2014-11-14 10:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 wheats 于 2014-11-14 10:56 编辑

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

/*********************************************************************************************************
** Function name:       timer0Init
** Descriptions:        32位定时器0初始化函数
** input parameters:    无
** output parameters:   无
** Returned value:      无
*********************************************************************************************************/
void timer0Init (void)
{
        SYSAHBCLKCTRL |= (1<<16);                                                                                          // 使能IOCON时钟
        IOCON_PIO1_5 &= ~0x07;                                                                                                //初始化捕获引脚
        IOCON_PIO1_5 |=0x02;
        SYSAHBCLKCTRL &= ~(1<<16);                                                                                  //  禁能IOCON时钟
    SYSAHBCLKCTRL |= (1ul << 9);                                        //  打开定时器模块      
        
        TMR32B0TCR =0x02;                                                                                                        //复位定时器
    TMR32B0PR  =4800-1;                                                       //  设置分频系数      
        TMR32B0IR = 0x1F;                                                                                                        //清中断
        TMR32B0CCR  = 0x05;                                                         //  设置CAP0.0上升沿捕获
        TMR32B0MR0 = 0xFFFFFFFF;                                                                                        //匹配值
        TMR32B0MCR = 0x01;//MR0匹配中断
        TMR32B0TC  = 0;                                                                                                        
    zyIsrSet(NVIC_TIMER32B0, (unsigned long)timer0Isr, PRIO_ONE);       //  设置外部中断并使能         
        TMR32B0TCR=0x01;                                                                                                           //启动定时器
}

相关帖子

沙发
wheats|  楼主 | 2014-11-17 21:34 | 只看该作者
为甚没有人啊,求解释

使用特权

评论回复
板凳
airwill| | 2014-11-17 23:22 | 只看该作者
可能是漏掉脉冲了, 可以先检查和排除硬件信号处理的问题, 再借助调试器捕捉一下故障. 不是太难的问题

使用特权

评论回复
地板
w_乐天| | 2014-11-19 09:06 | 只看该作者
你可以用周期性的方波测量看看是否还有这个现象

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

5

帖子

0

粉丝