智能车制作

标题: 使用PIT定时 LPT测速 出现的问题很不明白 [打印本页]

作者: darksnipers    时间: 2013-6-16 20:08
标题: 使用PIT定时 LPT测速 出现的问题很不明白
   一开始在野火50帧稳定版里面写的代码 改的火哥的程序  程序里面只有摄像头采集 编码器测速的程序  配置了FTM1 CH0 通道 PTB0引脚  然后把PTB0接到PTC5 上  做了10ms的定时  全速运行以后 点暂停 计算应该得到的脉冲数和实际采集到的是一致的  这时候在上位机看摄像头也正常采集 没什么问题 调式好之后   添加到我们的程序里面 编码器和PTC5相连  这时候再全速运行之后 点暂停  测得到脉冲数为1   然后重新把PTB0和PTC5 连接后  配置PTB0产生PWM方波  测得脉冲数是正常的   编码器的输出单独用示波器看也是正常的   添加进去之后 就是测不到脉冲数  这个过程中  出现电机突然疯转  舵机打死的情况   
这是程序代码
while(1)
    {         
        ov7725_get_img();
         //DisableInterrupts;
         lptmr_counter_init(LPT0_ALT2,100,0,LPT_Rising);
         pit_init_ms(PIT0,10);
         //EnableInterrupts;
          img_extract((u8 *)img_buff,(u8 *)img_bin_buff,2400);
          .......
}
LPT中断函数
volatile u32 LPT_INT_count=0;
volatile u8 pit_flag=0;
void LPT_Handler(void)
{
  LPTMR0_CSR|=LPTMR_CSR_TCF_MASK;
  LPT_INT_count++;
}
PIT中断函数
extern int cesu;extern u16 count;
void PIT0_IRQHandler(void)
{   
     PIT_Flag_Clear(PIT0);
    count=LPTMR0_CNR;
    lptmr_counter_clean();
    LPTMR_CSR_REG(LPTMR0_BASE_PTR)&=~(LPTMR_CSR_TEN_MASK | LPTMR_CSR_TIE_MASK);
    disable_irq(85u);
    PIT_TCTRL(PIT0) &= ~(PIT_TCTRL_TEN_MASK|PIT_TCTRL_TIE_MASK); //使能 PITn定时器
                         //开PITn中断
    disable_irq(PIT0 + 68);
    cesu=LPT_INT_count*100+count;
    //uart_putchar(UART1,cesu);
    LPT_INT_count=0;
   
}
求教 问题出在哪里了





欢迎光临 智能车制作 (http://dns.znczz.com/) Powered by Discuz! X3.2