割込みハンドラのプログラミングは、割込み実現の形式にいろいろなバリエーションがあるので、回路図を呼んで各コントローラの割込み出力線がどのようにCPUにつながっているかを見て行う必要があるようです。
①IRQが複数存在する仕組み
IRQ0~IRQ3が4つも用意されていて割込みに対してリッチな仕組みになっています。

ピンとコントローラは1対1で、ピンごとに割込みベクタが用意できるようなので、コントローラ専用の割込み管理をする場合に向いているようです。
(割込みベクタは後述しますが割込みに対してどんな処理を実施するか関数アドレスの対応付けがされている部分でそれを複数管理できるために配列になっているところ)
あるコントローラから割込みがある場合に、別の割込みを受け付けないなど、割込みに対して優先度をつける設計に向いているようです。
②IRQが1本でOR論理で統合する仕組み
IRQが1つだけあり、そのIRQにはOR論理で複数のコントローラからの割込み出力が統合されている仕組みになります。

どこかのコントローラで割込み出力がされればIRQが割込みすると検知できるわけですが、漠然と割込みがあるんだなと把握できるだけで、どこのコントローラからの要求でどんな割込みを実施するかが分かりません。
そのようなときは、とりあえず割込み処理として最初に各コントローラで用意している割込み関連のレジスタを参照しにいきハンドラ内部で割込み要因を調べる必要があります。
割込み要因が判明したあと、割込み要因に対応した処理を実施します。
いわば、①割込み要因調査、②要因に対応した処理実施の2段階で処理を実施することになります。
③IRQが1本で割込みコントローラで統合する仕組み

②と系と似ていますが、OR論理のところが割込みコントローラになっています。
割込みコントローラは、内部にレジスタを持ちどのコントローラからの割込み出力がされたかを記憶することができるので、②のようにコントローラに割込みあると聞きまわらないで済むところがメリットとしてあります。
割込みの要求のあるコントローラントの判定は割込みコントローラを備えたことで分かるのですが、割込みの詳細の理由はコントローラの割込み関連のレジスタに聞きに行く必要があるようです。
その他に割込みコントローラを持つメリットとしては、各割込みの有効/無効化(割込みマスク)や優先度の制御を実施でき、それらを一元管理できるところです。
①IRQが複数存在する仕組み
IRQ0~IRQ3が4つも用意されていて割込みに対してリッチな仕組みになっています。

ピンとコントローラは1対1で、ピンごとに割込みベクタが用意できるようなので、コントローラ専用の割込み管理をする場合に向いているようです。
(割込みベクタは後述しますが割込みに対してどんな処理を実施するか関数アドレスの対応付けがされている部分でそれを複数管理できるために配列になっているところ)
あるコントローラから割込みがある場合に、別の割込みを受け付けないなど、割込みに対して優先度をつける設計に向いているようです。
②IRQが1本でOR論理で統合する仕組み
IRQが1つだけあり、そのIRQにはOR論理で複数のコントローラからの割込み出力が統合されている仕組みになります。

どこかのコントローラで割込み出力がされればIRQが割込みすると検知できるわけですが、漠然と割込みがあるんだなと把握できるだけで、どこのコントローラからの要求でどんな割込みを実施するかが分かりません。
そのようなときは、とりあえず割込み処理として最初に各コントローラで用意している割込み関連のレジスタを参照しにいきハンドラ内部で割込み要因を調べる必要があります。
割込み要因が判明したあと、割込み要因に対応した処理を実施します。
いわば、①割込み要因調査、②要因に対応した処理実施の2段階で処理を実施することになります。
③IRQが1本で割込みコントローラで統合する仕組み

②と系と似ていますが、OR論理のところが割込みコントローラになっています。
割込みコントローラは、内部にレジスタを持ちどのコントローラからの割込み出力がされたかを記憶することができるので、②のようにコントローラに割込みあると聞きまわらないで済むところがメリットとしてあります。
割込みの要求のあるコントローラントの判定は割込みコントローラを備えたことで分かるのですが、割込みの詳細の理由はコントローラの割込み関連のレジスタに聞きに行く必要があるようです。
その他に割込みコントローラを持つメリットとしては、各割込みの有効/無効化(割込みマスク)や優先度の制御を実施でき、それらを一元管理できるところです。