こんにちはヘルパー
私はS32K358マルチコアを使用しています。
入出力割り込みにEirqを使用します。
質問があります:
core0にはeirq0を、core2にはeirq1を使用させたい。
しかし、2つのIRQチャネルは同じIRQハンドラーをトリガーしますSIUL2_EXT_IRQ_0_7_ISR
SO there is the problem.eirq0とeirq1の両方が来た場合。両方のコアトリガー
こんにちは、 @Licunhao さん。
あなたの理解は部分的に正しいです。
S32K3デバイスでは、SIUL2外部割り込み入力は割り込みベクタにグループ化されます。したがって、EIRQ0とEIRQ1は同じ割り込みグループに属し、例えばSIUL2_EXT_IRQ_0_7_ISRのような同じグループ化された割り込みハンドラによって処理されます。
したがって、EIRQ0とEIRQ1は完全に独立した割り込みベクトルとしては使えません。
同じSIUL2割り込みグループが複数のコアでルーティングまたは有効化されている場合、両方のコアが同じ割り込みハンドラに入り、同じSIUL2レジスタにアクセスすることがあります。これにより、ソフトウェアが適切なマルチコア同期やSIUL2割り込みグループの所有権を実装しない場合、予期せぬ挙動を引き起こすことがあります。
しかし、SIUL2割り込みフラグは個々のEIRQチャネルごとに依然として利用可能です。正しい割り込みハンドラは、どのEIRQフラグが保留中かを確認し、対応するフラグビットのみをクリアする必要があります。ステータスフラグはグローバルにクリアされるべきでなければならず、誤ったマスクで解除されるべきではありません。そうでなければ、別の保留中のEIRQフラグに影響が出る可能性があります。
マルチコアアプリケーションには、以下のいずれかのアプローチをお勧めします:
例えば、EIRQ0からEIRQ7までのSIUL2割り込みグループ全体を1つのコアにのみ割り当てます。このコアはグループ化されたISRを処理し、必要に応じてソフトウェアやコア間通信で他のコアに通知します。
異なるコアに独立した割り込みルーティングが必要な場合は、異なるSIUL2割り込みグループのEIRQチャネルを使用してください。例えば、EIRQ0からEIRQ7への1チャネルとEIRQ8からEIRQ15への別のチャネルなどです。これはピン設定で可能であれば可能です。
両方のコアが同じSIUL2レジスタにアクセスする必要がある場合、適切なマルチコア同期機構によってアクセスが保護されなければなりません。しかし一般的に、SIUL2割り込みグループの単一所有者モデルの方がクリーンで安全です。
よろしくお願いいたします。
パベル