CPU実験室

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

8251プログラミング

シリアルコントローラ8251がうまく初期化できない件ですが、よくよく考えると前にも同じような失敗をしたことがあって、たぶんリカバリータイムの不足が原因です。

UART_INITルーチンの中で8251に書き込みをしているところを観察してみました。

(Ch1:8251/WR、Ch2:8251のシステムクロックSCLK

f:id:O3I:20210628084900j:plain

 

8251レジスタに書き込みをしている間隔は1.32usDSPのマスタクロックを2分周したSCLK=4.9152MHzの約6発分あります。これだけ時間間隔があれば大丈夫だろうと思い込んでたのですが改めて8251のマニュアルを読んでみると、必要なのは時間ではなく、システムクロックのサイクル数でした。

f:id:O3I:20210628084936j:plain

 

コマンド書込み間隔はシステムクロックの8サイクル以上とあるので1.63us以上の間隔が必要だったということになります。いままでZ80/8085/8086のボードでNOPを気休めに2~3個入れとけばOKだったのはCPUとUARTが同一クロックで、尚且つ即値でのI/Oアクセスに結構クロック数が必要だったからでしょう。

 

今回は現状のNOP4個から、過剰かもしれませんが16個に変更。

f:id:O3I:20210628085454j:plain

 

修正後もう一度UART_INITルーチンの内の書き込みを見てみると書込み間隔2.54us、その間にシステムクロックが12発入ってますのでこれなら大丈夫そうです

f:id:O3I:20210628084921j:plain