注册 登录
查看: 862|回复: 4

各位大神,关于PIT LPT 加进程序后出现问题不知道什么原因

[复制链接]
发表于 2013-6-16 19:59:20 | 显示全部楼层 |阅读模式
本帖最后由 darksnipers 于 2013-6-16 20:11 编辑

   一开始在山外哥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;
   
}
求教 问题出在哪里了
回复

使用道具 举报

发表于 2013-6-17 10:20:56 | 显示全部楼层
摄像头采集前禁止不相关的中断,采集后再开对应的中断,例如此处是pit 中断
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-6-17 18:17:49 | 显示全部楼层
山外メ雲ジ 发表于 2013-6-17 10:20
摄像头采集前禁止不相关的中断,采集后再开对应的中断,例如此处是pit 中断

您能不能给看一下上面的代码 我在PIT中断函数里面 把PIT LPT 中断 中断使能 PIT LPT使能位都关了 采集完图像之后直接初始化  山外哥 都快哭了  求助
回复 支持 反对

使用道具 举报

发表于 2013-6-17 18:49:25 | 显示全部楼层
darksnipers 发表于 2013-6-17 18:17
您能不能给看一下上面的代码 我在PIT中断函数里面 把PIT LPT 中断 中断使能 PIT LPT使能位都关了 采集完图 ...

已经看了

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);
          .......
}
回复 支持 反对

使用道具 举报

发表于 2013-6-17 18:52:20 | 显示全部楼层
你应该是一个个加了后,测试好,不要一次加太多,看看什么情况

电机猛加,舵机打死,说明pwm不对。

你一次过加入太多东西,不行,那我们也没办法,这个范围太广。只能用排除法慢慢找原因
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回列表 返回顶部