こんにちは、
私はNRF23L01トランシーバを搭載した6枚のFRDM-K64Fボードを使った無線ネットワークの実験を行っています。
1秒を10のタイムスロットに分割しています。つまり、スロット1の送信はタイムスロット2で繰り返され、タイムスロット2はタイムスロット3に繰り返される、という中継の目的です。
PITを使って100ms間隔で割り込みを発生させており、スコープで確認しています。
リビジョンC、F、Fの3枚の基板では正常に動作しており、データが無線で繰り返し送信されているのを確認しています。しかし、3つのリビジョンF1ボードでは、送信ルーチンがタイムスロット1が回ってくるのを待ってハングアップしてしまいます。割り込みが発生しません!
例えば、Rev FとRev F1の間で何が変わったことで、このような挙動が引き起こされたのか、ご存知の方はいらっしゃいますか?
これが私の初期化ルーチンです。
SIM->SCGC6 |= SIM_SCGC6_PIT_MASK; // PIT のクロックをオンにするPIT- > MCR = 0x1; // PIT タイマーを有効にする
PIT>チャネル[0]。LDVAL = 5999999; リロード値を100mSに設定
PIT->チャネル[0].TCTRL = 0x03; // Turn PIT timer 0 on, interrupts on
そして主な内容は:
NVIC_EnableIRQ(PIT0_IRQn); // PIタイマー、ch 0割り込みを有効にする
そしてISR:
void PIT0_IRQHandler ( void )
{
/* 割り込みフラグをクリアする */
ピット・>チャネル[0]。TFLG = PIT_TFLG_TIF_MASK;
NVIC_ClearPendingIRQ( PIT0_IRQn ); // 保留中のPIタイマー、 ch 0割り込みをクリアします
//scope_trigger();
time_lot +=1;
if (time_slot > 10) time_slot = 0;
__DSB(); ARM の訂正 838869を追加し、Cortex-M4に影響します
}
どんな助けでもありがたいです!
乾杯
ナイジェル
ああ!ありがとうございます。はい、そのマスクは3つのチップすべてに付いています。これまでとても役に立ったあなたのAIエンジンがそれを出さなかったのは驚きです!何か代替策はありますか?遅延か、それとも失敗か?はい、 PIT->MCR = 0x1; は別の行にあるべきで、
こんにちは、 @ve3id さん。
投稿ありがとうございます!
e7914があなたのMCUに適用されているか確認してください:Kinetis_K_1N83J.pdf
FRDM-K64F REV F1でテストしましたが動作しました。SDK 2.11.0とMCUXpresso IDE 25.06を使っていました。
また、共有したコードの中で「PIT->MCR = 0x1;」がSCGC6のイネーブルメントにコメントとして含まれているのに気づきましたが、投稿中のタイプミスかどうか確認したいだけです
こんにちは、 @ve3id さん。
正誤表に記載されている回避策は、PIT_MCRレジスタに書き込む前に、そのレジスタを読み取ることです。
私はPITのSDK例をベースにして、FRDM REV F1で何をしているかをテストしています。以下のように修正しました
carlos_o_0-1790096350978.png
問題なく動作します。