VIC が外部割り込みを効率的に処理する方法を知りたい
1 に答える
少し背景(「arm7」とタグ付けしたので、おそらくこの質問はCortex NVICなどに関するものではありません.. )
当初、ARM プロセッサは、通常の割り込み (IRQ) と高速割り込み (FIQ) の 2 種類の割り込みをサポートしていました。CPU に割り込む可能性のある各ペリフェラルは、IRQ または FIQ のいずれかをトリガーします。IRQ には単一のベクトルがあり、FIQ には単一のベクトルがあります。
周辺機器から IRQ/FIQ へのマッピングがハードウェアで行われる場合もあれば、構成可能な場合もあります。しかし重要なのは、2 つ以上のペリフェラル割り込みがあるとすぐに、割り込みベクトルを共有する必要があるということです。つまり、3 つの割り込みソースがある場合、IRQ または FIQ の少なくとも 1 つが複数のデバイスで使用されることが保証されます。これは、割り込みを受けたときに、「ポーリング」(通常はハードウェア レジスタ) を行って、「なぜ私がここにいるのか? 誰が私に割り込んだのか?」 を調べる必要があることを意味します。
VIC の全体的な考え方は、各割り込みに独自のベクターがあるため、その割り込みスロットにベクターすると、誰が割り込みを行っているかを正確に知ることができます。投票なし 「OK、誰が私を邪魔したの?」
ARMのサイトには、構成情報、レジスタ定義、ネストされた/優先順位付けされた割り込みなど、ARM VIC(およびその多くのバリアント)に関するより多くの情報がありますが、あなたの質問は、VICが効率的に割り込みを処理する方法について具体的に尋ねました。その機能のすべての詳細を説明することは、この質問の範囲外です.
(私は「効率的に」を「できるだけ少ないポーリング/問い合わせで」と解釈しました。VIC でもサポートされている優先順位付き割り込みは、優先順位の高い割り込みの待ち時間を短縮し、「より効率的」と見なされる可能性があることに注意してください。 「誰が私を邪魔したの?」と投票する必要がないのと同じカテゴリーには入れません)。
Primecell VIC の詳細については、ARM のサイトを参照してください。