(Kinetis K60) LPTMR脉冲计数

初始化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)目测得到了精确的计数值

原文地址:https://www.cnblogs.com/hebaichuanyeah/p/3124154.html