MCXA156 PWM Capture Setup

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

MCXA156 PWM Capture Setup

784 Views
ZRay
Contributor I

Hi

I would like to use the PWM Capture feature.

However, there doesn't seem to be a relevant example in the SDK there is only a sample for PWM output.

I noticed there is a Capture API in the Driver, but my attempts so far have not been successful.

ZRay_1-1762480522655.png

I would like to ask if there are any other related samples that I can refer to.

My code is as follows:

int main(void)
{
    BOARD_InitHardware();
    PRINTF("FlexPWM input capture only\r\n");

    pwm_config_t pwmConfig;
    PWM_GetDefaultConfig(&pwmConfig);
    pwmConfig.pairOperation = kPWM_Independent;
    pwmConfig.enableDebugMode = true;

    PWM_Init(BOARD_PWM_BASEADDR, kPWM_Module_0, &pwmConfig);

    // Setup Input Capture
    pwm_input_capture_param_t captureParams = {0};
    captureParams.captureInputSel = 0;
    captureParams.edge0 = kPWM_RisingEdge;
    captureParams.edge1 = kPWM_FallingEdge;
    captureParams.enableOneShotCapture = false;
    captureParams.fifoWatermark = 0;
    captureParams.edgeCompareValue = 0;
    PWM_SetupInputCapture(BOARD_PWM_BASEADDR, kPWM_Module_0, kPWM_PwmX, &captureParams);


    PWM_StartTimer(BOARD_PWM_BASEADDR, kPWM_Control_Module_0);

    while (1)
    {
        uint16_t captured_cval0 = BOARD_PWM_BASEADDR->SM[kPWM_Module_0].CVAL0;
        PRINTF("Capture Value 0 Register: %u\r\n", captured_cval0);
        uint16_t captured_cval1 = BOARD_PWM_BASEADDR->SM[kPWM_Module_0].CVAL1;
        PRINTF("Capture Value 1 Register: %u\r\n", captured_cval1);
        
        SDK_DelayAtLeastUs(100000, SDK_DEVICE_MAXIMUM_CPU_CLOCK_FREQUENCY);
    }
}
 

Thank you.

Labels (1)
0 Kudos
Reply
4 Replies

751 Views
Alice_Yang
NXP TechSupport
NXP TechSupport

Hello @ZRay 

Thanks for your question!

You can check out the capture demo provided in the SDK.

Alice_Yang_0-1762496318159.png

 

BR

Alice

0 Kudos
Reply

694 Views
ZRay
Contributor I

Hi @Alice_Yang ,

Thank you for reply.

The CTimer Capture example is work, but since our CTimer is used for other purposes, we wanted to ask if there are any reference examples related to PWM Capture.

Thank you.

0 Kudos
Reply

689 Views
Alice_Yang
NXP TechSupport
NXP TechSupport

Hello @ZRay 

Thank you for your reply.

Yes, there is no dedicated PWM capture demo based on the MCXA156. However, there is a PWM capture example implemented using the SCTIMER module. You may refer to its principle and implementation as a reference for developing PWM capture functionality on FlexPWM.

https://www.nxp.com/docs/en/application-note/AN11538.zip 

 

BR

Alice

0 Kudos
Reply

433 Views
ZRay
Contributor I

Hi @Alice_Yang 

Thanks for info.

I figured it out.

