毎度お世話になっております
下記のように設定し、RXにて外部バスを使用しています。
CS5#とCS6#を使用しており、それぞれW0#とW1を使用して16bitで使用したいと考えています。
下記の設定の最後の方に記載していますが、CSはこの設定部では動作禁止の状態で設定しておき、
使用時に許可にしています。
このようにして使用したいのですが、なぜかCS5#の方のバスは正常に動作するのですが、
CS6#の方が動作せずに困っております。
何か抜け、設定ミスがありますでしょうか?
こんなことですが、丸2日悩んで分かりませんでした。
分かる方いっらしゃいましたらご教授願います。
いつも大したことでなく質問してしまい申し訳ありません。
よろしくお願い致します。
以下、設定です
SYSTEM.PRCR.WORD = 0xA502;
BSC.CS5CR.BIT.EMODE = 0; //領域nのエディアンは動作モードのエディアンと同じ BSC.CS5CR.BIT.MPXEN = 0;
MPC.PFCSE.BIT.CS5E = 1; //CS5使用 MPC.PFCSE.BIT.CS6E = 1; //CS6使用
MPC.PFCSS1.BIT.CS5S = 0; //P65をCS5に設定(1:P75,2:P25) MPC.PFCSS1.BIT.CS6S = 0; //P66をCS6に設定(1:P76,2:P26)
BSC.CS5CR.BIT.BSIZE = 0; //16bitバス空間に設定 W0# & W1#を共に使用
BSC.CS5MOD.BIT.PRMOD = 0; //ノーマルアクセス互換モード:0
BSC.CSRECEN.BIT.RCVEN5 = 0; //許可→リカバリ無しに変更 BSC.CSRECEN.BIT.RCVENM5 = 0;
BSC.CS5REC.BIT.WRCV = 0; //ライトリカバリサイクル1サイクル設定 BSC.CS5REC.BIT.RRCV = 0; //リードリカバリサイクル1サイクル設定
BSC.CS5MOD.BIT.WRMOD = 0; //バイトストロープモード設定(ライトタイミングWR#にて処理) BSC.CS5MOD.BIT.EWENB = 0; //外部wait#未使用
//WR1#使用時はWR1BC1E,WR2#もしくはWR3#使用時はWR1BC32Eを1へ MPC.PFBCR0.BIT.WR1BC1E = 1; MPC.PFBCR0.BIT.WR32BC32E = 0;
BSC.CS5MOD.BIT.PRENB = 0; //ページリードアクセス禁止 BSC.CS5MOD.BIT.PWENB = 0; //ページライトアクセス禁止
BSC.CSRECEN.BIT.RCVEN6 = 0; //リカバリ許可→無しに変更 BSC.CSRECEN.BIT.RCVENM6 = 0;
BSC.CS6CR.BIT.EMODE = 0; //領域nのエディアンは動作モードのエディアンと同じ BSC.CS6CR.BIT.MPXEN = 0;
// BSC.CS6CR.BIT.BSIZE = 2; //8bitバス空間に設定 BSC.CS6CR.BIT.BSIZE = 0; //16bitバス空間に設定
BSC.CS6MOD.BIT.PRMOD = 0; //ノーマルアクセス互換モード:0
BSC.CS6REC.BIT.WRCV = 0; //ライトリカバリサイクル1サイクル設定 BSC.CS6REC.BIT.RRCV = 0; //リードリカバリサイクル1サイクル設定
BSC.CS6MOD.BIT.WRMOD = 0; //バイトストロープモード設定(ライトタイミングWR#にて処理) BSC.CS6MOD.BIT.EWENB = 0; //外部wait#未使用
BSC.CS6MOD.BIT.PRENB = 0; //ページリードアクセス禁止 BSC.CS6MOD.BIT.PWENB = 0; //ページライトアクセス禁止
BSC.CS5WCR1.BIT.CSRWAIT = 3; //ノーマルリードサイクルウェイト2サイクル挿入 BSC.CS5WCR1.BIT.CSWWAIT = 3; //ノーマルライトサイクルウェイト2サイクル挿入 BSC.CS5WCR1.BIT.CSPRWAIT = 2; //ページリードサイクルウェイト2サイクル挿入 BSC.CS5WCR1.BIT.CSPWWAIT = 2; //ページライトサイクルウェイト2サイクル挿入
BSC.CS5WCR2.BIT.AWAIT = 1; BSC.CS5WCR2.BIT.CSON = 1; //アサートウェイト1サイクル挿入 BSC.CS5WCR2.BIT.WDON = 1; //ライトデータ出力ウェイト3サイクル挿入 BSC.CS5WCR2.BIT.WRON = 1; //WRアサートウェイトウェイト4サイクル挿入 BSC.CS5WCR2.BIT.RDON = 1; //リードデータアサートウェイト2サイクル挿入
BSC.CS5WCR2.BIT.WDOFF = 1; //ライトデータ出力延長サイクルウェイト1サイクル挿入 BSC.CS5WCR2.BIT.CSWOFF = 1; //ライト時延長サイクルウェイト1サイクル挿入 BSC.CS5WCR2.BIT.CSROFF = 1; //リード時延長サイクルウェイト1サイクル挿入
BSC.CS6WCR1.BIT.CSRWAIT = 3; //ノーマルリードサイクルウェイト2サイクル挿入 BSC.CS6WCR1.BIT.CSWWAIT = 3; //ノーマルライトサイクルウェイト2サイクル挿入 BSC.CS6WCR1.BIT.CSPRWAIT = 2; //ページリードサイクルウェイト2サイクル挿入 BSC.CS6WCR1.BIT.CSPWWAIT = 2; //ページライトサイクルウェイト2サイクル挿入
BSC.CS6WCR2.BIT.AWAIT = 1; BSC.CS6WCR2.BIT.CSON = 1; //アサートウェイト1サイクル挿入 BSC.CS6WCR2.BIT.WDON = 1; //ライトデータ出力ウェイト3サイクル挿入 BSC.CS6WCR2.BIT.WRON = 1; //WRアサートウェイトウェイト4サイクル挿入 BSC.CS6WCR2.BIT.RDON = 1; //リードデータアサートウェイト2サイクル挿入
BSC.CS6WCR2.BIT.WDOFF = 1; //ライトデータ出力延長サイクルウェイト1サイクル挿入 BSC.CS6WCR2.BIT.CSWOFF = 1; //ライト時延長サイクルウェイト1サイクル挿入 BSC.CS6WCR2.BIT.CSROFF = 1; //リード時延長サイクルウェイト1サイクル挿入
SYSTEM.BCKCR.BYTE = 0; //外部クロックコントロール BCLKの1分周(BCLKそのまま)
MPC.PFBCR0.BIT.ADRHMS = 0; //PC0~PC7 MPC.PFBCR0.BIT.ADRLE = 1; //PA0~PA7は外部アドレスバスA0~A7として設定
MPC.PFAOE0.BYTE = 0xFF; //A8~A15アドレス出力許可 MPC.PFAOE1.BYTE = 0x0F; //A16,17,18,19アドレス出力許可
MPC.PFBCR0.BIT.DHE = 1; //PE0PE7を外部データバスD8~D15として設定 MPC.PFBCR0.BIT.DH32E = 0; //D16~31は未使用→通常IOポートとして使用
BSC.CS5CR.BIT.EXENB = 0; //CS5動作禁止→各CS使用時に許可にする BSC.CS6CR.BIT.EXENB = 0; //CS6動作禁止
SYSTEM.PRCR.WORD = 0xA503;
SYSTEM.SYSCR0.WORD = 0x5A03;
while( 0 == SYSTEM.SYSCR0.BIT.EXBE ) { /* Confirm that the written value can be read correctly. */ }
// 動作モード、消費電力低減機能、ソフトウェアリセット関連レジスタへの書き込み禁止 SYSTEM.PRCR.WORD = 0xA500;
yueさん オシロスコープは持っておられますか? オシロで確認すればわかりますよ、yueさんの仮定のような推論ですと、どうかなと思います。 オシロが無くても74HC541AのようなICにE1端子にCSをE2端子にRDを接続してBUSも接続して入力HI/LO見れば良いでしょう。