现在用TIMER0的CAP0.0和CAP0.1做捕获输入计脉冲,单路计数数据正确(脉冲在2K左右),打开CAP0.1的脉冲输入后,其中一路偶尔出现特别大的数据,现贴上程序!<br /><br />void __irq IRQ_Time0(void)<br />{ <br /> <br /> if((T0IR&0X10)==0X10)<br /> { <br /> if(fCap0==0) <br /> {<br /> if(Count_cap0++==1)<br /> {<br /> Pulse_cap0_old= T0CR0; <br /> Count_cap0=0; <br /> fCap0=1;<br /> }<br /> }<br /> if(fCap0==1) <br /> {<br /> if(Count_cap0++==1)<br /> {<br /> Pulse_cap0_new= T0CR0; <br /> Count_cap0=0;<br /> flag_cap0=1; <br /> <br /> } //通知主程序可以对数值处理了<br /> } <br /> <br /> T0IR|= 0x10; // 清除中断标志 <br /> } <br /> <br /> <br /> if((T0IR&0X20)==0X20)<br /> { <br /> if(fCap1==0)<br /> {<br /> if(Count_cap1++==1)<br /> {<br /> Pulse_cap1_old= T0CR1; <br /> Count_cap1=0;<br /> fCap1=1;<br /> }<br /> } <br /> if(fCap1==1) <br /> {<br /> if(Count_cap1++==1)<br /> {<br /> Pulse_cap1_new= T0CR1; <br /> Count_cap1=0;<br /> flag_cap1=1; <br /> <br /> } //通知主程序可以对数值处理了<br /> } <br /> <br /> T0IR|= 0x20; // 清除中断标志 <br /> } <br /> <br /> <br /> VICVectAddr = 0x00; // 通知VIC中断处理结束<br /> <br />}<br />中断程序,结果输出是用串口输出的!<br />void Target_Init(void)<br />{<br /> <br /> PINSEL0=0X00050005; //将外部设备连接到UART0UART1<br /> PINSEL1=0X3A854000; //将0。27-----0。30配置成CAP0------3输入<br /> PINSEL2=0XFFFFFF34;<br /> <br /> IO1DIR=Beep;<br /> <br /> T0PR = 0; //PCLK=11.0592*2 不分频<br /> T0CCR = 0x36; // 设置CAP0.0下降沿捕获.可以中断,CAP0.1下降沿捕获,可以中断<br /> T0TC = 0; //记数从0开始记<br /> /* 设置定时器0中断IRQ */<br /> VICIntSelect = 0x00; // 所有中断通道设置为IRQ中断<br /> VICVectCntl0 = 0x24; // 定时器0中断通道分配最高优先级(向量控制器0)<br /> VICVectAddr0 = (uint32)IRQ_Time0; // 设置中断服务程序地址向量 <br /> VICIntEnable = 0x00000010; // 使能定时器0中断 <br /> T0TCR=0X01; //使能中断TIMER0 <br /> }<br />定时器的初始化! |
|