MCXA156 PWM Capture Setup

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

MCXA156 PWM Capture Setup

502 次查看
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.

标签 (1)
0 项奖励
回复
4 回复数

469 次查看
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 项奖励
回复

412 次查看
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 项奖励
回复

407 次查看
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 项奖励
回复

151 次查看
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 项奖励
回复
%3CLINGO-SUB%20id%3D%22lingo-sub-2200423%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3EMCXA156%20PWM%20%E6%8D%95%E8%8E%B7%E8%AE%BE%E7%BD%AE%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%3E%E6%88%91%E6%83%B3%E4%BD%BF%E7%94%A8%20PWM%20%E6%8D%95%E8%8E%B7%E5%8A%9F%E8%83%BD%E3%80%82%20%3C%2FSPAN%3E%3C%2FP%3E%3CP%3E%3CSPAN%3E%E4%B8%8D%E8%BF%87%EF%BC%8CSDK%20%E4%B8%AD%E4%BC%BC%E4%B9%8E%E6%B2%A1%E6%9C%89%E7%9B%B8%E5%85%B3%E7%A4%BA%E4%BE%8B%EF%BC%8C%E5%8F%AA%E6%9C%89%20PWM%20%E8%BE%93%E5%87%BA%E7%9A%84%E7%A4%BA%E4%BE%8B%E3%80%82%3C%2FSPAN%3E%3C%2FP%3E%3CP%3E%3CSPAN%3E%E6%88%91%E6%B3%A8%E6%84%8F%E5%88%B0%E9%A9%B1%E5%8A%A8%E7%A8%8B%E5%BA%8F%E4%B8%AD%E6%9C%89%E4%B8%80%E4%B8%AA%E6%8D%95%E8%8E%B7%20API%EF%BC%8C%E4%BD%86%E6%98%AF%E5%88%B0%E7%9B%AE%E5%89%8D%E4%B8%BA%E6%AD%A2%E6%88%91%E7%9A%84%E5%B0%9D%E8%AF%95%E9%83%BD%E6%B2%A1%E6%9C%89%E6%88%90%E5%8A%9F%E3%80%82%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%3E%E8%AF%B7%E9%97%AE%E6%98%AF%E5%90%A6%E6%9C%89%E5%85%B6%E4%BB%96%E7%9B%B8%E5%85%B3%E6%A0%B7%E6%9C%AC%E5%8F%AF%E4%BE%9B%E5%8F%82%E8%80%83%E3%80%82%3C%2FSPAN%3E%3C%2FP%3E%3CP%20class%3D%22%22%3E%E6%88%91%E7%9A%84%E4%BB%A3%E7%A0%81%E5%A6%82%E4%B8%8B%3C%2FP%3E%3CPRE%20translate%3D%22no%22%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%3E%E8%B0%A2%E8%B0%A2%EF%BC%81%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%3E%E4%BD%A0%E5%A5%BD%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%3C%2FP%3E%0A%3CP%3E%E6%84%9F%E8%B0%A2%E6%82%A8%E7%9A%84%E5%9B%9E%E5%A4%8D%E3%80%82%3C%2FP%3E%0A%3CP%3E%E6%98%AF%E7%9A%84%EF%BC%8C%E6%B2%A1%E6%9C%89%E5%9F%BA%E4%BA%8E%20MCXA156%20%E7%9A%84%E4%B8%93%E7%94%A8%20PWM%20%E6%8D%95%E8%8E%B7%E6%BC%94%E7%A4%BA%E3%80%82%E4%BD%86%E6%98%AF%EF%BC%8C%E6%9C%89%E4%B8%80%E4%B8%AA%E4%BD%BF%E7%94%A8%20SCTIMER%20%E6%A8%A1%E5%9D%97%E5%AE%9E%E7%8E%B0%E7%9A%84%20PWM%20%E6%8D%95%E8%8E%B7%E7%A4%BA%E4%BE%8B%E3%80%82%E6%82%A8%E5%8F%AF%E4%BB%A5%E5%8F%82%E8%80%83%E5%85%B6%E5%8E%9F%E7%90%86%E5%92%8C%E5%AE%9E%E7%8E%B0%E4%BD%9C%E4%B8%BA%E5%9C%A8FlexPWM%E4%B8%8A%E5%BC%80%E5%8F%91PWM%E6%8D%95%E8%8E%B7%E5%8A%9F%E8%83%BD%E7%9A%84%E5%8F%82%E8%80%83%E3%80%82%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%20%3C%2FP%3E%0A%3CBR%20%2F%3E%0A%3CP%3EBR%3C%2FP%3E%0A%3CP%3E%E7%88%B1%E4%B8%BD%E4%B8%9D%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%3E%E4%BD%A0%E5%A5%BD%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%E3%80%81%3C%2FP%3E%3CP%20class%3D%22%22%3E%E6%84%9F%E8%B0%A2%E6%82%A8%E7%9A%84%E5%9B%9E%E5%A4%8D%E3%80%82%3C%2FP%3E%3CP%20class%3D%22%22%3ECTimer%20%E6%8D%95%E8%8E%B7%E7%A4%BA%E4%BE%8B%E6%98%AF%E6%9C%89%E6%95%88%E7%9A%84%EF%BC%8C%E4%BD%86%E7%94%B1%E4%BA%8E%E6%88%91%E4%BB%AC%E7%9A%84%20CTimer%20%E7%94%A8%E4%BA%8E%E5%85%B6%E4%BB%96%E7%9B%AE%E7%9A%84%EF%BC%8C%E6%88%91%E4%BB%AC%E6%83%B3%E9%97%AE%E4%B8%80%E4%B8%8B%E6%98%AF%E5%90%A6%E6%9C%89%E4%BB%BB%E4%BD%95%E4%B8%8E%20PWM%20%E6%8D%95%E8%8E%B7%E7%9B%B8%E5%85%B3%E7%9A%84%E5%8F%82%E8%80%83%E7%A4%BA%E4%BE%8B%E3%80%82%3C%2FP%3E%3CP%20class%3D%22%22%3E%E8%B0%A2%E8%B0%A2%EF%BC%81%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%3E%E4%BD%A0%E5%A5%BD%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%3C%2FP%3E%0A%3CP%3E%E6%84%9F%E8%B0%A2%E6%82%A8%E7%9A%84%E6%8F%90%E9%97%AE%EF%BC%81%3C%2FP%3E%0A%3CP%3E%E6%82%A8%E5%8F%AF%E4%BB%A5%E6%9F%A5%E7%9C%8B%20SDK%20%E4%B8%AD%E6%8F%90%E4%BE%9B%E7%9A%84%E6%8D%95%E8%8E%B7%E6%BC%94%E7%A4%BA%E3%80%82%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%3E%E7%88%B1%E4%B8%BD%E4%B8%9D%3C%2FP%3E%3C%2FLINGO-BODY%3E