Pulse counter with k60

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

Pulse counter with k60

Jump to solution
1,114 Views
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 Kudos
1 Solution
641 Views
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.

View solution in original post

0 Kudos
6 Replies
641 Views
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 Kudos
641 Views
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 Kudos
641 Views
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 Kudos
641 Views
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 Kudos
641 Views
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

642 Views
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 Kudos