跨届大侠
  
- 积分
- 6502
- 威望
- 4814
- 贡献
- 652
- 兑换币
- 1264
- 注册时间
- 2014-3-19
- 在线时间
- 518 小时
|
不好意思额。。,我的底层库没有改过。。。我直接用的。。。。//////////////////////////////// 以下为正交解码 //////////////////////////////////////////
/*!
* @brief 初始化FTM 的正交解码 功能
* @param FTMn_e 模块号( FTM1、 FTM2)
* @since v5.0
* Sample usage: FTM_QUAD_Init(FTM1); //初始化 FTM1 为正交解码模式
*/
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_QDPHB, ALT6);
}
else if(FTM2_QDPHB == PTB19)
{
port_init(FTM2_QDPHB, ALT6);
}
else
{
ASSERT(0); //断言,配置的管脚不符合要求
}
break;
default:
ASSERT(0); //断言,配置的模块有误
break;
}
FTM_MODE_REG(FTMN[ftmn]) |= (0
| FTM_MODE_WPDIS_MASK //写保护禁止
//| FTM_MODE_FTMEN_MASK //使能 FTM
);
FTM_QDCTRL_REG(FTMN[ftmn]) |= (0
| FTM_QDCTRL_QUADMODE_MASK
);
FTM_CNTIN_REG(FTMN[ftmn]) = 0;
FTM_MOD_REG(FTMN[ftmn]) = FTM_MOD_MOD_MASK;
FTM_QDCTRL_REG(FTMN[ftmn]) |= (0
| FTM_QDCTRL_QUADEN_MASK
);
FTM_MODE_REG(FTMN[ftmn]) |= FTM_QDCTRL_QUADEN_MASK;
FTM_CNT_REG(FTMN[ftmn]) = 0; //计数器。只有低16位可用(写任何值到此寄存器,都会加载 CNTIN 的值)
}
/*!
* @brief 获取FTM 正交解码 的脉冲数
* @param FTMn_e 模块号( FTM1、 FTM2)
* @since v5.0
* Sample usage: int16 count = FTM_QUAD_get(FTM1); //获取 FTM1 交解码 的脉冲数
*/
int16 FTM_QUAD_get(FTMn_e ftmn)
{
int16 val;
ASSERT( (ftmn == FTM1) || (ftmn == FTM2 ) ); //检查传递进来的通道是否正确
val = FTM_CNT_REG(FTMN[ftmn]);
return val;
}
/*!
* @brief 清 FTM 正交解码 的脉冲数
* @param FTMn_e 模块号( FTM1、 FTM2)
* @since v5.0
* Sample usage: FTM_QUAD_clean(FTM1); //复位 FTM1 正交解码 的脉冲数
*/
void FTM_QUAD_clean(FTMn_e ftmn)
{
ASSERT( (ftmn == FTM1) || (ftmn == FTM2 ) ); //检查传递进来的通道是否正确
FTM_CNT_REG(FTMN[ftmn]) = 0; //计数器。只有低16位可用(写任何值到此寄存器,都会加载 CNTIN 的值)
}
|
|