私はクロック周波数が 40MHz の PIT を使用しており、その PIT は 400kHz でトリガーを取得する必要がある他の関数 abc() をトリガーするために使用しています。ただし、周波数を 80kHz 以上に設定しようとすると、PIT のコールバックがトリガーを受信せず、最終的に関数 abc() がトリガーを受信しません。
私の質問は、PIT では 80kHz を超えることができないという制限があるのでしょうか、それとも 80kHz を超えるトリガー周波数にするにはマイクロコントローラで何かをアクティブ化する必要があるのでしょうか、あるいは何か他のものがあるのでしょうか。
マイクロコントローラ:- S32K344 T-172
よろしくお願いします。
こんにちは、
現時点ではこれ以上の意見は述べないつもりです。2 つのペリフェラルがあり、どちらも割り込みを生成しています。各割り込みコールバック内で、いくつかの計算を実行します。割り込み優先度、レイテンシ、および継続時間が、観察されている問題に影響していると思われます。
たとえば、ピンのトグルを使用して各割り込みの持続時間を測定してみてください。また、割り込みの優先順位も確認してください。両方が同じレベルに設定されている場合、eMIOS の IRQ 番号は BCTU よりも低く、優先度が高くなることに注意してください。より高い周波数と、潜在的に長い ISR 実行時間の組み合わせにより、BCTU 割り込みが遅延したり、見逃されたりする可能性があります。
BR、ペトル
ナムステ@PetrS
はい、あなたの言いたいことは理解しました。
対照的に
わかりました。もう一度試してみます。
私はアルゴリズム内の 1 つの計算をトリガーするために Emios_Gpt を使用しており、同じアルゴリズム内の別の計算をトリガーするために BCTU を使用しています。
ここで、BCTU コールバック トリガーを 20kHz 周波数 (50uSec) で実行したいのですが、これは可能ですが、Emios_Gpt を 114kHz 以下でトリガーしているときは実行できません。
しかし、Emios_Gpt のコールバックをより高い頻度でトリガーしようとすると、BCTU はより低い頻度でトリガーを受信します。
Emios_Gpt の周波数を 80kHz 以上に上げると、PIT でも同じことが起こります。
理由:これらが個別のペリフェラルであるのに、なぜ互いに干渉し合うのか理解できません。
よろしくお願いします。
ペトルS
こんにちは、
アプリケーションのデザインについてはよくわかりません。ペリフェラルの使用方法、SW または HW トリガーが利用される場所。BCTU は eMIOS からの HW によってトリガーされる可能性があるため、トリガーが失われることはありません。PIT には入力トリガーがなく、SW によって開始/停止できます。SO、SW 開始を行う場合は、SW レイテンシにも同じことが適用されます。
BR、ペトル
ナムステ@PetrS
ご返信とご提案ありがとうございます。
ここでは、 Emios_Gpt を使用してこの問題を解決しようとしました。これにより、abc() 関数をより高い頻度でトリガーできるようになりました。
しかし、私は次の 1 つの新たな問題に遭遇しています: - Emios_Gpt モジュールを高頻度でトリガーすると、使用可能な BCTU モジュールと PIT モジュールがトリガーを受信しません。
しかし、EMIOS_Gpt の周波数が低いときは、BCTU と PIT は両方とも正常に動作します。
ここでは、BCTU と PIT に EMIOS_0 が使用されています。
EMIOS_1 は EMIOS_Gpt モジュールに使用されています。
ここで優先順位を変更しましたが、まだ効果はありません。
それをショートさせる何か方法はCANでしょうか?
こんにちは、
これはおそらく PIT 自体ではなく、CPU または割り込み処理の制限。周波数が高い場合、CPU が割り込みレートに追いつけない可能性があります。80 kHz では割り込み周期は12.5 μ s です。これにより、CPU が割り込みを処理する時間が長くなります。400kHz(2.5µs)では、CPUは 特に ISR が最適化されていない場合は、圧倒されてしまいます。
以下にいくつかの提案を示します。
- ISR を最適化します (短く保ちます)。
- 可能であれば、関数にハードウェア トリガー (DMA やタイマー出力など) を使用します。
- 割り込み優先度を確認します。
- プロジェクトのコード最適化レベルを高く設定する
BR、ペトル