智能车制作

标题: 野火FTM问题求助 [打印本页]

作者: 寻,路者    时间: 2014-3-29 13:05
标题: 野火FTM问题求助
自己做的核心板,芯片是MK60DN256VLL10,用的野火的库V5.0版本
有时候,在单步调试或连续运行程序时,程序运行正常,
但关掉电源,再开启时,程序就无法运行了,一点反应都没有,液晶都不亮了,这是为什么?
但有时候又可以运行,真心觉得无解啊,
还有个问题,为啥我的FTM1 可以正常计数,FTM2却不行,模式是AB相模式。

void QD_Init(void)
{
  FTM_QUAD_Init(FTM1);
  FTM_QUAD_Init(FTM2);
}
inline void GetWheelSpeed(void)  //注意符号的转化,底层库函数输出的是无符号数
{
  gL_Speed = FTM_QUAD_get(FTM1);  // 左轮速度
  FTM_QUAD_clean(FTM1);  //清除计数  

  gR_Speed = -FTM_QUAD_get(FTM2);  //右轮速度
  FTM_QUAD_clean(FTM2);   
}
对野火底层函数修改如下,因为它默认的是加减计数模式,我用的AB相模式
void FTM_QUAD_Init(FTMn_e ftmn)
{
ASSERT( (ftmn == FTM1) || (ftmn == FTM2 ) ); //检查传递进来的通道是否正确
    /******************* 开启时钟 和 复用IO口*******************/
    switch(ftmn)
    {
    case FTM1:
        SIM_SCGC6 |= SIM_SCGC6_FTM1_MASK;       //使能FTM1时钟
        if(FTM1_QDPHA == PTA8)                  //管脚复用
        {
            port_init(FTM1_QDPHA, ALT6);
        }
        else if(FTM1_QDPHA == PTA12)
        {
            port_init(FTM1_QDPHA, ALT7);
        }
        else if(FTM1_QDPHA == PTB0)
        {
            port_init(FTM1_QDPHA, ALT6);
        }
        else
        {
            ASSERT(0);                          //断言,配置的管脚不符合要求
        }
        if(FTM1_QDPHB == PTA9)
        {
            port_init(FTM1_QDPHB, ALT6);
        }
        else if(FTM1_QDPHB == PTA13)
        {
            port_init(FTM1_QDPHB, ALT7);
        }
        else if(FTM1_QDPHB == PTB1)
        {
            port_init(FTM1_QDPHB, ALT6);
        }
        else
        {
            ASSERT(0);                          //断言,配置的管脚不符合要求
        }
        break;
    case FTM2:
        SIM_SCGC3 |= SIM_SCGC3_FTM2_MASK;                           //使能FTM2时钟
        if(FTM2_QDPHA == PTA10)                  //管脚复用
        {
            port_init(FTM2_QDPHA, ALT6);
        }
        else if(FTM2_QDPHA == PTB18)
        {
            port_init(FTM2_QDPHA, ALT6);
        }
        else
        {
            ASSERT(0);                          //断言,配置的管脚不符合要求
        }
        if(FTM2_QDPHB == PTA11)                  //管脚复用
        {
            port_init(FTM2_QDPHA, ALT6);
        }
        else if(FTM2_QDPHB == PTB19)
        {
            port_init(FTM2_QDPHA, ALT6);
        }
        else
        {
            ASSERT(0);                          //断言,配置的管脚不符合要求
        }
        break;
    default:
        ASSERT(0);                              //断言,配置的模块有误
        break;
    }
    FTM_MODE_REG(FTMN[ftmn])  |= FTM_MODE_FTMEN_MASK ; //FTM2EN=1  
    FTM_CNTIN_REG(FTMN[ftmn])   = 0; //FTM计数器初始值为0
    FTM_CNT_REG(FTMN[ftmn])     = 0;
    FTM_MOD_REG(FTMN[ftmn])     = 0xFFFF;//结束值
    FTM_QDCTRL_REG(FTMN[ftmn]) |= 0;   //AB相模式 // 0x8u,加减计数模式
    FTM_QDCTRL_REG(FTMN[ftmn]) |=FTM_QDCTRL_QUADEN_MASK ; //使能
}
求帮助有什么问题啊







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