[H8-ML(6012)] データバスの外部アクセスについて
From: ida@xxxxxxxxxxxxxxxxxxxx
Date: 2006年07月31日(月)21時05分18秒
こんばんは、井田です。

今度は、データバスのアクセスについて質問なのですが、

ルネサスのモニターソフトを使用しSRAM上でデバックを行っていて、
DAの動作確認を行っているのですが、上位4bitのデータしかDAにセットされていない感じです。

DAの仕様は12bit 0〜2.5V出力

モード5で外部にSRAM、DA、ADを下記のポートに繋いでいます。
P3_0(D8)       SRAM_D0,DA_D0,AD_D0
P3_1(D9)       SRAM_D1,DA_D1,AD_D1
P3_2(D10)      SRAM_D2,DA_D2,AD_D2
P3_3(D11)      SRAM_D3,DA_D3,AD_D3
P3_4(D12)      SRAM_D4,DA_D4,AD_D4
P3_5(D13)      SRAM_D5,DA_D5,AD_D5
P3_6(D14)      SRAM_D6,DA_D6,AD_D6
P3_7(D15)      SRAM_D7,DA_D7,AD_D7

P4_0(D0)       DA_D8
P4_1(D1)       DA_D9
P4_2(D2)       DA_D10
P4_3(D3)       DA_D11

CS,OE,WEなどはCPLDで制御しています。

プログラムとしては、
外部DAのアドレスはエリア1の0x280006に割り当てています。
#define EXT_AD  (*(volatile *)0x280004)	 	/* EXT D/A(12bit)   Address*/
#define EXT_DA  (*(volatile *)0x280006)	 	/* EXT A/D(12bit)   Address*/

外部のチップセレクトは、CPLDが制御をしていて、0x280006にアクセスがあればDAのCSが有効になります。

DAOutputに0x100を設定すれば256 * (2.5/4096) = 0.156V出力します。
しかし、0xFFを設定しても0Vになります。
電圧の測定はデジタルマルチメーターを使用して1/10000Vまで測定出来ます。

バス幅は8bitモードではP4の上位4bitのみが出力されて、16bitモードに切替える(下記ソースのコメント部)とリブートしてしまいま
す。
接続構成に問題はないでしょうか?

ちなみにADは、下記のようにしないと取得出来ません。
unsigned int Buf1 = EXT_AD; 		//AD取込み
unsigned int Buf = (Buf1 & 0xff) + ((P4DR.BYTE & 0x0f) << 8);	//上位4bit

本来は、下記のように入出力を考えていたのですが、うまく動作しませんでした。
EXT_DA = DAOutput;
ADInput = EXT_AD;

今回、初めてH8を使っていて、まだまだ勉強不足ですが助言いただけると幸いです。

<ソース部>
	unsigned char P3_DDR;
	unsigned char P4_DDR;

//BSC.ABWCR.BYTE = 0;	//←コメントを外すとリブートする

	//P3,P4を出力に切り替える
	P3DDR = 0xFF;
	P4_DDR |= 0x0F;
	P4DDR = P4_DDR;
	
	P3DR.BYTE = (DAOutput & 0xff);			//下位8bit
	P4DR.BYTE = ((DAOutput >> 8) & 0x0f);	//上位4bit
	EXT_DA = DAOutput;						//CPLDにDAを選択したことを知らせる(ダミー)

	//P3,P4を入力に切り替える
	P3DDR = 0;
	P4_DDR &= ~0x0F;
	P4DDR = P4_DDR;

//BSC.ABWCR.BYTE = 0xFF;	//←コメントを外すとリブートする
スレッド概略
[表示中](起点)
 ├[6013(1)]
 └[6036(2)]


投稿順に移動
[←前の記事へ(P)]
[→次の記事へ(N)]


リスト表示へ
[このスレッド(T)]
[本記事の前後(L)]