おぐさん、こんばんは、廣田ともうします。
おぐなお wrote:
> ①CPUはH8/3048F
> ②開発環境は日立コンパイラ(HEW)
> ③CPUモードはモード3
モード3と言うことは内蔵ROMは使っていないで、プログラムは外部ROMor
外部RAMor内蔵RAMにあるわけですね。
> 色々と外部ICを接続したので、PA(ポートA)をアドレスバスに切り替えたいと考えて
> います。
> 切替のタイミングは、リセット直後にBRCR(バスコントロールレジスタ)を設定する
> ことにより、アドレスバスに切替を行いたいと思っています。
> 実際にリセット直後に、この設定を行ってみたのですが、暴走してしまっています。
> リセット直後に呼び出される「PowerON_Reset関数」は正常に呼び出されているので
> すが、BRCRレジスタに書き込みを行うと同時に、暴走が始まってしまいます。
> レジスタを直接書き換える前に何か設定する必要があるのでしょうか?
思いつく事は
1:A23,A22,A21,(A20)がアクティブになったとき、バスがすぐ駆動されますが、そのた
めにデータバスに衝突が起こっていないか?確認する。(これがいちばん怪しい)
特にプログラム格納メモリのデコーダがA23,22,21を使っていない様な回路構成に
なっていると一発でぶつかりますね。
2:BRCRレジスタのLSB(BRLE)を'1'にしてしまっていないか?確認する。
3:「PowerON Reset関数」内等で、ABWCRにデータをセットして16ビットアクセス
空間を作っていないか確認する。16ビットアクセス空間を一つでも作ると外部バス
は16ビットアクセスになります。モード3の初期値は全バス8ビットアクセスですが
ABWCRに16ビットアクセス空間も作れますので、エリア毎の設定がハードの回路構成
と合致していなければなりません。
ポートAをアドレス23,22,21に使うほどの大規模空間を使ったことが無いので、こんな
事ぐらいしかうかびません。A23,22,21として使うより、/CS6,/CS5,/CS4として使った
ほうが外部デコーダが少なくて済むし、プログラム格納メモリのデコーダも/CSnを使
えば衝突は回避できます。
では。
--
/******************************************************************************
Name: 廣田 正孝 "Masataka Hirota"
E-mail address: mhirota@xxxxxxxxxxxxx
GCD03040@xxxxxxxxxxx
******************************************************************************/