XBAR,QTMR,CMP line frequency detection

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

XBAR,QTMR,CMP line frequency detection

1,052 Views
nickng
Contributor II

HI,

I would like ask if there is an example to use all the cmp (0,1,2) and TMR0,1,2 and DAC connected by XBAR in order to capture the 3 phase frequency .

I got a trouble on only Phase 1 is detected correctly by the timer TMR0-CAPT. the other two timers are always return me 0.

Phase 1 : CMP0 INT0  INT7 (DAC)

Phase 2 : CMP1 INT0  INT7 (DAC)

Phase 3 : CMP2 INT3  INT7 (DAC)

I got all the signals from cmp interrupt routine, by just phase 2 and 3 return 0 value of the TMRX-CAPT.

Which means the cmp did captured the signal but the TMR1 and TMR2 does not really counting.

Do I need to enable something at the SIM module?

      /* Select secondary source count from XBAR */
      SIM->MISC_CTL |= SIM_MISC_CTL_TMR0SCSEL(1);
      SIM->MISC_CTL |= SIM_MISC_CTL_TMR1SCSEL(1);
      SIM->MISC_CTL |= SIM_MISC_CTL_TMR2SCSEL(1);

   /*    config->debugMode = kQTMR_RunNormalInDebug;
    *    config->enableExternalForce = false;
    *    config->enableMasterMode = false;
    *    config->faultFilterCount = 0;
    *    config->faultFilterPeriod = 0;
    *    config->primarySource = kQTMR_ClockDivide_2;
    *    config->secondarySource = kQTMR_Counter0InputPin;*/
    QTMR_GetDefaultConfig(&qtmrConfig);

    /* Set clock prescaler */
    qtmrConfig.primarySource = kQTMR_ClockDivide_16;
    QTMR_Init(TMR0, &qtmrConfig);
//    qtmrConfig.secondarySource = kQTMR_Counter1InputPin;
    QTMR_Init(TMR1, &qtmrConfig);
//    qtmrConfig.secondarySource = kQTMR_Counter2InputPin;
    QTMR_Init(TMR2, &qtmrConfig);
    /* Set qtimer work in input capture mode */
    QTMR_SetupInputCapture(TMR0, kQTMR_Counter0InputPin, false, true, kQTMR_RisingEdge);
    QTMR_SetupInputCapture(TMR1, kQTMR_Counter0InputPin, false, true, kQTMR_RisingEdge);
    QTMR_SetupInputCapture(TMR2, kQTMR_Counter0InputPin, false, true, kQTMR_RisingEdge);

    CMP_GetDefaultConfig(&mCmpConfigStruct);
    mCmpConfigStruct.hysteresisMode = kCMP_HysteresisLevel2;
    mCmpConfigStruct.enableInvertOutput = true;
    /* Init the CMP comparator. */
    CMP_Init(CMP0, &mCmpConfigStruct);
    CMP_Init(CMP1, &mCmpConfigStruct);
    CMP_Init(CMP2, &mCmpConfigStruct);
    /* Configure the DAC channel. */
    mCmpDacConfigStruct.referenceVoltageSource = kCMP_VrefSourceVin2; /* VCC. */
    mCmpDacConfigStruct.DACValue = 8U;                               /* ref value = 8*3.3V/64 =412.5mV. */
    CMP_SetDACConfig( CMP0, &mCmpDacConfigStruct);
    CMP_SetDACConfig( CMP1, &mCmpDacConfigStruct);
    CMP_SetDACConfig( CMP2, &mCmpDacConfigStruct);


    /* Initialize the CMP comparator. */
    CMP_Init(CMP0, &mCmpConfigStruct);
    CMP_Init(CMP1, &mCmpConfigStruct);
    CMP_Init(CMP2, &mCmpConfigStruct);
    CMP_SetInputChannels(CMP0, 0, 7);// 0 = CMP0 INT0 7 = DAC
    CMP_SetInputChannels(CMP1, 0, 7);// 0 = CMP1 INT0 7 = DAC
    CMP_SetInputChannels(CMP2, 3, 7);// 0 = CMP2 INT3 7 = DAC

    XBAR_SetSignalsConnection(XBAR, kXBAR_InputCmp0Output , kXBAR_OutputTmrCh0SecInput);
    XBAR_SetSignalsConnection(XBAR, kXBAR_InputCmp1Output , kXBAR_OutputTmrCh1SecInput);
    XBAR_SetSignalsConnection(XBAR, kXBAR_InputCmp2Output , kXBAR_OutputTmrCh2SecInput);

    /* Configure the XBAR interrupt. */
    xbarConfig.activeEdge = kXBAR_EdgeRisingAndFalling;
    xbarConfig.requestType = kXBAR_RequestDisable;
    XBAR_SetOutputSignalConfig(XBAR, kXBAR_OutputTmrCh0SecInput, &xbarConfig);
    XBAR_SetOutputSignalConfig(XBAR, kXBAR_OutputTmrCh1SecInput, &xbarConfig);
    XBAR_SetOutputSignalConfig(XBAR, kXBAR_OutputTmrCh2SecInput, &xbarConfig);

Labels (1)
Tags (1)
0 Kudos
Reply
1 Reply

719 Views
nickng
Contributor II

closed

NO problem. just because of wrong init sequence.

The capture started before init completed.

0 Kudos
Reply