CPU実験室

誰も見向きもしない古いCPUをいじって動かしてみようというプロジェクトです

割込み確認

いままで初めて手にしたCPUでボードを開発するときにはだいたいこんなステップで進めていました

  ①最小永久ループ(jump $)

  ②LEDチカチカ

  ③メモリアクセスチェック

  ④シリアル入出力

  ⑤モニタ搭載

  ⑥内蔵/外付けペリフェラル確認

  ⑦割込み

  ⑧C言語化(コンパイラがあれば)

  ⑨浮動小数点演算

  ⑩より高度な固有機能確認(DMAとかプロテクトモードとか)

このなかで⑦割込みはだいたいすっ飛ばしていることが多いようです。というのは割込みを使わずともそれなりに動作するプログラムは書ける、割込みの機構が複雑であちらこちらに設定が必要、割込みテーブルの領域が既にROM化されていて内容をいじれない・・・ということもありちょっと避けて通っていました

ですが確認できればやっておいた方がいいわけで⑤モニタ搭載までできて安心して放置していたAm29030ボードで割込みを考えてみます

まず、関連する内部レジスタですが、ベクタテーブルの先頭アドレスを示すVABレジスタ・・これがあるのでモニタがROM化してあっても大丈夫・・割込み許可フラグを含むCPSレジスタ。あとAm29030は24bit長のタイマを内蔵していてこれを割込み要因にしてみます。タイマには2個の制御レジスタがありカウンタ値を持つTMCレジスタ、リロード値、制御ビットを持つTMRレジスタ、とこんなところです

 

f:id:O3I:20210805184353j:plain

 

 これらのレジスタをセットするテストプログラムをざっと書いてみました。設定値はまだ検討の余地があります。メインループは特定の汎用レジスタの内容を繰り返しパラレルLEDに出力するだけとなっています。

f:id:O3I:20210805184426j:plain

 ここで要注意は2行目にある疑似命令SUPMODE ONです。Am29kでは割込み関係の命令は特権命令になっいて、この疑似命令でスーパバイザモードであることをASSUMEしておかないとVABCPSレジスタの設定のところでアセンブル時にワーニングが出てしまいます