2017.1.18
前へ
次へ
ホームページトップへ戻る


16ビットマイコンボードの製作

〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
いつか使ってみるつもりで入手してそのまま置いてあった16ビットCPUのことを思い出しました。
AMD社のAM188です。
その名の通り、CPUコアは80188互換の16ビットCPUです。
そのAM188を使った16ビットマイコンボードの製作記事です。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

[第14回]


●I/O端子の設定(3)

前回からの続きです。
前回書きましたようにI/O回路のセレクト端子としてPCS0を使います。
PCS0などというとなんだかよくわからないような印象を受けますが、Z80のIORQと同じような機能です。
そうそう。
前に説明しましたUCS、LCSはZ80のMREQと同じような機能です。
Z80の場合メモリアクセス命令やI/Oアクセス命令を実行するだけでMREQやIORQがアクティブになりますが、AM188の場合には機能が沢山詰め込まれているだけあって、事前に色々なお膳立てが必要です。

それでそのPCS0をI/O回路のセレクト信号として使うためには、やはりお膳立てが必要です。
ということでやっとプログラムリストの説明に戻ってきました。
下は[第12回]にお見せしたリストのうち、UMCS、LMCSを設定した後からの部分です。

[00060] F00E  BA78FF            MOV DX,FF78;pdir1
[00061] F011  B8FEFF            MOV AX,FFFE;pcs0 active
[00062] F014  EF                OUT DX,AX
[00063] F015  BAA8FF            MOV DX,FFA8;mpcs
[00064] F018  B8B880            MOV AX,80B8
[00065] F01B  EF                OUT DX,AX
[00066] F01C  BAA4FF            MOV DX,FFA4;pacs
[00067] F01F  B87608            MOV AX,0876;i/o base address=8000
[00068] F022  EF                OUT DX,AX
[00069] F023  BA8380            MOV DX,8083;**** 82c55
[00070] F026  B080              MOV AL,80;**** all port out
[00071] F028  EE                OUT DX,AL;****
[00072] F029  8CC8              MOV AX,CS;*****
[00073] F02B  BA8080            MOV DX,8080;*****
[00074] F02E  EF                OUT DX,AX;*****

Peripheral Control Block Register のアドレスFF78、FFA8、FFA4に値を設定しています。
Peripheral Control Blockについては[第9回]でその一部を紹介しています。
FFA8(オフセットA8)とFFA4(オフセットA4)はその表にありますが、FF78はありません。
下にFF78を含む部分を引用します。


[出典]Advanced Micro Devices,Inc. Am186EM and Am188EM Microcontrollers User’s Manual

この表にある6個のレジスタで、32本のPIO端子の有効、無効(機能端子として使う)、I/Oの向きなどを設定します。
PIO DATA1〜PIO MODE1がPIO31〜PIO16の設定用レジスタでPIO DATA0〜PIO MODE0がPIO15〜PIO0の設定用レジスタです。
I/Oセレクト信号のPCS0はPIO16と端子を共用していますので(前回参照)、その設定にはPIO DATA1〜PIO MODE1を使います。

下はPIO Mode Registerの説明です。

[出典]Advanced Micro Devices,Inc. Am186EM and Am188EM Microcontrollers User’s Manual

Table 12−2 の表から、Mode RegisterとDirection Registerの各対応するビットを0にするとNomal operationが選択されることがわかります。
今回はPCS0(PIO16)端子をPCS0として使いますから、PIO Mode1 RegisterとPIO Direction1 Registerのビット0をともに0にします。
ということになるのですが、上でお見せしましたプログラムリストではPIO Mode1 Register(FF76)は出てきません。
実は各レジスタにはリセット時に初期値が入れられるのです。
リセット時の初期値については[第6回]で表をお見せしています。
そのうちの関係する部分を再掲します。


[出典]Advanced Micro Devices,Inc. Am186EM and Am188EM Microcontrollers User’s Manual

PIOMode1 Registerはリセット時に0000が入れられますから、初期値のまま使えばよいので、初期設定プログラムには出てこないのです。
しかしPIO Direction1 RegisterはFFFFになりますから、ビット0だけは0にする必要があります。
下はPIO Direction Registerの説明です。


[出典]Advanced Micro Devices,Inc. Am186EM and Am188EM Microcontrollers User’s Manual

以上の説明から、PIO Direction1 Register(FF78)にFFFEを書き込んでいます。

[00060] F00E  BA78FF            MOV DX,FF78;pdir1
[00061] F011  B8FEFF            MOV AX,FFFE;pcs0 active
[00062] F014  EF                OUT DX,AX


これでPCS0が晴れて使えるようになるかといいますと、これだけではまだ使えません。
もう少し設定する必要があります(なかなかに面倒です)。

次回に続きます。

16ビットマイコンボードの製作[第14回]
2017.1.18upload

前へ
次へ
ホームページトップへ戻る