VICの初期化

LPC2388のUser's Manualを読む限りでは、VICはリセット後には初期化が済んでおり、とくに触る必要は内容に思えます。しかし、本当にリセット後に初期化を行わない場合、割り込みの動作が不安定になります。したがって、初期化は必須です。

  1. VICIntEnClr = 0xFFFFFFFF; /* すべての割り込みを禁止 */
  2. VICSoftIntClear = 0xFFFFFFFF; /* すべてのソフト割り込みをクリア */
  3. VICIntSelect = 0; /* すべての割り込みをIRQにする */
  4. VICAddress = 0; /* レジスタクリア */

特にVICAddressに0(任意の値でいい)を書き込むのは重要です。User's ManualではVICAddressへの書き込みは「割り込みハンドラから返ったときだけ」に制限されており、それ以外の場合には書くなと明確に禁止されています。しかし、リセット後に書き込まない場合は動作が不定になります。