CPU実験室

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

割込み処理

uPD78C10でタイマ割込みをおこなうユーザプログラムを書いてみました。

モニタROM内に置いたベクタテーブルによりタイマ割込みIRQ1が発生するとアプリケーション内の0x2008に飛ばしているので0x2008から割込みハンドラintrを記述しています。ここではCレジスタをインクリメントのみとしました。

一方、最初起動するmainルーチンではタイマのモード設定:8ビットタイマ2本を連結し16ビットとし、クロックソースは原振の1/384。16ビットのタイムアウトで割込みとしています。続いてタイマのリロード値として0x6a00をセットしていますが、このタイマは周辺デバイスとしては珍しくアップカウントなのでタイムアウトまでは0x9600=38400クロック。水晶原振は14.7456MHzなので38400/(14745600/384)=1でちょうど1秒周期の割込みとなります。そのあと割込みマスクレジスタMKH,MKLIRQ1だけをマスク解除、全体の割込み許可命令EIを実行して準備完了です、

 

f:id:O3I:20210822105331j:plain

mainルーチンの最後はCレジスタの内容を4ビットLEDに出力する永久ループになっているのでLEDが1秒周期でチカチカすることになります