Pulse counter with k60

キャンセル
次の結果を表示 
表示  限定  | 次の代わりに検索 
もしかして: 

Pulse counter with k60

ソリューションへジャンプ
2,245件の閲覧回数
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.


ラベル(2)
0 件の賞賛
返信
1 解決策
1,772件の閲覧回数
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 返答(返信)
1,772件の閲覧回数
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 件の賞賛
返信
1,772件の閲覧回数
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 件の賞賛
返信
1,772件の閲覧回数
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 件の賞賛
返信
1,772件の閲覧回数
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 件の賞賛
返信
1,772件の閲覧回数
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

1,773件の閲覧回数
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 件の賞賛
返信