Pic24MC68Kマイコン(その4)PICとMC68Kのインターフェース処理 [68K]
前回の記事で書いたようにブレッドボード上で MC68K が漸く動くようになったので今回はPCとのインターフェース部分の動作確認について書いてみます。
基本的には以前 68008でやったことを踏襲しますが、メモリアクセス用のデータバスが16bitになったことで3番目にあった文字出力時の出力データ(CoData)を機能番号(FuncNo)の次に移動して MC68K から1回のアクセスで設定できるように変更しました。
アセンブラ環境は EASy68 の EDIT68K を使っています。アセンブラが出力するSフォーマットファイルをバイナリ変更後に自作の bin2state ツールで picleソース内に貼れる形式に変換しています。
今回の環境では MC68K 自体はビッグエンディアンですがPIC内処理はリトルエンディアンです。更にPICのPMP機能でメモリアクセスする際はビッグエンディアンになり、かつアドレス値は MS68K の 1/2 と言うややこしい状態になっています。
試験プログラムを実行してみると出力文字列を最後まで出し切らないうちに暴走して HALT してしまう状態でした。
ロジアナで動作を追ってみると MC68K のメモリ書込み処理(スタックへのリターン値書込み)が最初の内は問題無いのですが時間が経つと上手くいかなくなるようで一文字出力処理からのリターンで予期せぬアドレスに飛んでいるようです。
今回実施したことを全て書くと雑多なメモになってしまうので主要な確認事項と対策を以下に列挙します。
参考に東芝の「LogicIC_ HC_Series Application Note 2021-01-31」から引用した74HCシリーズの入出力電圧の規格を貼っておきます。
下図で赤丸印の部分が2個のPMWR/信号が結合してしまっている箇所です。
PMWR/のプルアップ抵抗を10Kから1Kに変更後のロジアナ波形が下図になります。1Kは小さ過ぎるような気もしますが動作上は問題無くなりました。試しにメモリチップを交換してみましたが状況は変わりませんでした。
ライト信号の幅が細すぎてマージンが少ないのでPMPの TimerM の設定を1から2に変更しました。変更後のロジアナ波形が下図で PMWR/ の信号幅がもともとの 80ns から 160ns 程度に増加しました。
参考に MC68K が動作中のロジアナ波形も貼っておきます。
BR/(バスリクエスト)がhighの部分が MC68K が動作している部分で、MC68K はPICへサービス要求(今回の場合1文字出力)を依頼する場合は RESET命令を実行することで RESET/ 信号を一定時間 low にします。
PIC側は RESET/ 信号を監視していてlowを検出するとバスリクエストして MC68K の要求内容を処理します。
最後に今回使用したメモリ試験プログラムと実行結果を貼っておきます。
末尾でダンプ表示後にある "hello, world" が冒頭で書いた MC68K のプログラムの要求に従って PIC が出力した文字列になります。
[TOP] [ 前へ ] 連載記事 [ 次へ ]
基本的には以前 68008でやったことを踏襲しますが、メモリアクセス用のデータバスが16bitになったことで3番目にあった文字出力時の出力データ(CoData)を機能番号(FuncNo)の次に移動して MC68K から1回のアクセスで設定できるように変更しました。
アセンブラ環境は EASy68 の EDIT68K を使っています。アセンブラが出力するSフォーマットファイルをバイナリ変更後に自作の bin2state ツールで picleソース内に貼れる形式に変換しています。
PICとのインターフェース試験用のMC68K側のhello出力処理(アセンブラ) |
|
今回の環境では MC68K 自体はビッグエンディアンですがPIC内処理はリトルエンディアンです。更にPICのPMP機能でメモリアクセスする際はビッグエンディアンになり、かつアドレス値は MS68K の 1/2 と言うややこしい状態になっています。
試験プログラムを実行してみると出力文字列を最後まで出し切らないうちに暴走して HALT してしまう状態でした。
ロジアナで動作を追ってみると MC68K のメモリ書込み処理(スタックへのリターン値書込み)が最初の内は問題無いのですが時間が経つと上手くいかなくなるようで一文字出力処理からのリターンで予期せぬアドレスに飛んでいるようです。
今回実施したことを全て書くと雑多なメモになってしまうので主要な確認事項と対策を以下に列挙します。
- PIC側PMPのPMWR/信号の設定
5V系のICに接続するにも関わらず、オープンドレイン設定になっていませんでした^^;
74HC に対して highレベルが 3V 程度では厳しいです Fig.1
設定をオープンドレインに変更しました
- PMWR/のプルアップ抵抗
10Kでプルアップしていましたが、ロジアナで観察するとメモリ書込み時にhighレベルに上がりきれない部分が見つかりました Fig.2
プルアップ抵抗を1Kに変更して動作が良くなりました Fig.3(2.7KではNGでした)
- PMPのTimerMの設定
PMWR/信号幅がが80ns程度で短すぎるので PMP の TimerM の値を1から2に変更しまた
変更後のPMWR/の信号幅は160ns程度になりました Fig4
参考に東芝の「LogicIC_ HC_Series Application Note 2021-01-31」から引用した74HCシリーズの入出力電圧の規格を貼っておきます。
Fig.1 74HCシリーズのスレッショルド |
|
下図で赤丸印の部分が2個のPMWR/信号が結合してしまっている箇所です。
Fig.2 PICのメモリライト(PMWR/のプルアップ10K)[sampling:25MHz] |
|
PMWR/のプルアップ抵抗を10Kから1Kに変更後のロジアナ波形が下図になります。1Kは小さ過ぎるような気もしますが動作上は問題無くなりました。試しにメモリチップを交換してみましたが状況は変わりませんでした。
Fig.3 PICのメモリライト(PMWR/のプルアップ1K)[sampling:25MHz] |
|
ライト信号の幅が細すぎてマージンが少ないのでPMPの TimerM の設定を1から2に変更しました。変更後のロジアナ波形が下図で PMWR/ の信号幅がもともとの 80ns から 160ns 程度に増加しました。
Fig.4 PICのメモリライト(TimerMを2に変更後)[sampling:25MHz] |
|
参考に MC68K が動作中のロジアナ波形も貼っておきます。
BR/(バスリクエスト)がhighの部分が MC68K が動作している部分で、MC68K はPICへサービス要求(今回の場合1文字出力)を依頼する場合は RESET命令を実行することで RESET/ 信号を一定時間 low にします。
PIC側は RESET/ 信号を監視していてlowを検出するとバスリクエストして MC68K の要求内容を処理します。
Fig.5 MC68K と PIC の処理実行部のロジアナ波形 [sampling:25MHz] |
|
最後に今回使用したメモリ試験プログラムと実行結果を貼っておきます。
末尾でダンプ表示後にある "hello, world" が冒頭で書いた MC68K のプログラムの要求に従って PIC が出力した文字列になります。
PICとのインターフェース試験用のMC68K側のhello出力処理(picle言語) |
|
[TOP] [ 前へ ] 連載記事 [ 次へ ]
コメント 0