AKI-H8/3069F LANボードのDRAM増設 あまり


詳しくはこっち

DRAMを使うには3069のハードウェアマニュアルのP188にあるように
ABWCRの設定、RTCORの設定、RTMCSRのCKS2-0ビットの設定、DRCRBの設定、DRCRAの設定が順に必要になります

ABWCR(バス幅コントロールレジスタ)
エリア0〜1につながれたROM/RAMが8ビットアクセスであるか16ビットアクセスであるかを設定する。
ビット 7 6 5 4 3 2 1 0
ABW7 ABW6 ABW5 ABW4 ABW3 ABW2 ABW1 ABW0
それぞれ8ビットアクセスの時1,16ビットアクセスの時0。
エリア3,4,5に16ビットアクセスのDRAMを増設したのでABWCR="11000111"=0xC7。

RTCOR(リフレッシュタイムコンスタントレジスタ)
RTMCSRで決められた周期でRTCNTがカウントアップし、RTCNTとRTCORとが毎回比較され、一致するとリフレッシュ要求が起こる。

RTMCSR(リフレッシュタイマコントロール/ステータスレジスタ)
ビット 7 6 5 4 3 2 1 0
CMF CMIE CKS2 CKS1 CKS0 (1) (1) (1)
CMF,CMIEは使わないので初期値の0にしておく。
CKSによってRTCNTのカウントするタイミングを設定する。
システムクロックφとすると、
CKS
0 カウントなし
1 φ/2
2 φ/8
3 φ/32
4 φ/128
5 φ/512
6 φ/2048
7 φ/4096
でRTCNTがカウントアップされる。
今回使うDRAMのデータシートからリフレッシュ周期は5117800=2048回/32mS,5118160=1024回/16msであるから最低でも1024/0.016=64kHzのリフレッシュ。
システムクロックは20MHzであるから、
CKS=6,RTCOR=7に設定し20MHz/2048*9=68.3kHzのリフレッシュ。

よって、RTCOR=7,RTMCSR="00110111"=0x37

DRCRB(DRAMコントロールレジスタB)
ビット 7 6 5 4 3 2 1 0
MXC1 MXC0 CSEL RCYCE (1) TPC RCW RLW
MXCはカラムアドレスのビット数を設定する。
MXC
0 8ビット
1 9ビット
2 10ビット
おまけのDRAMにA0-9、増設したDRAMにA1-10にそれぞれカラムアドレス10ビットのものを使っているのでMXC=2
CSELはUCAS,LCASの出力端子の設定。PB4,5を使うのでCSEL=0
RCYCEはCASビフォアRAS(CBS)リフレッシュをするかしないか。するのでRCYCE=1
TPCはCBSリフレッシュにおいてCAS,RASをHにしたときのウェイトを決める。ウェイト1にするのでTPC=0
RCWはリード、ライト時のRAS,CAS間にウェイトを入れるかどうかを決める。必要ないのでRCW=0
RLWはリフレッシュ時のCAS,RAS間にウェイトを入れるかどうかを決める。これも必要ないのでRLW=0

よって、DRCRB="10011000"=0x98

DRCRA(DRAMコントロールレジスタA)
ビット 7 6 5 4 3 2 1 0
DRAS2 DRAS1 DRAS0 (1) BE RDM SRFMD RFSHE
DRASはエリア2〜5のそれぞれででDRAMを使うのかSRAMなどを使うのかを設定する。
DRAS DRAMを使う空間
0 DRAMは使わない
1 エリア2(CS2)のみ
2 エリア2(CS2),3(CS3)
3 エリア2,3をCS2だけで4Mの空間として使う?
4 エリア2(CS2),3(CS3),4(CS4)
5 エリア2(CS2),3(CS3),4(CS4),5(CS5)
6 エリア2,3をCS2、エリア4,5をCS4で使う
7 エリア2〜5をCS2で使う
エリア2におまけDRAM,エリア3,4,5にDRAMを増設したのでDRAS=5
BEはDRAMが高速ページモードを使える場合は1で使うようにすると連続でメモリを読む場合は早くなる。このDRAMは使えるのでBE=1
RDMはBE=1のときにされるバーストアクセス時にRASアップモードを使うかRASダウンモードを使うか。おまけDRAMはRASダウンモード出ないといけないようなのでRDM=0
SRFMDはセルフリフレッシュをするかどうか。おまけDRAMは対応していないので禁止のSRFMD=0
RFSHEはRFSH端子からリフレッシュ信号を出すかどうか。今回接続していないので出力禁止のRFSHE=0

よって、DRCRA="10111000"=0xB8


こうしてDRAMの設定が終わると次はバスの設定をします。

モード5ではアドレスバスなどのバス関係のピンをバス用として使うのために
それぞれのポートのDDRを出力モードにしないと使えないので
P1DDR = 0xff アドレスA0-A7
P2DDR = 0x07 アドレスA8-A10
P8DDR = 0x0E CS1〜3
で有効にします

WCRH,WCRL(ウェイトコントロールレジスタ)
ビット 7 6 5 4 3 2 1 0
WCRH W71 W70 W61 W60 W51 W50 W41 W40
WCRL W31 W30 W21 W20 W11 W10 W01 W00
W7-W0はそれぞれのエリアのウェイトステートを決める。
H8は20MHz動作なので1クロック50ns,DRAMのCASからのアクセス時間(tCAC)がmax15nsなので余裕で大丈夫・・・なはず
ということでDRAMを接続したCS2〜5のウェイトステートは0からW2〜5=0

よってWCRH="11110000"=0xF0,WCRL="00001111"=0x0F

ASTCR(アクセスステートコントロールレジスタ)
ビット 7 6 5 4 3 2 1 0
AST7 AST6 AST5 AST4 AST3 AST2 AST1 AST0
それぞれのエリアのアクセスステート数を決める。
前述のように(多少違うが)DRAMは速いので最小で十分。

よってASTCR="110000011"=0xC3

まとめると(ヘッダファイルはルネサスのからDLできるものを使用)
BSC.ABWCR.BYTE = 0xC7;

BSC.RTCOR = 7;
BSC.RTMCSR.BYTE = 0x37;
BSC.DRCRB.BYTE = 0x98;
BSC.DRCRA.BYTE = 0xB8;

P1DDR = 0xff;
P2DDR = 0x07;
P8DDR = 0x0E;

BSC.WCR.BYTE.H = 0xF0;
BSC.WCR.BYTE.L = 0x0F;

BSC.ASTCR.BYTE = 0xC3;

これで使えるはずです

最終更新2010-06-01

  • 20MHz/2048*7=68.3kHzのリフレッシュ。 -- 町工場のおじさん (2009-10-21 19:20:45)
  • 20MHz/2048*7=68.3kHzのリフレッシュ ではなくて /7 = 1.39Khz になりませんか? -- 町工場のおじさん (2009-10-21 19:22:19)
  • 20MHz(50ns)を2048分周したクロックは50*2048=102400nsで、これを7個カウントすると102400*7=716800ns=1.4kHzですね。クロックの周期が7倍になるところを周波数を7倍にたところが勘違いと思います。 -- マイコン読解中 (2010-06-01 19:36:02)
名前:
コメント:

タグ:

+ タグ編集
  • タグ:

このサイトはreCAPTCHAによって保護されており、Googleの プライバシーポリシー利用規約 が適用されます。

最終更新:2010年06月01日 19:36