初始化lptmr脉冲计数
void LPTMR_init(U16 CountNUM) { SIM_SCGC5 |= SIM_SCGC5_PORTA_MASK; //打开 PORTA 时钟 PORTA_PCR19 = PORT_PCR_MUX(0x06); //在PTA19上使用 ALT6 SIM_SCGC5 |= SIM_SCGC5_LPTIMER_MASK; //使能LPT模块时钟 LPTMR0_CSR = 0x00; //关LPT 设置时钟分频 LPTMR0_CMR = CountNUM; //设置比较值 LPTMR_PSR_REG(LPTMR0_BASE_PTR) = LPTMR_PSR_PCS(1) | LPTMR_PSR_PBYP_MASK | LPTMR_PSR_PRESCALE(2); LPTMR0_CSR = LPTMR_CSR_TPS(1) | LPTMR_CSR_TMS_MASK | LPTMR_CSR_TPP_MASK | LPTMR_CSR_TEN_MASK | LPTMR_CSR_TIE_MASK ; // TPS 01 管脚:LPTMR_ALT1 TMS 1 脉冲计数模式 TPP 1 下降沿 TEN 1 使能定时器 TIE 1 开启中断 enable_irq(85u); }
PIT中断服务函数观摩1S计数
void PIT0_IRQHandler(void) { count = LPTMR0_CNR; //保存脉冲计数器计算值 LPTMR_CSR_REG(LPTMR0_BASE_PTR) &= ~LPTMR_CSR_TEN_MASK; //重启LPTMR 清计数 LPTMR_CSR_REG(LPTMR0_BASE_PTR) |=LPTMR_CSR_TEN_MASK; count1=count; count2=count>>8; Uart4_SendByte(count2); Uart4_SendByte(count1); count=0; PIT_TFLG0 |= PIT_TFLG_TIF_MASK; //清中断标志 PIT_MCR = 0; }
短接PTA10(FTM2 CHO)和PTA19(LPMTR0_ALT1)目测得到了精确的计数值