本帖最后由 FSL_TICS_A 于 2014-8-7 14:20 编辑
void lptmr_counter_init(LPT0_ALTn altn, u16 count, u8 PrescaleValue, LPT_CFG cfg)
{
if(PrescaleValue > 0x0f)PrescaleValue = 0x0f;
//lptmr_clear_registers();
//设置输入管脚
if(altn == LPT0_ALT1)
{
SIM_SCGC5 |= SIM_SCGC5_PORTA_MASK; //打开 PORTA 时钟
PORTA_PCR19 = PORT_PCR_MUX(0x6); //在PTA19上使用 ALT6
LPT0_flag=1;
}
else if(altn == LPT0_ALT2)
{
SIM_SCGC5 |= SIM_SCGC5_PORTC_MASK; //使能 PORTC 时钟
PORTC_PCR5 = PORT_PCR_MUX(0x4); //在PTC5上使用 ALT4
LPT1_flag=1;
}
else //不可能发生事件
{
assert_failed(__FILE__, __LINE__); //设置管脚有误?
}
/* 开启模块时钟 */
SIM_SCGC5 |= SIM_SCGC5_LPTIMER_MASK; //使能LPT模块时钟
/* 清状态寄存器 */
LPTMR0_CSR = 0x00; //先关了LPT,这样才能设置时钟分频等
/* 设置累加计数值 */
LPTMR_CMR_REG(LPTMR0_BASE_PTR) = LPTMR_CMR_COMPARE(count); //设置比较值
/* 时钟选择 */
LPTMR_PSR_REG(LPTMR0_BASE_PTR) = LPTMR_PSR_PCS(0x1) | LPTMR_PSR_PBYP_MASK | LPTMR_PSR_PRESCALE(PrescaleValue); //使用 LPO clock 且 bypass glitch filter
// 开启和配置脉冲滤波器:2^n个时钟上升沿才识别
/* 管脚设置、使能中断 */
LPTMR_CSR_REG(LPTMR0_BASE_PTR) = LPTMR_CSR_TPS(altn) | LPTMR_CSR_TMS_MASK | ( cfg == LPT_Falling ? LPTMR_CSR_TPP_MASK : 0 ) | LPTMR_CSR_TEN_MASK | LPTMR_CSR_TIE_MASK ;
// 选择输入管脚 选择脉冲计数 下降沿 上升沿 使能LPT
// TFC = 0,即计数值等于比较值时,计数值复位
//lptmr_clear_registers();
enable_irq(LPTMR_irq); //开引脚的IRQ中断
}
为什么在主函数中定义中断后,中断进不去??? |