VICによる割り込みベクトル

LPC2388のVICは32の割り込み要因ごとにジャンプ・アドレスを与えることが出来ます。しかし、ARM7TDMIコアはIRQに対してひとつのジャンプ・アドレスしか持つことが出来ません。いったいどうするのかと思っていたら、単にソフトウェアによる処理でした。
VICは割り込みが発生すると、進行中の割り込み順位、発生した割り込み順位、ソフトウェアによるマスクをハードウェアで比較して、もっとも優先順位の高い割り込みを選びます。そして、ARM7TDMIコアに割り込みの発生を通知する一方で、最も高い優先順位の割り込みに関連付けられたジャンプ・アドレスを、VICAddressレジスタに表示します。これを割り込みハンドラの中で読み込んでジャンプするという仕掛けです。うまい。
割り込みハンドラから抜け出る前にこのレジスタに書き込みを行わなければなりません。この書き込みはVICによってアクノレッジとして解釈され、次の割り込みの処理に移ります。書き込む値は無視されるので何でもかまいません。

/* -----codeの行番号----- */