Pic24MC68Kマイコン(その3)68Kからのメモリアクセス [68K]
前回の記事で書いたようにPICからのメモリアクセス動作は問題無いようなのですが、MC68K がうまく動かない状態だったので調べてみた結果等を書いてみます。
始めに評価環境についてですが、下の写真はブレッドボードで評価中の MC68K で1枚のブレッドボードの大半を占有していて幅広なので配線を挿す場所が上下ともに1列しかないのでロジアナが繋ぎ辛いですw
前回の記事でも書いた 元の刻印(だと思いたい)を消さずに16MHzにクロックアップした型名を刻印している主張の強いまがい品を使っていますが、後述のように少なくとも 8MHz では動くようです。
★追記 2021/12/22 {
16MHz で動かしてみた際のロジアナ画面が下図になります。
もしかしたら選別品で16Mhzでも動作するのでは?・・という一縷の望みを持っていましたが世の中そう甘くはありませんでした。16MHzでは謎の動作をしてだんまり後、HALTしました。
}
話を MC68K からのメモリアクセス確認に戻します。
PIC からのアドレス線は下図のように A10 が最上位アドレスで オープンドレイン出力し、+5V でプルアップしています。
更に A11 ~ A18 を 抵抗を介して A10 に接続しています。こうすることで MC68K がリセット後にアクセスする0番からのスタックとPCの初期値及びCP/M-68KのBIOSで使用予定の PIC と MC68K のパラメータ渡し用の実装メモリ末尾の領域を PIC 側からアクセス可能にしています。
実装しているメモリチップは 512K x 16bit なのでアドレス線は A0 - A18 の19本あります。
メモリ上に設定するPCの初期値をPIC側の 0400H に相当する 07F40H に設定して動かしてみましたが MC68K が暴走する状態でした(MC68Kへの供給クロックは 8MHz)。
そこでメモリ後半への切り替えを考えなくてもいいように PC初期値を 0008H にしてプログラムコードを 0008H 以降に設定した上で実行状態をロジアナで観察すると 0003H の PC の下位ワードを読込んだ後に、そのまま 0004H から実行しているようなので PCの初期値を 0010H に変更することでうまく動きました。
MC68K から出ているアドレス線は A1 - A22 でA0が無く、A0の情報は上位/下位バイトを指定する LB#/UB# に置き換わっているのです。つまり MC68K のアドレスは バイト単位で振られているということです。
PIC側は ワード(2バイト)単位でアドレスが振られるのでPIC側のアドレスを2倍すると MC68K のアドレスに対応するようになるということです。
従って、PIC側と MC68K 側とのメモリアドレスの対応は下表のようになります。
開始アドレスを 0010H にした場合のロジアナ波形を貼っておきます。
HALT/信号が highレベルになっている箇所が MC68Kが動作している部分で、拡大したものが下図になります。RESET/がlowレベルになっている部分は MC68K が RESET 命令を実行したことにより発生したものです(立ち上がり部分が画面に入っていませんが lowの時間は15.64us)
実行した試験プログラムと実行結果は下記の通りで、最後の方にある実行後のメモリダンプを見ると 0010H が MC68Kにより想定通り 1234H に書き換えられていることが判ります。
メモリ前半での動作が上手くいったので、最初にやりたかったメモリ後半での MC68K のメモリライト試験を行った際のロジアナ波形と操作ログを貼っておきます。
こちらも結果は想定通りで、okでした。
次回はいよいよ PIC と MC68K とのインターフェース処理の動作確認ですね。
[TOP] [ 前へ ] 連載記事 [ 次へ ]
始めに評価環境についてですが、下の写真はブレッドボードで評価中の MC68K で1枚のブレッドボードの大半を占有していて幅広なので配線を挿す場所が上下ともに1列しかないのでロジアナが繋ぎ辛いですw
前回の記事でも書いた 元の刻印(だと思いたい)を消さずに16MHzにクロックアップした型名を刻印している主張の強いまがい品を使っていますが、後述のように少なくとも 8MHz では動くようです。
ブレッドボード上の MC68K |
|
★追記 2021/12/22 {
16MHz で動かしてみた際のロジアナ画面が下図になります。
もしかしたら選別品で16Mhzでも動作するのでは?・・という一縷の望みを持っていましたが世の中そう甘くはありませんでした。16MHzでは謎の動作をしてだんまり後、HALTしました。
偽16MHz版 MC68HC000 の16MHz動作試験結果 |
|
話を MC68K からのメモリアクセス確認に戻します。
PIC からのアドレス線は下図のように A10 が最上位アドレスで オープンドレイン出力し、+5V でプルアップしています。
更に A11 ~ A18 を 抵抗を介して A10 に接続しています。こうすることで MC68K がリセット後にアクセスする0番からのスタックとPCの初期値及びCP/M-68KのBIOSで使用予定の PIC と MC68K のパラメータ渡し用の実装メモリ末尾の領域を PIC 側からアクセス可能にしています。
実装しているメモリチップは 512K x 16bit なのでアドレス線は A0 - A18 の19本あります。
PIC側のアドレス生成回路 |
|
メモリ上に設定するPCの初期値をPIC側の 0400H に相当する 07F40H に設定して動かしてみましたが MC68K が暴走する状態でした(MC68Kへの供給クロックは 8MHz)。
そこでメモリ後半への切り替えを考えなくてもいいように PC初期値を 0008H にしてプログラムコードを 0008H 以降に設定した上で実行状態をロジアナで観察すると 0003H の PC の下位ワードを読込んだ後に、そのまま 0004H から実行しているようなので PCの初期値を 0010H に変更することでうまく動きました。
MC68K から出ているアドレス線は A1 - A22 でA0が無く、A0の情報は上位/下位バイトを指定する LB#/UB# に置き換わっているのです。つまり MC68K のアドレスは バイト単位で振られているということです。
PIC側は ワード(2バイト)単位でアドレスが振られるのでPIC側のアドレスを2倍すると MC68K のアドレスに対応するようになるということです。
従って、PIC側と MC68K 側とのメモリアドレスの対応は下表のようになります。
PIC | MC68K |
---|---|
0000 - 03FF | 000000 - 0007FF |
0400 - 07FF | 0FF800 - 0FFFFF |
開始アドレスを 0010H にした場合のロジアナ波形を貼っておきます。
00000010Hから開始した際の全体波形(サンプリング:25MHz) |
|
HALT/信号が highレベルになっている箇所が MC68Kが動作している部分で、拡大したものが下図になります。RESET/がlowレベルになっている部分は MC68K が RESET 命令を実行したことにより発生したものです(立ち上がり部分が画面に入っていませんが lowの時間は15.64us)
MC68K動作部の拡大波形(サンプリング:25MHz) |
|
実行した試験プログラムと実行結果は下記の通りで、最後の方にある実行後のメモリダンプを見ると 0010H が MC68Kにより想定通り 1234H に書き換えられていることが判ります。
MC68Kが0010H開始アドレスの試験プログラムと実行結果(picle言語) |
|
メモリ前半での動作が上手くいったので、最初にやりたかったメモリ後半での MC68K のメモリライト試験を行った際のロジアナ波形と操作ログを貼っておきます。
こちらも結果は想定通りで、okでした。
000ff800Hから開始した際の全体波形(サンプリング:25MHz) |
|
MC68Kが0010H開始アドレスの試験プログラムと実行結果(picle言語) |
|
次回はいよいよ PIC と MC68K とのインターフェース処理の動作確認ですね。
[TOP] [ 前へ ] 連載記事 [ 次へ ]
コメント 0