2131736_ja-JP

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

2131736_ja-JP

2131736_ja-JP

FRDM-MCXN947ボードでのSCTIMER割り込みの使用

NXPコミュニティの皆様

現在、搭載 SCTIMER ペリフェラルを使用したプログラムを開発しています。SCTIMER を使用して状態実装の 3 番目の状態で CTIMER0 ペリフェラルを起動し、PWM 信号を生成するように試みています。この PWM 信号は GPIO ピンにルーティングされます。これを実現するには、3 番目の状態に割り込みを実装して、その状態で CTIMER0 を具体的に開始する必要があります。しかし、私はあまり経験がないので、このような割り込みのプログラミングには苦労します。助けてくれませんか?

現在作業中のコードは以下の通りです。

void SCT0_IRQHandler ( void )

{

SCTIMER_EventHandleIRQ(SCT0_PERIPHERAL);


// SCTIMERが状態2に達したときのみCTIMERを開始する

CTIMER_StartTimer(CTIMER0_PERIPHERAL);

PRINTF( "CTIMER は SCTIMER 状態 2 イベント情報から開始されました。\r\n" );


}


静的void SCT0_init ( void ) {

CTIMER0_init();

SCTIMER_Init(SCT0_PERIPHERAL、&SCT0_initConfig);

/* NVICで割り込みSCT0_IRQN要求を有効にする */

/* 状態0の初期化 */

SCTIMER_SetupPwm(SCT0_PERIPHERAL、&SCT0_pwmSignalsConfig[0]、 kSCTIMER_EdgeAlignedPwm 、100U、SCT0_CLOCK_FREQ、&SCT0_pwmEvent[0]);

SCTIMER_SetupPwm(SCT0_PERIPHERAL、&SCT0_pwmSignalsConfig[2]、 kSCTIMER_EdgeAlignedPwm 、100U、SCT0_CLOCK_FREQ、&SCT0_pwmEvent[2]);

SCTIMER_CreateAndScheduleEvent(SCT0_PERIPHERAL、 kSCTIMER_OutputRiseEvent 、0、 kSCTIMER_Out_0 kSCTIMER_Counter_U 、&SCT0_event[0]);

SCTIMER_SetupNextStateAction(SCT0_PERIPHERAL、1、SCT0_イベント[0]);

SCTIMER_IncreaseState(SCT0_PERIPHERAL);

/* 状態1の初期化 */

/* PWMの周期イベント情報をスケジュールする */

SCTIMER_スケジュールイベント(SCT0、SCT0_pwmイベント[0]);

/* PWMのパルスイベント情報をスケジュールする */

SCTIMER_スケジュールイベント(SCT0、SCT0_pwmイベント[0] + 1);

SCTIMER_SetupPwm(SCT0_PERIPHERAL、&SCT0_pwmSignalsConfig[1]、 kSCTIMER_EdgeAlignedPwm 、100U、SCT0_CLOCK_FREQ、&SCT0_pwmEvent[1]);

SCTIMER_CreateAndScheduleEvent(SCT0_PERIPHERAL、 kSCTIMER_OutputRiseEvent 、0、 kSCTIMER_Out_0 kSCTIMER_Counter_U 、&SCT0_event[1]);

SCTIMER_SetupNextStateAction(SCT0_PERIPHERAL、2、SCT0_イベント[1]);

SCTIMER_IncreaseState(SCT0_PERIPHERAL);

/* 状態2の初期化 */

/* PWMの周期イベント情報をスケジュールする */

SCTIMER_スケジュールイベント(SCT0、SCT0_pwmイベント[0]);

/* PWMのパルスイベント情報をスケジュールする */

SCTIMER_スケジュールイベント(SCT0、SCT0_pwmイベント[0] + 1);


SCTIMER_SetupPwm(SCT0_PERIPHERAL、&SCT0_pwmSignalsConfig[3]、 kSCTIMER_EdgeAlignedPwm 、100U、SCT0_CLOCK_FREQ、&SCT0_pwmEvent[3]);


SCTIMER_CreateAndScheduleEvent(SCT0_PERIPHERAL、 kSCTIMER_OutputRiseEvent 、0、 kSCTIMER_Out_0 kSCTIMER_Counter_U 、&SCT0_event_startCTimer);

SCTIMER_SetCallback(SCT0_PERIPHERAL、SCT0_IRQHandler、SCT0_event_startCTimer);

IRQを有効にする( SCT0_IRQn );


}


下の図は開始時の波形を示しています。目標は、黄色の PWM 信号の 4 番目の立ち上がりエッジで青色の PWM 信号を開始することです。
Starting_Process_SCT_CT.png


クロック|タイマー開発ボードMCX NRe: SCTIMER Interupt Usage on FRDM-MCXN947 board

こんにちは@Kevin_Pang

あなたが経験している問題は次のThreadで議論されているようです。ZhangJennie が提供した提案に従って、問題の解決に役立つかどうかを確認することをお勧めします。

BR
ハビブ

Re: SCTIMER Interupt Usage on FRDM-MCXN947 board

親愛なるハビブ様

基本的な SDK の例を実行しようとしましたが、同じエラーが発生します。

敬具、

ケビン

Re: SCTIMER Interupt Usage on FRDM-MCXN947 board

こんにちは@Kevin_Pang

「hello_world」などの SDKs サンプルの 1 つを実行して、例外がコードによって発生したのか、ボード固有のものなのかを判断していただけますか?
BR
ハビブ

Re: SCTIMER Interupt Usage on FRDM-MCXN947 board

親愛なるハビブ様

お問い合わせいただきありがとうございます。

現在、開発ボードに問題が発生しています。その結果、プロジェクトをデバッグしようとすると、「プローブが開いていません」というエラーとともに「プローブ インデックス 1 を開けません」という例外が発生します。その後、コアとの接続に失敗します。これは、私の設定に何の変更もないのに突然起こりました。この問題の解決を手伝ってもらえますか?

