こんにちは、
4 つの PWM ペリフェラルのいずれかのクロック パースケーラーを kPWM_Prescale_Divide_1 以外の値で構成すると、選択した PWM ペリフェラルのカウンターがまったく動作しないという問題が発生しました。
私はimxrt1062プロセッサとMCUXpresso IDE v11.9.1を使用しています。
できるだけ早くサポートしていただければ幸いです。
以下は、PWM ペリフェラルを設定および初期化するコードの一部です。
静的 空所 pwm_init ( void )
{
pwm_config_t pwmConfig;
pwm_input_capture_param_tキャプチャ設定;
pwm_fault_param_t障害構成;
/* PWMのデフォルト設定を読み取る */
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);
// 障害構成
PWM_FaultDefaultConfig(&faultConfig);
/* PWM障害保護を設定します */
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);
/* サブモジュール0/1/2のPWM障害無効化マッピングを設定する */
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 );
/* PWM障害保護を設定します */
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);
/* サブモジュール0/1/2のPWM障害無効化マッピングを設定する */
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 );
/* PWM障害保護を設定します */
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);
/* サブモジュール0/1/2のPWM障害無効化マッピングを設定する */
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 );
/* PWM障害保護を設定します */
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);
/* サブモジュール0/1/2のPWM障害無効化マッピングを設定する */
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 );
/* ワンショットポーリング用のPWMのキャプチャ入力を設定します */
キャプチャConfig.captureInputSel = true;
キャプチャ構成。エッジ0 = kPWM_RiseAndFallEdge ;
キャプチャーConfig.edge1 = kPWM_Disable ;
キャプチャ設定。enableOneShotCapture = false;
キャプチャ構成。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 );
}
こんにちは、
プリスケーラを任意の値に設定しても機能せず、カウンターが増加しないというメッセージがいくつか報告されています。
mcf54415のmcPWMでも同じ問題が発生しています。
もしデータシートに記載されていないシーケンスがあれば、プリスケーラーを動作させることができる方がいれば教えてほしいです。あるいは全く機能しないのかもしれません。