Pulse counter with k60

取消
显示结果 
显示  仅  | 搜索替代 
您的意思是: 
已解决

Pulse counter with k60

跳至解决方案
1,131 次查看
feraro
Contributor IV

Hello.

I need to make a pulse counter for counting the pulses witth K60. the frequency si around 25 KHz.


That way you advise me?.


Thank you very much.


0 项奖励
1 解答
658 次查看
feraro
Contributor IV

Hi, Paul.

After send the function, added initialization interrupt and I already work properly. I used the option of Dual Edge.

Thanks for your interest.


Best Regards.


Fernando.

在原帖中查看解决方案

0 项奖励
6 回复数
658 次查看
Paul_Tian
NXP Employee
NXP Employee

Hi, Ramon

You can use FTM module input capture function for this application. For detail, you can reference chapture "input capture mode" in FTM module.

Hope my reply can help you.

Best Regards

Paul


0 项奖励
658 次查看
feraro
Contributor IV

Hi Paul.

I tried as you say the FTM, using the C0V, but the problem is that it counts the pulses generated by the FTM counter too. Do not know how to count only pulses that arrive via pin FTM0_CH0.

Thank you very much.

0 项奖励
658 次查看
Paul_Tian
NXP Employee
NXP Employee

Hi, Ramon

Would you please help to provide your FTM setting code for my checking? Thanks.

Best Regards

Paul

0 项奖励
658 次查看
feraro
Contributor IV

Ok. I send you the initialization.

Thank you very much.

void vInitFTM(void) {

   

    //Enable the Clock to the FTM0 Module

    SIM_SCGC6 |= SIM_SCGC6_FTM0_MASK; 

    

    //Pin control Register (MUX allowing user to route the desired signal to the pin. 

    PORTC_PCR1   = PORT_PCR_MUX(0x4); 

   

      FTM0_MODE = (uint32_t)0x04UL;        /* Set up mode register */

      /* FTM0_SC: ??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,TOF=0,TOIE=0,CPWMS=0,CLKS=0,PS=0 */

      FTM0_SC = (uint32_t)0x00UL;          /* Clear status and control register */

      /* FTM0_CNTIN: ??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,INIT=0 */

      FTM0_CNTIN = (uint32_t)0x00UL;       /* Clear counter initial register */

      /* FTM0_CNT: ??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,COUNT=0 */

      FTM0_CNT = (uint32_t)0x00UL;         /* Reset counter register */

      /* FTM0_C0SC: ??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,CHF=0,CHIE=0,MSB=0,MSA=0,ELSB=0,ELSA=0,??=0,DMA=0 */

      FTM0_C0SC = (uint32_t)0x04UL;        /* Clear channel status and control register */

      /* FTM0_C1SC: ??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,CHF=0,CHIE=0,MSB=0,MSA=0,ELSB=0,ELSA=0,??=0,DMA=0 */

      FTM0_C1SC = (uint32_t)0x00UL;        /* Clear channel status and control register */

      /* FTM0_C2SC: ??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,CHF=0,CHIE=0,MSB=0,MSA=0,ELSB=0,ELSA=0,??=0,DMA=0 */

      FTM0_C2SC = (uint32_t)0x00UL;        /* Clear channel status and control register */

      /* FTM0_C3SC: ??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,CHF=0,CHIE=0,MSB=0,MSA=0,ELSB=0,ELSA=0,??=0,DMA=0 */

      FTM0_C3SC = (uint32_t)0x00UL;        /* Clear channel status and control register */

      /* FTM0_C4SC: ??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,CHF=0,CHIE=0,MSB=0,MSA=0,ELSB=0,ELSA=0,??=0,DMA=0 */

      FTM0_C4SC = (uint32_t)0x00UL;        /* Clear channel status and control register */

      /* FTM0_C5SC: ??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,CHF=0,CHIE=0,MSB=0,MSA=0,ELSB=0,ELSA=0,??=0,DMA=0 */

      FTM0_C5SC = (uint32_t)0x00UL;        /* Clear channel status and control register */

      /* FTM0_C6SC: ??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,CHF=0,CHIE=0,MSB=0,MSA=0,ELSB=0,ELSA=0,??=0,DMA=0 */

      FTM0_C6SC = (uint32_t)0x00UL;        /* Clear channel status and control register */

      /* FTM0_C7SC: ??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,CHF=0,CHIE=0,MSB=0,MSA=0,ELSB=0,ELSA=0,??=0,DMA=0 */

      FTM0_C7SC = (uint32_t)0x00UL;        /* Clear channel status and control register */

      /* FTM0_MOD: ??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,MOD=0xFFFF */

      FTM0_MOD = (uint32_t)0xFFFFUL;       /* Set up modulo register */

      /* FTM0_C0SC: ??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,CHF=0,CHIE=0,MSB=0,MSA=0,ELSB=0,ELSA=1,??=0,DMA=0 */

      FTM0_C0SC = (uint32_t)0x04UL;        /* Set up channel status and control register */

      /* PORTA_PCR18: ISF=0,MUX=4 */

      PORTA_PCR18 = (uint32_t)((PORTA_PCR18 & (uint32_t)~0x01000300UL) | (uint32_t)0x0400UL);

      /* SIM_SOPT4: FTM0CLKSEL=0 */

      SIM_SOPT4 &= (uint32_t)~0x01000000UL;                     

      /* PORTC_PCR1: ISF=0,MUX=4 */

      /* FTM0_SC: ??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,TOF=0,TOIE=0,CPWMS=0,CLKS=3,PS=0 */

      FTM0_SC = (uint32_t)0x18UL;          /* Set up status and control register */

}


0 项奖励
658 次查看
Paul_Tian
NXP Employee
NXP Employee

Hi, Ramon

I checked your code. It seems that you did not use interrupt for this input capture operation. So how do you know this function does not work? Thanks.

Best Regards

Paul

659 次查看
feraro
Contributor IV

Hi, Paul.

After send the function, added initialization interrupt and I already work properly. I used the option of Dual Edge.

Thanks for your interest.


Best Regards.


Fernando.

0 项奖励