CPU実験室

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

ボーレート設定

内部レジスタの初期化のついでにシリアルコントローラの設定をやってみます。

マニュアルでボーレートを得るまでの流れをみると結構複雑です。まず外付け発振子の原振fOSCHをクロックギアで1/1~1/16に分周、さらに2分周したものがシステムクロックfSYSになりますが、ここでは外付け水晶を20MHz、ギアを1/1としたのでfSYS=10MHzになります

f:id:O3I:20220417165730j:plain

発振子を10MHzにすれば内部PLLで4逓倍したfc=40MHzを使えるのでそっちのほうが良かったかもです。さらにはデータシート上では発振子に水晶ではなくムラタのC内蔵のセラミックレゾネータが推奨されていたのでそれの共用パタンを作っておけば良かったです。

 

クロックギアの出力をさらに8分周したΦT0(ここでは20/8=2.5MHz)がボーレートジェネレータに入力されます。さらにここで1/1~1/32のプリスケーラを通りメインの分周器でD分周してボーレートの16倍のサンプリングクロックSIOCLKを得ます。

f:id:O3I:20220417170830j:plain

ここではプリスケーラを1/1設定して38400bpsを得ようとすると

ΦT0/D/16=38400 より D=4.069 

Dは2つのパラメータN,KD=N+(16-K)/16と見かけ上非整数を設定でき、ここからN=4、K=15

が定まります。この設定で実際のボーレートを逆算すると38462bpsとなり+0.16%の誤差に収まりました

これらを内蔵レジスタの初期化部分で記述しています

f:id:O3I:20220417173637j:plain

ところで内蔵レジスタ名の定義ですがASに付属していたTLCS-900用のインクルードファイルSTDDEF96.INCTMP96C141用であってTMP92CM22とは全くレジスタ名称が違ったりたまたま同じでもアドレス割り付けが異なっていて全く使えません。そこでSTDDEF900H.INCという新規ファイルを起こしてマニュアルにあるレジスタの定義をコツコツ手書きで記入していますが全体では膨大な数のレジスタがあるのでまずは使うものだけからです

f:id:O3I:20220417173703j:plain