智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 1513|回复: 0
打印 上一主题 下一主题

[咨询] 使用PIT定时 LPT测速 出现的问题很不明白

[复制链接]

27

主题

214

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1032
威望
569
贡献
259
兑换币
346
注册时间
2013-1-25
在线时间
102 小时
跳转到指定楼层
1#
发表于 2013-6-16 20:08:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
   一开始在野火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;
   
}
求教 问题出在哪里了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-9-21 20:32 , Processed in 0.035959 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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