本帖最后由 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; //启动定时器
- }
|