打印
[ZLG-ARM]

关于LPC2129的CAP计数出错的疑问!帮忙回答,谢谢!

[复制链接]
1939|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
armandusb|  楼主 | 2008-11-4 09:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
现在用TIMER0的CAP0.0和CAP0.1做捕获输入计脉冲,单路计数数据正确(脉冲在2K左右),打开CAP0.1的脉冲输入后,其中一路偶尔出现特别大的数据,现贴上程序!

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

相关帖子

沙发
zlg_lly| | 2008-11-4 09:28 | 只看该作者

RE:armandusb

您好!
可以尝试缩短您的中断处理程序、
或者多采几次后再对数据做统一处理,丢掉错误的数据。(浅见)

使用特权

评论回复
板凳
zlg_lly| | 2008-11-4 09:31 | 只看该作者

RE:armandusb

您好!
可以尝试缩短您的中断处理程序、
或者多采几次后再对数据做统一处理,丢掉错误的数据。(浅见)

使用特权

评论回复
地板
jerrywzf| | 2008-11-4 23:55 | 只看该作者

2K应该没问题的,我前几天也做了CAP的测试

可能硬件有问题

使用特权

评论回复
5
armandusb|  楼主 | 2008-11-10 11:00 | 只看该作者

中断频繁

中断程序应该是比较精简的了,就是担心中断频繁才把100K的分到了2K,结果还是比较有问题!

使用特权

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

本版积分规则

8

主题

19

帖子

0

粉丝