2222200_ja-JP

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

2222200_ja-JP

2222200_ja-JP

IMXRT1062のPWMキャプチャは、プリスケーラがkPWM_Prescaと異なる値に設定されている場合に停止します。

こんにちは、

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 );

}

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

こんにちは、

プリスケーラを任意の値に設定しても機能せず、カウンターが増加しないというメッセージがいくつか報告されています。
mcf54415のmcPWMでも同じ問題が発生しています。

もしデータシートに記載されていないシーケンスがあれば、プリスケーラーを動作させることができる方がいれば教えてほしいです。あるいは全く機能しないのかもしれません。

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