高级会员
- 积分
- 665
- 威望
- 336
- 贡献
- 203
- 兑换币
- 198
- 注册时间
- 2015-1-18
- 在线时间
- 63 小时
- 毕业学校
- 太原工业学院
|
//////////////////////////////// 以下为脉冲计数 //////////////////////////////////////////
/*!
* @brief 脉冲计数初始化函数
* @param TPMn_e 模块号(TPM0、 TPM1、 TPM2)
* @param TPM_CLKIN_e 脉冲输入管脚
* @param TPM_PS_e 分频因子
* @since v5.2
* @note 同一个TPM,只能干一个活,用于脉冲计数后就不要再用于其他功能,例如PWM、输入捕捉。
* Sample usage: tpm_pulse_init(TPM0,TPM_CLKIN1,TPM_PS_2); //TPM0初始化为脉冲计数,脉冲输入管脚为 TPM_CLKIN1_PIN ,进行二分频计数。
*/
void tpm_pulse_init(TPMn_e tpmn,TPM_CLKIN_e clkin,TPM_PS_e ps)
{
ASSERT(ps < TPM_PS_MAX);
//配置 复用
switch(tpmn)
{
case TPM0:
SIM_SCGC6 |= SIM_SCGC6_TPM0_MASK; //使能TPM0时钟
break;
case TPM1:
SIM_SCGC6 |= SIM_SCGC6_TPM1_MASK; //使能TPM1时钟
break;
case TPM2:
SIM_SCGC6 |= SIM_SCGC6_TPM2_MASK; //使能TPM2时钟
break;
default:
ASSERT(0);
}
if(clkin == TPM_CLKIN0)
{
SIM_SOPT4 &= ~( SIM_SOPT4_TPM0CLKSEL_MASK << tpmn );
port_init(TPM_CLKIN0_PIN,ALT4);
}
else if(clkin == TPM_CLKIN1)
{
SIM_SOPT4 |= ( SIM_SOPT4_TPM0CLKSEL_MASK << tpmn );
port_init(TPM_CLKIN1_PIN,ALT4);
}
else
{
ASSERT(0); //断言,clkin 只能 0 和 1
}
/******************** 配置时钟和分频 ********************/
SIM_SOPT2 &= ~ SIM_SOPT2_TPMSRC_MASK;
SIM_SOPT2 |= SIM_SOPT2_TPMSRC(1); // 00 Clock disabled 01 MCGFLLCLK clock, or MCGPLLCLK/2 10 OSCERCLK clock 11 MCGIRCLK clock
TPM_SC_REG(TPMN[tpmn]) = ( 0
//| TPM_SC_CPWMS_MASK //0:上升沿计数模式 ,1: 跳变沿计数模式选择 (注释了表示 0)
| TPM_SC_PS(ps) //分频因子,分频系数 = 2^PS
| TPM_SC_CMOD(2)
);
TPM_MOD_REG(TPMN[tpmn]) = 0xFFFF;
TPM_CNT_REG(TPMN[tpmn]) = 0; //计数器。只有低16位可用(写任何值到此寄存器,都会清0)
}
////////////
能否在这个里边根据陀螺仪来判断????如果能该怎么弄??求指教
|
|