• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:CQ・SH7144基板の外部RAM使用設定について)

CQ・SH7144基板の外部RAM使用設定について

このQ&Aのポイント
  • CQ出版社の雑誌Interfaceの2006年6月の付録として付いていた、SH7144基板についての質問です。
  • 外部RAMを使用したいのですが、正しく読み書きできません。バス設定、ウエイト設定はしたつもりなのですが、うまくいっていません。
  • 下に設定を記述します。足りないコードなどがあったら指摘していただけると助かります。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

ポートAを設定しないとSRAMの制御線(CS、RD、WR)が出力されないと思うんですが。。。 あと、オシロやロジアナで思い通りに信号が出力されているか、 ウェイトがかかっているか確認しないと、実際に何が起きているのか 判断できませんよ。 高価なものなんで無理にお勧めはしませんが・・・。

yamato0917
質問者

お礼

ご指摘の通りです。ありがとうございました。 BSC.BCR1.WORD=0x400f;/*CS0-7:16bit*/ BSC.BCR2.WORD=0x0000;/*CS0-7 0アイドルサイクル*/ BSC.WCR1.WORD=0x0000;/*CS0-7 0ウェイト*/ PFC.PACRL1.WORD=0x1540;/*RD WRH WRL CS1*/ PFC.PCCR.WORD=0xffff;/*A0-15*/ PFC.PBCR2.WORD=0x0005;/*A16-17*/ PFC.PBCR1.WORD=0x000a;/*A18-21*/ PFC.PDCRL1.WORD=0xffff;/*D0-15*/ PFC.PDCRL2.WORD=0x0000;/*D0-15*/ で動作確認しました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • マイコン H8 3052F モード5の不具合

    こんばんは。  3052Fに8Kバイトのメモリーを増設して モニタデバッカーでモード5に設定して HTERMでMEMORYコマンドで20,000台のメモリーを 書き換えようとしたところFF FF FFの表示のみで 書き換えができませんでした。 試験的にMD1の短絡片をMD0に交換したところ 200,000台のメモリーを書き換えることができました。 モニタデバッカーでモード6に設定して200,000台の メモリーを書き換えることができました。しかし 試験的にMD0の短絡片をMD1に交換して20,000のメモリーを 書き換えることができませんでした。 モード6では正常にアクセスできるので、ハード的には 正常?ではないかと思います。 MD1を短絡すると、memoryコマンドが5桁の窓が開くので MD1の短絡はハード的に正常に認識されているのでは? モード6は正常ですがPA7のポートが塞がれてしまうので モード5で走らせたいのですが、、、、、、 何を見落としているのか、わかる方 教えてください。   monitor.c 抜粋 BSC.ABWCR.BIT.ABW1 = 1; BSC.ASTCR.BIT.AST1 = 1; BSC.WCER.BYTE = 0xF0; BSC.WCER.BIT.WCE1 = 1; P1.DDR = 0xFF; P2.DDR = 0xFF; P5.DDR = 0x07; P8.DDR = 0x08;

  • ファイルから漢字、数値を検索するプログラム

    c言語の初心者です。今ひとつの難しい課題を解いているのですが、力 不足のため、行き詰っています。どうかお助けください>< 問題 テキストファイルから任意のコードを検索するプログラムを作る。 "@"の後の以下の条件にマッチした検索を行う @"漢字" "から始まった場合、文字列を検索 @0xff   "0x"から始まった場合、16進入力データを持つ位置を検索 0x1 = 0x01です。0x1という記述も許容する。 @255 "0"~"255"が入力された場合、入力データを持つ位置を検索。 但し、0~255までのチェックが必要。 @s65535 short(2Byte)単位で 65535(0xffff)を探す。 但し、0~65565までのチェックが必要 @s0xffff short(2Byte)単位で 0xffffを探す。 0xfff=0x0fffです 0x1や0xfffという記述も許容する @l1048575 long(4Byte)単位で 0x000fffffを探す。 @l0xffffffff long検索時の"@"の後は Lの小文字である。 これらを検索するプログラムはどうやって書けばよいかヒントのみでも 良いですから、アドバイスください。お願いします。

  • 構造体のキャスト

    はじめまして。 C言語初心者です。今回の質問は構造体のメンバを他の構造体に格納するときにおきる不可解な現象です。 具体的には、 typedef struct gmsg{ int a; int b; int Dt[4]; }GMSG 上記のDt[4]を以下の構造体に代入していきます。 typedef struct msg{ char a; char b; char c; char d; int e; short f; char g; char h; char i; char j; char k; char l; char m; char n; short o; }MSG この際に以下のような処理を行っています。 この際GMSGを(ポインタ)pt_msgdt,(ポインタ)MSGをpt_SubDtとし、 pt_SubDt->a = (char)(pt_msgdt->Dt[0] ) & 0xFF; pt_SubDt->b = (char)(pt_msgdt->Dt[0] >>8) & 0xFF; pt_SubDt->c = (char)(pt_msgdt->Dt[0] >> 16 ) & 0xff; pt_SubDt->d = (char)(pt_msgdt->Dt[0] >> 24)& 0xff; pt_SubDt->e = (pt_msgdt->Dt[1]) & 0xFFFFFFFF; pt_SubDt->f = (short)(pt_msgdt->Dt[2] & 0xFFFF); pt_SubDt->g = (char)((pt_msgdt->Dt[2] >> 16) & 0xFF); pt_SubDt->h = (char)((pt_msgdt->Dt[2] >> 24 ) & 0xFF); pt_SubDt->i = (char)(pt_msgdt->Dt[3]) & 0xFF; pt_SubDt->j = (char)(pt_msgdt->Dt[3] >> 8) & 0xFF; pt_SubDt->k = (char)(pt_msgdt->Dt[3] >> 16) & 0xFF; pt_SubDt->l = (char)(pt_msgdt->Dt[3] >> 24) & 0xFF; pt_SubDt->m = (char)(pt_msgdt->Dt[4]) & 0xFF; pt_SubDt->n = (char)(pt_msgdt->Dt[4] >> 8) & 0xFF; pt_SubDt->o = (short)(pt_msgdt->Dt[4] >> 16) & 0xFFFF; } しかし処理結果をデバック中にDt[0],Dt[3],Dt[4]の0x79以下のデータはキャストが行いますが,0x80~0xffのデータに関しては4byteになり 0xffffff**といったキャスト結果になってしまいます。 例えると Dt[3]=0x000000f120; 処理結果 h = 0x00 g = 0x00 f = 0xFFFFF120 といった結果になってしまいます。 この結果を0x80以上でもint->char,int->shortのようにキャストく色々な方法を試しましたが、わかりません。 よろしくお願いします。 ちなみにOSはLinux,コンパイラーはC言語で扱っているデータはリトルエンディアンのバイナリデータです。

  • SH7144のMTU割り込みについて

    マイコン初心者です。 現在SH7144の勉強を行っているのですが、MTUによる割り込みが上手くできずに困っています。 開発環境はGCC Developer Liteになります。 下記にソースを示します。 #include<7144.h> void initIO(void) { PFC.PECRL2.WORD = 0x0000; //ポートEの7~0を入出力に設定 PFC.PEIORL.WORD = 0xffff; //ポートEの15~0を出力に設定 } void initMTU(void) { MST.CR2.BIT._MTU = 0; //MTUモジュールスタンバイの解除 MTU0.TSR.BIT.TGFA = 0; //TGFAフラグクリア MTU0.TCR.BYTE = 0x22; //TGRAのコンペアマッチでクリア //PΦ/16でカウント=1562.5kHz MTU0.TMDR.BYTE = 0xC0; //TGRA通常動作 MTU0.TIER.BYTE = 0x41; //MTU0のTGIEAコンペアマッチで割り込み MTU0.TGRA = 1562; //パルス周期設定(1562.5kHz/出力周波数1kHz=1562回) INTC.IPRD.BIT._MTU0G = 15; //割り込み要因MTU0のTGIプライオリティ15 MTU.TSTR.BIT.CST0 = 1; //MTUカウンタ動作開始 } void int_tgi0a(void) { static int d = 1; MTU0.TSR.BIT.TGFA = 0; //TGFAフラグクリア PE.DRL.BIT.B0 = d; //PE0に出力 d = ~d; //dの値を反転 } void main(void) { initIO(); initMTU(); while(1); } プログラムはMTU0のTGIEAコンペアマッチで割り込み、PE0の出力を反転する動作を考えて書きました。 ご教授の程をお願い致します。

  • Perl 禁止語句

    テキストの中に禁止語句一覧があります。 それと一致した場合、エラーを返すのですが、 現在のコードですと、 完全一致で、これを部分一致にする 方法を教えてください。 またコードの指摘があればよろしくお願いいたします! ◆ngword.txt◆ あい いう うえ えお ・ ・ ・ 1000行ほど(もっとあるかもしれません) ◆test.pl◆「UTF-8」 #/usr/bin/perl use Encode; my $Name = "え"; $Name = encode('cp932', decode('UTF-8', $Name)); open my $fh, '<', 'ngword.txt'; chomp(@ngword = <$fh>); if(&ban($Name, \@ngword)) { print "error\n"; } sub ban { my $body = shift; my $word = shift; $body =~ s/(\x0d\x0a|\x0a|\x0d|\n|\s|\x81\x41|\xff)//g; return map { $body =~ /$_/m } @$word; }

    • ベストアンサー
    • Perl
  • H8/3048、AD/DA変換プログラムについて。

    H8/3048、AD/DA変換について質問です。 ポート7のAN0・AN1を入力に使い、DA0・DA1で出力される変換プログラムを作成して実験したところ AN0→DA0への変換は出力されたのですが、AN1→DA1への変換が出力できません。なぜ出力されないのかわかりません。 どうしたらいいか教えてください、お願いします。 AN0がDA1でも出力されているかと思いましたが違いました。 #include <no_float.h> #include <stdio.h> #include <machine.h> #include "h8_3048.h" void init (void); double get_ad0 (void); double get_ad1 (void); void out_da0 (double); void out_da1 (double); void wait (void); int main (void) { double ad0,ad1; int d; init(); //初期化 // set_ccr(0x00); //全体の割り込み許可 //AD DA変換----------- while(1){ ad0=get_ad0(); ad1=get_ad1(); for(d=0;d<1000;d++); out_da0(ad0); out_da1(ad1); } return 0; } void init(void) { /* ポートの入出力設定 */ P1DDR = 0xff; P2DDR = 0xff; P3DDR = 0xff; P4DDR = 0xff; P5DDR = 0xff; P6DDR = 0xf0; // CPU基板上のDIP SW P8DDR = 0xff; P9DDR = 0xf7; PADDR = 0xff; // LED基板 PBDDR = 0xff; // A/Dの初期設定(単一モード) AD_CSR = 0x00; // A/Dの初期設定(スキャンモード使用AN0-AN1) // AD_CSR = 0x11; //ITU0 1ms毎の割り込み ITU0_TCR = 0x20; ITU0_GRA = 24575; ITU0_IER = 0x01; ITU_STR = 0x01; // D/Aの初期設定 DA_CR=0xc0; //DA0E1,DA0E0:1 D/Aアウトプットネーブル DAE:0 ch0,1 独立制御 } double get_ad0(void) { int i; double ad; AD_CSR |=0x20; //ADST:1 AD開始 while(!(AD_CSR & 0x80)); //ADF:1 エンドフラグをチェック AD_CSR &=0x7f; i=AD_DRA>>6;// i=0-1023 ad=i*5.0/1024.0; // 0-1024 を 0-5vに変換 return ad; } double get_ad1(void) { int i; double ad; AD_CSR |=0x20; //ADST:1 AD開始 while(!(AD_CSR & 0x80)); //ADF:1 エンドフラグをチェック AD_CSR &=0x7f; i=AD_DRB>>6; //i=0-1024 ad=i*5.0/1024.0; // 0-1024 を 0-5vに変換 return ad; } void out_da0(double d) { DA_DR0=(int)(d*255/5.0); } void out_da1(double d) { DA_DR1=(int)(d*255/5.0); } void wait(void) { long Loop=200000; while(Loop--); }

  • FMV-BCR214の設定について

    FMV-BCR214についてご質問です。 NW7を読むとエラー発生しております。 原因はC/Dがスタートとストップで違う事が原因のようですが、 設定で読めるようにできませんでしょうか。 ちなみにオプトエレクトロニクスのバーコードリーダでは読めました。 【バーコード内容】 C10002779012B 以上です。どなたかご存知の方ご教示下さい。

  • コンテンツが全く出ずになってしまいました

    Internet Explorer11です。ゲームのポータルサイトでコンテンツが全然出なくなってしまいました。以下のような表示が出ます。どうしたらコンテンツを使えるようになるのでしょう? Cookieは承諾・許可になっています。よろしくお願いします。 Bad Request Your browser sent a request that this server could not understand. Size of a request header field exceeds server limit. Cookie: RAFP_UID=UxdQS8i9SL; r_ad_token1=4TZ4s0003BSKV1UTq1Qi; pb=1a26656e14e79d0b2e62e6d3699975b7; kxuser=LEf6RnVE; kxkuid=LEf6RnVE; kxtech=browser%3DInternet%2520Explorer%252011%26manufacturer%3DMicrosoft%2520Corporation%26device%3DComputer%26os%3DWindows; kxwhistle=0; kxsegs=qyzjanu0g%2Cq465ax4lt%2Cq46uin23o%2Cq5e2rkr08%2Cq3o2b7pso%2Cq60yzr4lk%2Cq46xkju5x%2Cqzz3x62u7%2Cq5exwppst%2Cq46vsetft%2Cp1sp94o8d%2Cq46qzfd5h%2Cq4yhc44m2%2Cq5e2vtumh%2Cq601wiui6・・・・・・・・・・・・

  • VS2010 MFC CStdioFileについて

    下記コードで出力した結果が、 FF FE 0D 00 0D 0A 00 になります。 FF FE 0D 00 0A 00 となることを期待しているのですが… -------------------- CStdioFile stdFile; CString CWriteFilePath = "hoge.txt"; if (!stdFile.Open(CWriteFilePath, CFile::modeReadWrite | CFile::shareExclusive | CFile::modeCreate)){ //エラー } // BOM付与 DWORD dw1 = 0xFF; DWORD dw2 = 0xFE; stdFile.Write( &dw1, 1 ); stdFile.Write( &dw2, 1 ); // 改行文字 short s1 = 0x0D; short s2 = 0x0A; stdFile.Write( &s1, 2 ); stdFile.Write( &s2, 2 );

  • 16F88を用いてLEDの点灯パターンを制御する

    16F88を用いてLEDの点灯パターンを制御するプログラムを作ったのですが、思うように動作してくれません。 電源を入れたときはLEDはすべて消灯しており、スタートのためのスイッチを押すとすべてのLEDが3回点滅するはずなのですが、実際のところ、全てのLEDが点灯しっぱなしになってしまいます。 心当たりはコンフィギュレーションビットの設定が間違っている、PICの出力が間違っている(A/Dが正しく設定されていない)といったことを考えたのですが、結局解決には至りませんでした。 ほぼ同じプログラムを16F84Aにて作ったところ正常に作動したため、PICの移行に伴って不具合が生じてしまったのでしょうか。 どなたかお力をお貸しください。 プログラムはMPLAB v8.85 にて作成しており、コンパイラはHI-TECH ANSI C Compiler で、書き込みにはPICKIT2を用いています。 RB0~7にLEDが接続されており、RA0にスイッチが接続されています。 以下、ソースコードになります。 #define _LEGACY_HEADERS #include <htc.h> #define _XTAL_FREQ 20000000 __CONFIG ( HS & WDTDIS & PWRTDIS & UNPROTECT & MCLREN & BOREN & LVPDIS & DEBUGDIS & IESODIS & FCMDIS); void kaeru(void){ ////////////準備点灯3回////////////// PORTB=0xFF; __delay_ms(500); PORTB=0x00; __delay_ms(500); PORTB=0xFF; __delay_ms(500); PORTB=0x00; __delay_ms(500); PORTB=0xFF; __delay_ms(500); PORTB=0x00; __delay_ms(800); //////////////////////////////////// //スペースの都合で省略しています。 } void main(void) { ANSEL=0b00000000;//16F88のPORTAのA/D変換の無効化 OPTION=0x7F;//PORTBのプルアップ PORTA=0x00;//初期設定 PORTB=0x00;//初期設定 TRISA=0x01;//RA0を入力 TRISB=0x00;//RB0~7を出力 if(RA0==1) kaeru(); }