敬具、
ケビン・パン

Re: SCTIMER Interupt Usage on FRDM-MCXN947 board

こんにちは@Kevin_Pang
問題が解決してよかったです。何かお手伝いできることがございましたら、お知らせください。
BR
ハビブ

Re: SCTIMER Interupt Usage on FRDM-MCXN947 board

問題解決:

割り込みを正しくプログラムするための解決策はすでに見つけました。コードの実装を以下に示します (CTIMER init は示されていません)。

void SCT0_IRQHandler ( void )

{

SCTIMER_EventHandleIRQ(SCT0_PERIPHERAL);


}


void Start_CTIMER ( void )

{

// SCTIMERが状態2に達したときのみCTIMERを開始する

CTIMER_StartTimer(CTIMER0_PERIPHERAL);

PRINTF( "CTIMER は SCTIMER 状態 2 イベント情報から開始されました。\r\n" );

}


const sctimer_config_t SCT0_initConfig = {

.enableCounterUnify = true、

.clockMode = kSCTIMER_System_ClockMode

.clockSelect = kSCTIMER_Clock_On_Rise_Input_0

.enableBidirection_l = false、

.enableBidirection_h = false、

.prescale_l = 0U、

.prescale_h = 0U、

.outInitState = 0U、

.inputsync = 0U

};

const sctimer_pwm_signal_param_t SCT0_pwmSignalsConfig[4] = {

{

.出力 = kSCTIMER_Out_0

.level = kSCTIMER_HighTrue

.dutyCyclePercent = 50U

},

{

.出力 = kSCTIMER_Out_1

.level = kSCTIMER_HighTrue

.dutyCyclePercent = 100U

},

{

.出力 = kSCTIMER_Out_1

.level = kSCTIMER_HighTrue

.dutyCyclePercent = 0U

},

{

.出力 = kSCTIMER_Out_1

.level = kSCTIMER_HighTrue

.dutyCyclePercent = 0U

}

};

uint32_t SCT0_pwmイベント[4];

uint32_t SCT0_イベント[4];

uint32_t SCT0_event_startCTimer;



静的void SCT0_init ( void ) {


SCTIMER_Init(SCT0_PERIPHERAL、&SCT0_initConfig);

/* NVICで割り込みSCT0_IRQN要求を有効にする */

/* 状態0の初期化 */

SCTIMER_SetupPwm(SCT0_PERIPHERAL、&SCT0_pwmSignalsConfig[0]、 kSCTIMER_EdgeAlignedPwm 、100U、SCT0_CLOCK_FREQ、&SCT0_pwmEvent[0]);

SCTIMER_SetupPwm(SCT0_PERIPHERAL、&SCT0_pwmSignalsConfig[2]、 kSCTIMER_EdgeAlignedPwm 、100U、SCT0_CLOCK_FREQ、&SCT0_pwmEvent[2]);

SCTIMER_CreateAndScheduleEvent (SCT0_PERIPHERAL、 kSCTIMER_OutputRiseEvent 、0、 kSCTIMER_Out_0 kSCTIMER_Counter_U 、&SCT0_event[0]);

SCTIMER_SetupNextStateAction(SCT0_PERIPHERAL、1、SCT0_イベント[0]);

SCTIMER_IncreaseState(SCT0_PERIPHERAL);

/* 状態1の初期化 */

/* PWMの周期イベント情報をスケジュールする */

SCTIMER_スケジュールイベント(SCT0、SCT0_pwmイベント[0]);

/* PWMのパルスイベント情報をスケジュールする */

SCTIMER_スケジュールイベント(SCT0、SCT0_pwmイベント[0] + 1);

SCTIMER_SetupPwm(SCT0_PERIPHERAL、&SCT0_pwmSignalsConfig[1]、 kSCTIMER_EdgeAlignedPwm 、100U、SCT0_CLOCK_FREQ、&SCT0_pwmEvent[1]);

SCTIMER_CreateAndScheduleEvent (SCT0_PERIPHERAL、 kSCTIMER_OutputRiseEvent 、0、 kSCTIMER_Out_0 kSCTIMER_Counter_U 、&SCT0_event[1]);

SCTIMER_SetupNextStateAction(SCT0_PERIPHERAL、2、SCT0_イベント[1]);

SCTIMER_IncreaseState(SCT0_PERIPHERAL);

/* 状態2の初期化 */

/* PWMの周期イベント情報をスケジュールする */

SCTIMER_スケジュールイベント(SCT0、SCT0_pwmイベント[0]);

/* PWMのパルスイベント情報をスケジュールする */

SCTIMER_スケジュールイベント(SCT0、SCT0_pwmイベント[0] + 1);


SCTIMER_SetupPwm(SCT0_PERIPHERAL、&SCT0_pwmSignalsConfig[3]、 kSCTIMER_EdgeAlignedPwm 、100U、SCT0_CLOCK_FREQ、&SCT0_pwmEvent[3]);


SCTIMER_CreateAndScheduleEvent (SCT0_PERIPHERAL、 kSCTIMER_OutputRiseEvent 、0、 kSCTIMER_Out_0 kSCTIMER_Counter_U 、&SCT0_event_startCTimer);

SCTIMER_SetCallback(SCT0_PERIPHERAL、Start_CTIMER、SCT0_event_startCTimer);

SCTIMER_EnableInterrupts(SCT0、(1U << SCT0_event_startCTimer));


IRQを有効にする( SCT0_IRQn );


}

Kevin_Pang_0-1752496755589.png

 

Tags (1)
No ratings
Version history
Last update:
‎11-21-2025 06:46 PM
Updated by: