こんばんは、井田です。 今度は、データバスのアクセスについて質問なのですが、 ルネサスのモニターソフトを使用し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; //←コメントを外すとリブートする