/*!
* @brief LPTMR脉冲计数初始化
* @param LPT0_ALTn LPTMR脉冲计数管脚
* @param count LPTMR脉冲比较值
* @param LPT_CFG LPTMR脉冲计数方式:上升沿计数或下降沿计数
* @since v5.0
* Sample usage: lptmr_pulse_init(LPT0_ALT1,0xFFFF,LPT_Rising); // LPTMR 脉冲捕捉,捕捉0xFFFF后触发中断请求(需要开中断才执行中断复位函数),上升沿捕捉
*/
void lptmr_pulse_init(LPT0_ALTn altn, uint16 count, LPT_CFG cfg)
{
//SIM_SCGC5 |=(uint32)(0x1UL<<11); //open the clock of the PTC
port_init(PORTC,5,3); //在PTC5上使用 ALT3
// 开启模块时钟
SIM_SCGC5 |= SIM_SCGC5_LPTMR_MASK; //使能LPT模块时钟
/*
else //不可能发生事件
{
ASSERT((altn == LPT0_ALT1 ) || (altn == LPT0_ALT2 )); //设置管脚有误?
}
*/
// 清状态寄存器
LPTMR0_CSR = 0x00; //先关了LPT,这样才能设置时钟分频,清空计数值等
// 设置累加计数值
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)
);
}
/*!
* @brief 获取LPTMR脉冲计数值
* @return 脉冲计数值
* @since v5.0
* Sample usage: uint16 data = lptmr_pulse_get(); //获取脉冲计数值
*/
uint16 lptmr_pulse_get(void)
{
LPTMR0_CNR = 0;
return (uint16)LPTMR0_CNR;
}
/*!
* @brief 清空LPTMR脉冲计数
* @since v5.0
* Sample usage: lptmr_counter_clean(); //清空LPTMR脉冲计数
*/
void lptmr_pulse_clean(void)
{
LPTMR0_CSR &= ~LPTMR_CSR_TEN_MASK; //禁用LPT的时候就会自动清计数器的值
LPTMR0_CSR |= LPTMR_CSR_TEN_MASK;
}
现在的问题是用上边的底层库,实现脉冲计数,计数的结果是零,大家帮忙看一下啊 |