2222200_en-US

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

2222200_en-US

2222200_en-US

PWM Capturing on IMXRT1062 Stopped when the prescaler is set with a value different from kPWM_Presca

Hello,

I've encountered an issue when configuring the any of the four PWM peripherals clock perscaler with values other than kPWM_Prescale_Divide_1 , the counter of the selected PWM peripheral doesn't work at all.

I'm using the imxrt1062 processor and MCUXpresso IDE v11.9.1

I hope, you can support me as soon as possible.
And, here is a snippet of my code where I configure and initialize the pwm peripherals.

static void pwm_init(void)

{

pwm_config_t pwmConfig;

pwm_input_capture_param_t captureConfig;

pwm_fault_param_t faultConfig;


/* Read the PWM default configuration */

PWM_GetDefaultConfig(&pwmConfig);

pwmConfig.clockSource = kPWM_BusClock;

pwmConfig.prescale = kPWM_Prescale_Divide_2;

pwmConfig.pairOperation = kPWM_Independent;

pwmConfig.initializationControl = kPWM_Initialize_LocalSync;

pwmConfig.reloadLogic = kPWM_ReloadImmediate;

pwmConfig.reloadSelect = kPWM_LocalReload;

pwmConfig.reloadFrequency = kPWM_LoadEveryOportunity;

pwmConfig.forceTrigger = kPWM_Force_LocalSync;

pwmConfig.enableDebugMode = true;


PWM_Init(PWM1_BASEADDR, kPWM_Module_3, &pwmConfig);

PWM_Init(PWM2_BASEADDR, kPWM_Module_3, &pwmConfig);

PWM_Init(PWM3_BASEADDR, kPWM_Module_1, &pwmConfig);

PWM_Init(PWM4_BASEADDR, kPWM_Module_1, &pwmConfig);


// fault configuration

PWM_FaultDefaultConfig(&faultConfig);

/* Sets up the PWM fault protection */

PWM_SetupFaults(PWM1_BASEADDR, kPWM_Fault_0, &faultConfig);

PWM_SetupFaults(PWM1_BASEADDR, kPWM_Fault_1, &faultConfig);

PWM_SetupFaults(PWM1_BASEADDR, kPWM_Fault_2, &faultConfig);

PWM_SetupFaults(PWM1_BASEADDR, kPWM_Fault_3, &faultConfig);


/* Set PWM fault disable mapping for submodule 0/1/2 */

PWM_SetupFaultDisableMap(PWM1_BASEADDR, kPWM_Module_0kPWM_PwmAkPWM_faultchannel_0kPWM_FaultDisable_0 | kPWM_FaultDisable_1 | kPWM_FaultDisable_2 | kPWM_FaultDisable_3);

PWM_SetupFaultDisableMap(PWM1_BASEADDR, kPWM_Module_1kPWM_PwmAkPWM_faultchannel_0kPWM_FaultDisable_0 | kPWM_FaultDisable_1 | kPWM_FaultDisable_2 | kPWM_FaultDisable_3);

PWM_SetupFaultDisableMap(PWM1_BASEADDR, kPWM_Module_2kPWM_PwmAkPWM_faultchannel_0kPWM_FaultDisable_0 | kPWM_FaultDisable_1 | kPWM_FaultDisable_2 | kPWM_FaultDisable_3);

PWM_SetupFaultDisableMap(PWM1_BASEADDR, kPWM_Module_3kPWM_PwmAkPWM_faultchannel_0kPWM_FaultDisable_0 | kPWM_FaultDisable_1 | kPWM_FaultDisable_2 | kPWM_FaultDisable_3);


/* Sets up the PWM fault protection */

PWM_SetupFaults(PWM2_BASEADDR, kPWM_Fault_0, &faultConfig);

PWM_SetupFaults(PWM2_BASEADDR, kPWM_Fault_1, &faultConfig);

PWM_SetupFaults(PWM2_BASEADDR, kPWM_Fault_2, &faultConfig);

PWM_SetupFaults(PWM2_BASEADDR, kPWM_Fault_3, &faultConfig);


/* Set PWM fault disable mapping for submodule 0/1/2 */

PWM_SetupFaultDisableMap(PWM2_BASEADDR, kPWM_Module_0kPWM_PwmAkPWM_faultchannel_0kPWM_FaultDisable_0 | kPWM_FaultDisable_1 | kPWM_FaultDisable_2 | kPWM_FaultDisable_3);

PWM_SetupFaultDisableMap(PWM2_BASEADDR, kPWM_Module_1kPWM_PwmAkPWM_faultchannel_0kPWM_FaultDisable_0 | kPWM_FaultDisable_1 | kPWM_FaultDisable_2 | kPWM_FaultDisable_3);

PWM_SetupFaultDisableMap(PWM2_BASEADDR, kPWM_Module_2kPWM_PwmAkPWM_faultchannel_0kPWM_FaultDisable_0 | kPWM_FaultDisable_1 | kPWM_FaultDisable_2 | kPWM_FaultDisable_3);

PWM_SetupFaultDisableMap(PWM2_BASEADDR, kPWM_Module_3kPWM_PwmAkPWM_faultchannel_0kPWM_FaultDisable_0 | kPWM_FaultDisable_1 | kPWM_FaultDisable_2 | kPWM_FaultDisable_3);


/* Sets up the PWM fault protection */

PWM_SetupFaults(PWM3_BASEADDR, kPWM_Fault_0, &faultConfig);

PWM_SetupFaults(PWM3_BASEADDR, kPWM_Fault_1, &faultConfig);

PWM_SetupFaults(PWM3_BASEADDR, kPWM_Fault_2, &faultConfig);

PWM_SetupFaults(PWM3_BASEADDR, kPWM_Fault_3, &faultConfig);


/* Set PWM fault disable mapping for submodule 0/1/2 */

PWM_SetupFaultDisableMap(PWM3_BASEADDR, kPWM_Module_0kPWM_PwmAkPWM_faultchannel_0kPWM_FaultDisable_0 | kPWM_FaultDisable_1 | kPWM_FaultDisable_2 | kPWM_FaultDisable_3);

PWM_SetupFaultDisableMap(PWM3_BASEADDR, kPWM_Module_1kPWM_PwmAkPWM_faultchannel_0kPWM_FaultDisable_0 | kPWM_FaultDisable_1 | kPWM_FaultDisable_2 | kPWM_FaultDisable_3);

PWM_SetupFaultDisableMap(PWM3_BASEADDR, kPWM_Module_2kPWM_PwmAkPWM_faultchannel_0kPWM_FaultDisable_0 | kPWM_FaultDisable_1 | kPWM_FaultDisable_2 | kPWM_FaultDisable_3);

PWM_SetupFaultDisableMap(PWM3_BASEADDR, kPWM_Module_3kPWM_PwmAkPWM_faultchannel_0kPWM_FaultDisable_0 | kPWM_FaultDisable_1 | kPWM_FaultDisable_2 | kPWM_FaultDisable_3);


/* Sets up the PWM fault protection */

PWM_SetupFaults(PWM4_BASEADDR, kPWM_Fault_0, &faultConfig);

PWM_SetupFaults(PWM4_BASEADDR, kPWM_Fault_1, &faultConfig);

PWM_SetupFaults(PWM4_BASEADDR, kPWM_Fault_2, &faultConfig);

PWM_SetupFaults(PWM4_BASEADDR, kPWM_Fault_3, &faultConfig);


/* Set PWM fault disable mapping for submodule 0/1/2 */

PWM_SetupFaultDisableMap(PWM4_BASEADDR, kPWM_Module_0kPWM_PwmAkPWM_faultchannel_0kPWM_FaultDisable_0 | kPWM_FaultDisable_1 | kPWM_FaultDisable_2 | kPWM_FaultDisable_3);

PWM_SetupFaultDisableMap(PWM4_BASEADDR, kPWM_Module_1kPWM_PwmAkPWM_faultchannel_0kPWM_FaultDisable_0 | kPWM_FaultDisable_1 | kPWM_FaultDisable_2 | kPWM_FaultDisable_3);

PWM_SetupFaultDisableMap(PWM4_BASEADDR, kPWM_Module_2kPWM_PwmAkPWM_faultchannel_0kPWM_FaultDisable_0 | kPWM_FaultDisable_1 | kPWM_FaultDisable_2 | kPWM_FaultDisable_3);

PWM_SetupFaultDisableMap(PWM4_BASEADDR, kPWM_Module_3kPWM_PwmAkPWM_faultchannel_0kPWM_FaultDisable_0 | kPWM_FaultDisable_1 | kPWM_FaultDisable_2 | kPWM_FaultDisable_3);



/* Configure the capture input of the PWM for one shot polling */

captureConfig.captureInputSel = true;

captureConfig.edge0 = kPWM_RiseAndFallEdge;

captureConfig.edge1 = kPWM_Disable;

captureConfig.enableOneShotCapture = false;

captureConfig.edgeCompareValue = 1;


PWM_SetupInputCapture(PWM1_BASEADDR, kPWM_Module_3kPWM_PwmA, &captureConfig);

PWM_SetupInputCapture(PWM2_BASEADDR, kPWM_Module_3kPWM_PwmA, &captureConfig);

PWM_SetupInputCapture(PWM3_BASEADDR, kPWM_Module_1kPWM_PwmA, &captureConfig);

PWM_SetupInputCapture(PWM4_BASEADDR, kPWM_Module_1kPWM_PwmA, &captureConfig);


PWM_SetPwmLdok(PWM1_BASEADDR, kPWM_Control_Module_3, true);

PWM_SetPwmLdok(PWM2_BASEADDR, kPWM_Control_Module_3, true);

PWM_SetPwmLdok(PWM3_BASEADDR, kPWM_Control_Module_1, true);

PWM_SetPwmLdok(PWM4_BASEADDR, kPWM_Control_Module_1, true);


PWM_StartTimer(PWM1_BASEADDR, kPWM_Control_Module_3);

PWM_StartTimer(PWM2_BASEADDR, kPWM_Control_Module_3);

PWM_StartTimer(PWM3_BASEADDR, kPWM_Control_Module_1);

PWM_StartTimer(PWM4_BASEADDR, kPWM_Control_Module_1);

}

Re: PWM Capturing on IMXRT1062 Stopped when the prescaler is set with a value different from kPWM_Pr

Hello,

there are several messages claiming that prescaler set to any value does not work, counter does not increase.
I have the same issue on mcPWM in mcf54415

Would be nice to know if anyone could have prescaler working, if there is a sequence that the datasheet is not mentioning. Or if it cannot work at all.

Tags (1)
No ratings
Version history
Last update:
3 weeks ago
Updated by: