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_0, kPWM_PwmA, kPWM_faultchannel_0, kPWM_FaultDisable_0 | kPWM_FaultDisable_1 | kPWM_FaultDisable_2 | kPWM_FaultDisable_3); PWM_SetupFaultDisableMap(PWM1_BASEADDR, kPWM_Module_1, kPWM_PwmA, kPWM_faultchannel_0, kPWM_FaultDisable_0 | kPWM_FaultDisable_1 | kPWM_FaultDisable_2 | kPWM_FaultDisable_3); PWM_SetupFaultDisableMap(PWM1_BASEADDR, kPWM_Module_2, kPWM_PwmA, kPWM_faultchannel_0, kPWM_FaultDisable_0 | kPWM_FaultDisable_1 | kPWM_FaultDisable_2 | kPWM_FaultDisable_3); PWM_SetupFaultDisableMap(PWM1_BASEADDR, kPWM_Module_3, kPWM_PwmA, kPWM_faultchannel_0, kPWM_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_0, kPWM_PwmA, kPWM_faultchannel_0, kPWM_FaultDisable_0 | kPWM_FaultDisable_1 | kPWM_FaultDisable_2 | kPWM_FaultDisable_3); PWM_SetupFaultDisableMap(PWM2_BASEADDR, kPWM_Module_1, kPWM_PwmA, kPWM_faultchannel_0, kPWM_FaultDisable_0 | kPWM_FaultDisable_1 | kPWM_FaultDisable_2 | kPWM_FaultDisable_3); PWM_SetupFaultDisableMap(PWM2_BASEADDR, kPWM_Module_2, kPWM_PwmA, kPWM_faultchannel_0, kPWM_FaultDisable_0 | kPWM_FaultDisable_1 | kPWM_FaultDisable_2 | kPWM_FaultDisable_3); PWM_SetupFaultDisableMap(PWM2_BASEADDR, kPWM_Module_3, kPWM_PwmA, kPWM_faultchannel_0, kPWM_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_0, kPWM_PwmA, kPWM_faultchannel_0, kPWM_FaultDisable_0 | kPWM_FaultDisable_1 | kPWM_FaultDisable_2 | kPWM_FaultDisable_3); PWM_SetupFaultDisableMap(PWM3_BASEADDR, kPWM_Module_1, kPWM_PwmA, kPWM_faultchannel_0, kPWM_FaultDisable_0 | kPWM_FaultDisable_1 | kPWM_FaultDisable_2 | kPWM_FaultDisable_3); PWM_SetupFaultDisableMap(PWM3_BASEADDR, kPWM_Module_2, kPWM_PwmA, kPWM_faultchannel_0, kPWM_FaultDisable_0 | kPWM_FaultDisable_1 | kPWM_FaultDisable_2 | kPWM_FaultDisable_3); PWM_SetupFaultDisableMap(PWM3_BASEADDR, kPWM_Module_3, kPWM_PwmA, kPWM_faultchannel_0, kPWM_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_0, kPWM_PwmA, kPWM_faultchannel_0, kPWM_FaultDisable_0 | kPWM_FaultDisable_1 | kPWM_FaultDisable_2 | kPWM_FaultDisable_3); PWM_SetupFaultDisableMap(PWM4_BASEADDR, kPWM_Module_1, kPWM_PwmA, kPWM_faultchannel_0, kPWM_FaultDisable_0 | kPWM_FaultDisable_1 | kPWM_FaultDisable_2 | kPWM_FaultDisable_3); PWM_SetupFaultDisableMap(PWM4_BASEADDR, kPWM_Module_2, kPWM_PwmA, kPWM_faultchannel_0, kPWM_FaultDisable_0 | kPWM_FaultDisable_1 | kPWM_FaultDisable_2 | kPWM_FaultDisable_3); PWM_SetupFaultDisableMap(PWM4_BASEADDR, kPWM_Module_3, kPWM_PwmA, kPWM_faultchannel_0, kPWM_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_3, kPWM_PwmA, &captureConfig); PWM_SetupInputCapture(PWM2_BASEADDR, kPWM_Module_3, kPWM_PwmA, &captureConfig); PWM_SetupInputCapture(PWM3_BASEADDR, kPWM_Module_1, kPWM_PwmA, &captureConfig); PWM_SetupInputCapture(PWM4_BASEADDR, kPWM_Module_1, kPWM_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.
查看全文