int main(void)
{
    BOARD_InitHardware();
    PRINTF("FlexPWM input capture only\r\n");

    pwm_config_t pwmConfig;
    PWM_GetDefaultConfig(&pwmConfig);
    //pwmConfig.prescale = kPWM_Prescale_Divide_1;
    pwmConfig.reloadLogic 	= kPWM_ReloadPwmFullCycle;
    pwmConfig.pairOperation = kPWM_Independent;
    pwmConfig.enableDebugMode = true;

    if( PWM_Init(BOARD_PWM_BASEADDR, kPWM_Module_0, &pwmConfig)== kStatus_Fail){
    	PRINTF("Can't initialize PWM\n");
    	return 0;
    }

    // Setup Input Capture
    pwm_input_capture_param_t captureParams = {0};
    captureParams.captureInputSel = 0;
    captureParams.edge0 = kPWM_RisingEdge;
    captureParams.edge1 = kPWM_FallingEdge;
    captureParams.enableOneShotCapture = false;
    //captureParams.fifoWatermark = 0;
    //captureParams.edgeCompareValue = 0;
    PWM_SetupInputCapture(BOARD_PWM_BASEADDR, kPWM_Module_0, kPWM_PwmX, &captureParams);

    //PWM_SetPwmLdok(BOARD_PWM_BASEADDR, kPWM_Control_Module_0, true);

    PWM_StartTimer(BOARD_PWM_BASEADDR, kPWM_Control_Module_0);

    while (1)
    {
        uint16_t rising = BOARD_PWM_BASEADDR->SM[kPWM_Module_0].CVAL0;
        uint16_t falling = BOARD_PWM_BASEADDR->SM[kPWM_Module_0].CVAL1;
        uint16_t high = falling > rising ? falling - rising : (falling + 0x10000) - rising;
        PRINTF("rising: %u  falling: %u  high: %u\r\n",rising, falling, high);
        SDK_DelayAtLeastUs(100000, SDK_DEVICE_MAXIMUM_CPU_CLOCK_FREQUENCY);
    }
}

 

0 Kudos
Reply
%3CLINGO-SUB%20id%3D%22lingo-sub-2200423%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3EMCXA156%20PWM%20Capture%20Setup%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2200423%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3EHi%3C%2FP%3E%3CP%3E%3CSPAN%3EI%20would%20like%20to%20use%20the%20PWM%20Capture%20feature.%20%3C%2FSPAN%3E%3C%2FP%3E%3CP%3E%3CSPAN%3EHowever%2C%20there%20doesn't%20seem%20to%20be%20a%20relevant%20example%20in%20the%20SDK%20there%20is%20only%20a%20sample%20for%20PWM%20output.%3C%2FSPAN%3E%3C%2FP%3E%3CP%3E%3CSPAN%3EI%20noticed%20there%20is%20a%20Capture%20API%20in%20the%20Driver%2C%20but%20my%20attempts%20so%20far%20have%20not%20been%20successful.%20%3C%2FSPAN%3E%3C%2FP%3E%3CP%3E%3CSPAN%20class%3D%22lia-inline-image-display-wrapper%20lia-image-align-inline%22%20image-alt%3D%22ZRay_1-1762480522655.png%22%20style%3D%22width%3A%20400px%3B%22%3E%3Cspan%20class%3D%22lia-inline-image-display-wrapper%22%20image-alt%3D%22ZRay_1-1762480522655.png%22%20style%3D%22width%3A%20400px%3B%22%3E%3Cimg%20src%3D%22https%3A%2F%2Fcommunity.nxp.com%2Ft5%2Fimage%2Fserverpage%2Fimage-id%2F364345iCCADCCB11887F5FF%2Fimage-size%2Fmedium%3Fv%3Dv2%26amp%3Bpx%3D400%22%20role%3D%22button%22%20title%3D%22ZRay_1-1762480522655.png%22%20alt%3D%22ZRay_1-1762480522655.png%22%20%2F%3E%3C%2Fspan%3E%3C%2FSPAN%3E%3C%2FP%3E%3CP%3E%3CSPAN%3EI%20would%20like%20to%20ask%20if%20there%20are%20any%20other%20related%20samples%20that%20I%20can%20refer%20to.%3C%2FSPAN%3E%3C%2FP%3E%3CP%20class%3D%22%22%3EMy%20code%20is%20as%20follows%3A%3C%2FP%3E%3CPRE%3Eint%20main(void)%0A%7B%0A%20%20%20%20BOARD_InitHardware()%3B%0A%20%20%20%20PRINTF(%22FlexPWM%20input%20capture%20only%5Cr%5Cn%22)%3B%0A%0A%20%20%20%20pwm_config_t%20pwmConfig%3B%0A%20%20%20%20PWM_GetDefaultConfig(%26amp%3BpwmConfig)%3B%0A%20%20%20%20pwmConfig.pairOperation%20%3D%20kPWM_Independent%3B%0A%20%20%20%20pwmConfig.enableDebugMode%20%3D%20true%3B%0A%0A%20%20%20%20PWM_Init(BOARD_PWM_BASEADDR%2C%20kPWM_Module_0%2C%20%26amp%3BpwmConfig)%3B%0A%0A%20%20%20%20%2F%2F%20Setup%20Input%20Capture%0A%20%20%20%20pwm_input_capture_param_t%20captureParams%20%3D%20%7B0%7D%3B%0A%20%20%20%20captureParams.captureInputSel%20%3D%200%3B%0A%20%20%20%20captureParams.edge0%20%3D%20kPWM_RisingEdge%3B%0A%20%20%20%20captureParams.edge1%20%3D%20kPWM_FallingEdge%3B%0A%20%20%20%20captureParams.enableOneShotCapture%20%3D%20false%3B%0A%20%20%20%20captureParams.fifoWatermark%20%3D%200%3B%0A%20%20%20%20captureParams.edgeCompareValue%20%3D%200%3B%0A%20%20%20%20PWM_SetupInputCapture(BOARD_PWM_BASEADDR%2C%20kPWM_Module_0%2C%20kPWM_PwmX%2C%20%26amp%3BcaptureParams)%3B%0A%0A%0A%20%20%20%20PWM_StartTimer(BOARD_PWM_BASEADDR%2C%20kPWM_Control_Module_0)%3B%0A%0A%20%20%20%20while%20(1)%0A%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20uint16_t%20captured_cval0%20%3D%20BOARD_PWM_BASEADDR-%26gt%3BSM%5BkPWM_Module_0%5D.CVAL0%3B%0A%20%20%20%20%20%20%20%20PRINTF(%22Capture%20Value%200%20Register%3A%20%25u%5Cr%5Cn%22%2C%20captured_cval0)%3B%0A%20%20%20%20%20%20%20%20uint16_t%20captured_cval1%20%3D%20BOARD_PWM_BASEADDR-%26gt%3BSM%5BkPWM_Module_0%5D.CVAL1%3B%0A%20%20%20%20%20%20%20%20PRINTF(%22Capture%20Value%201%20Register%3A%20%25u%5Cr%5Cn%22%2C%20captured_cval1)%3B%0A%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20SDK_DelayAtLeastUs(100000%2C%20SDK_DEVICE_MAXIMUM_CPU_CLOCK_FREQUENCY)%3B%0A%20%20%20%20%7D%0A%7D%3C%2FPRE%3E%3CDIV%20class%3D%22%22%3E%26nbsp%3B%3C%2FDIV%3E%3CDIV%20class%3D%22%22%3E%3CP%20class%3D%22%22%3EThank%20you.%3C%2FP%3E%3C%2FDIV%3E%3C%2FLINGO-BODY%3E%3CLINGO-LABS%20id%3D%22lingo-labs-2200423%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CLINGO-LABEL%3EMCXA%3C%2FLINGO-LABEL%3E%3C%2FLINGO-LABS%3E%3CLINGO-SUB%20id%3D%22lingo-sub-2202630%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%20translate%3D%22no%22%3ERe%3A%20MCXA156%20PWM%20Capture%20Setup%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2202630%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3EHello%26nbsp%3B%3CA%20href%3D%22https%3A%2F%2Fcommunity.nxp.com%2Ft5%2Fuser%2Fviewprofilepage%2Fuser-id%2F214745%22%20target%3D%22_blank%22%3E%40ZRay%3C%2FA%3E%26nbsp%3B%3C%2FP%3E%0A%3CP%3EThank%20you%20for%20your%20reply.%3C%2FP%3E%0A%3CP%3EYes%2C%20there%20is%20no%20dedicated%20PWM%20capture%20demo%20based%20on%20the%20MCXA156.%20However%2C%20there%20is%20a%20PWM%20capture%20example%20implemented%20using%20the%20SCTIMER%20module.%20You%20may%20refer%20to%20its%20principle%20and%20implementation%20as%20a%20reference%20for%20developing%20PWM%20capture%20functionality%20on%20FlexPWM.%3C%2FP%3E%0A%3CP%3E%3CA%20href%3D%22https%3A%2F%2Fwww.nxp.com%2Fdocs%2Fen%2Fapplication-note%2FAN11538.zip%22%20target%3D%22_blank%22%20rel%3D%22nofollow%20noopener%20noreferrer%22%3Ehttps%3A%2F%2Fwww.nxp.com%2Fdocs%2Fen%2Fapplication-note%2FAN11538.zip%3C%2FA%3E%26nbsp%3B%3C%2FP%3E%0A%3CBR%20%2F%3E%0A%3CP%3EBR%3C%2FP%3E%0A%3CP%3EAlice%3C%2FP%3E%3C%2FLINGO-BODY%3E%3CLINGO-SUB%20id%3D%22lingo-sub-2202416%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%20translate%3D%22no%22%3ERe%3A%20MCXA156%20PWM%20Capture%20Setup%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2202416%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3EHi%20%3CA%20href%3D%22https%3A%2F%2Fcommunity.nxp.com%2Ft5%2Fuser%2Fviewprofilepage%2Fuser-id%2F27788%22%20target%3D%22_blank%22%3E%40Alice_Yang%3C%2FA%3E%26nbsp%3B%2C%3C%2FP%3E%3CP%20class%3D%22%22%3EThank%20you%20for%20reply.%3C%2FP%3E%3CP%20class%3D%22%22%3EThe%20CTimer%20Capture%20example%20is%20work%2C%20but%20since%20our%20CTimer%20is%20used%20for%20other%20purposes%2C%20we%20wanted%20to%20ask%20if%20there%20are%20any%20reference%20examples%20related%20to%20PWM%20Capture.%3C%2FP%3E%3CP%20class%3D%22%22%3EThank%20you.%3C%2FP%3E%3C%2FLINGO-BODY%3E%3CLINGO-SUB%20id%3D%22lingo-sub-2200571%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%20translate%3D%22no%22%3ERe%3A%20MCXA156%20PWM%20Capture%20Setup%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2200571%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3EHello%26nbsp%3B%3CA%20href%3D%22https%3A%2F%2Fcommunity.nxp.com%2Ft5%2Fuser%2Fviewprofilepage%2Fuser-id%2F214745%22%20target%3D%22_blank%22%3E%40ZRay%3C%2FA%3E%26nbsp%3B%3C%2FP%3E%0A%3CP%3EThanks%20for%20your%20question!%3C%2FP%3E%0A%3CP%3EYou%20can%20check%20out%20the%20capture%20demo%20provided%20in%20the%20SDK.%3C%2FP%3E%0A%3CP%3E%3CSPAN%20class%3D%22lia-inline-image-display-wrapper%20lia-image-align-inline%22%20image-alt%3D%22Alice_Yang_0-1762496318159.png%22%20style%3D%22width%3A%20400px%3B%22%3E%3Cspan%20class%3D%22lia-inline-image-display-wrapper%22%20image-alt%3D%22Alice_Yang_0-1762496318159.png%22%20style%3D%22width%3A%20400px%3B%22%3E%3Cimg%20src%3D%22https%3A%2F%2Fcommunity.nxp.com%2Ft5%2Fimage%2Fserverpage%2Fimage-id%2F364384i7E35F83EB9E390A3%2Fimage-size%2Fmedium%3Fv%3Dv2%26amp%3Bpx%3D400%22%20role%3D%22button%22%20title%3D%22Alice_Yang_0-1762496318159.png%22%20alt%3D%22Alice_Yang_0-1762496318159.png%22%20%2F%3E%3C%2Fspan%3E%3C%2FSPAN%3E%3C%2FP%3E%0A%3CBR%20%2F%3E%0A%3CP%3EBR%3C%2FP%3E%0A%3CP%3EAlice%3C%2FP%3E%3C%2FLINGO-BODY%3E