注册 登录
查看: 482|回复: 9

[智能车] 关于KL26脉冲计数的的问题,请帮忙看一下。

[复制链接]
发表于 2014-5-19 23:49:15 | 显示全部楼层 |阅读模式
我用KL26的lptm来计数,也就是PTC5,为什么有时候PTC5引脚悬空,在串口助手里还是会有数值呢?一点也不准啊。。我的26的脉冲计数是根据k60改的,,求山外哥帮助。。
回复

使用道具 举报

发表于 2014-5-20 10:36:44 | 显示全部楼层
浮空啊,就是不稳定的状态,电平随机都是变化,从而产生乱的脉冲计数。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-5-20 13:50:59 | 显示全部楼层
康锦 发表于 2014-5-20 10:36
浮空啊,就是不稳定的状态,电平随机都是变化,从而产生乱的脉冲计数。

是根本不准,悬空状态有时候是0,有时候是一万多呢。。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-5-20 13:52:56 | 显示全部楼层
康锦 发表于 2014-5-20 10:36
浮空啊,就是不稳定的状态,电平随机都是变化,从而产生乱的脉冲计数。

不是随机变化,是一直LPTMR脉冲计数为:10975。。。有时候是0
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-5-20 13:53:18 | 显示全部楼层
康锦 发表于 2014-5-20 10:36
浮空啊,就是不稳定的状态,电平随机都是变化,从而产生乱的脉冲计数。

不是随机变化,是一直LPTMR脉冲计数为:10975。。。有时候是0
回复 支持 反对

使用道具 举报

发表于 2014-6-10 11:33:54 | 显示全部楼层
我的战斧巡航 发表于 2014-5-20 13:53
不是随机变化,是一直LPTMR脉冲计数为:10975。。。有时候是0

和你一样。。。1s周期是10975,100ms周期是1097,10ms周期是109,高电平就不断的加,低电平不加。。。
回复 支持 反对

使用道具 举报

发表于 2014-6-10 11:37:31 | 显示全部楼层
找到解决办法了:
void lptmr_pulse_init(LPT0_ALTn altn, uint16 count, LPT_CFG cfg)
{
#if defined(MK60DZ10)
    OSC_CR |= OSC_CR_ERCLKEN_MASK;                              //使能 OSCERCLK
#elif (defined(MK60F15) || defined(MKL26Z4))
    OSC0_CR |= OSC_CR_ERCLKEN_MASK;                              //使能 OSCERCLK
#endif

    // 开启模块时钟
    SIM_SCGC5 |= SIM_SCGC5_LPTMR_MASK;                        //使能LPT模块时钟

    //设置输入管脚
    if(altn == LPT0_ALT1)
    {
        port_init(PTA19, ALT6 );            //在PTA19上使用 ALT6
    }
    else if(altn == LPT0_ALT2)
    {
        port_init(PTC5, ALT3 );             //在PTC5上使用 ALT3
    }
    else                                    //不可能发生事件
    {
        ASSERT(0);                          //设置管脚有误?
    }

    // 清状态寄存器
    LPTMR0_CSR = 0x00;                                          //先关了LPT,这样才能设置时钟分频,清空计数值等
   
#if defined(MK60DZ10)
    //选择时钟源
    LPTMR0_PSR  =   ( 0
                      | LPTMR_PSR_PCS(1)          //选择时钟源: 0 为 MCGIRCLK ,1为 LPO(1KHz) ,2为 ERCLK32K ,3为 OSCERCLK
                      //| LPTMR_PSR_PBYP_MASK     //旁路 预分频/干扰滤波器 ,即不用 预分频/干扰滤波器(注释了表示使用预分频/干扰滤波器)
                      //| LPTMR_PSR_PRESCALE(4)     //预分频值 = 2^(n+1) ,n = 0~ 0xF
                    );
#elif (defined(MK60F15) || defined(MKL26Z4))
    //选择时钟源
    LPTMR0_PSR  =   ( 0
                      | LPTMR_PSR_PCS(3)          //选择时钟源: 0 为 MCGIRCLK ,1为 LPO(1KHz) ,2为 ERCLK32K ,3为 OSCERCLK
                      //| LPTMR_PSR_PBYP_MASK     //旁路 预分频/干扰滤波器 ,即不用 预分频/干扰滤波器(注释了表示使用预分频/干扰滤波器)
                      | LPTMR_PSR_PRESCALE(4)     //预分频值 = 2^(n+1) ,n = 0~ 0xF
                    );
#endif
   
    // 设置累加计数值
    LPTMR0_CMR  =   LPTMR_CMR_COMPARE(count);                   //设置比较值

    // 管脚设置、使能中断
    LPTMR0_CSR  =  (0
                    | LPTMR_CSR_TPS(altn)       // 选择输入管脚 选择
                    | LPTMR_CSR_TMS_MASK        // 选择脉冲计数 (注释了表示时间计数模式)
                    | ( cfg == LPT_Falling ?  LPTMR_CSR_TPP_MASK :   0  )  //脉冲计数器触发方式选择:0为高电平有效,上升沿加1
                    | LPTMR_CSR_TEN_MASK        //使能LPT(注释了表示禁用)
                    | LPTMR_CSR_TIE_MASK        //中断使能
                    //| LPTMR_CSR_TFC_MASK      //0:计数值等于比较值就复位;1:溢出复位(注释表示0)
                   );
}

替换了就好了
回复 支持 反对

使用道具 举报

发表于 2014-6-10 14:21:14 | 显示全部楼层
ExiBQ 发表于 2014-6-10 11:37
找到解决办法了:
void lptmr_pulse_init(LPT0_ALTn altn, uint16 count, LPT_CFG cfg)
{

这里是bug汇总里面说到的bug吗?
回复 支持 反对

使用道具 举报

发表于 2014-6-10 14:31:01 | 显示全部楼层
山外メ雲ジ 发表于 2014-6-10 14:21
这里是bug汇总里面说到的bug吗?

是的,希望你们出一个修复bug的新包啊,因为每个程序都要改。。。有时候不记得哪个程序改了,哪个没改。
回复 支持 反对

使用道具 举报

发表于 2014-12-4 13:11:09 | 显示全部楼层
ExiBQ 发表于 2014-6-10 14:31
是的,希望你们出一个修复bug的新包啊,因为每个程序都要改。。。有时候不记得哪个程序改了,哪个没改。

亲  直立车编码器的接到单片机上那个引脚呀 新手请教呀
回复 支持 反对

使用道具 举报

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

本版积分规则

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