Forum: Mikrocontroller und Digitale Elektronik Xplain SDRAM Frage


von M. Н. (Gast)


Lesenswert?

Hallo Leute.

Ich habe ein kleines Verständnisproblem mit DEM EBI des ATxmega128a1.

Auf Seite 284 dieses Datenblattes 
(http://www.atmel.com/dyn/resources/prod_documents/doc8077.pdf) ist 
unten eine Tabelle.

wofür ist die da. Habe codebeispiele gesehen, da wird ASIZE (beim 
Xplain-board) auf 8K und bei anderen auf 8M gesetzt. wie muss ich das 
CTRLA-Register für 8MB SDram einstellen, wenn es bei der Adresse 0x4000 
losgeht?

Gruß M.H.

von M. Н. (Gast)


Lesenswert?

Habe folgenden Code zum Initialisieren gefunden:
1
; SDRAM initialisieren
2
; läuft so mit 64MHz / 8MB SDRAM "MT48LC16M4A2TG" im "Three-port SDRAM"-Modus
3
SDRAM1:  ldi  h1, 0x0F
4
  sts  PORTH_OUT, h1  ; Set signals which are active-low to high value
5
6
  ldi  h1, 0xFF    ; Configure bus pins as outputs(except for data lines)
7
  sts  PORTH_DIR, h1  ; WE, CAS, RAS, DQM, BA0, BA1, CKE, CLK
8
  sts  PORTK_DIR, h1  ; A[7:0]
9
  ldi  h1, 0xF0
10
  sts  PORTJ_DIR, h1  ; A[11:8], D[3:0]
11
12
; Initialize EBI
13
  ldi  h1, 0b00001101  ; 4 bit data bus | EBI enabled with 3-port interface (SRAM: No address multiplexing)
14
  sts  EBI_CTRL, h1
15
16
  ldi  h1,  EBI_SDROW_bm | EBI_SDCOL_10BIT_gc  ; Row addressing A0-A11 (12) | Column addressing A0-A9 (10)
17
  sts  EBI_SDRAMCTRLA, h1
18
19
; Einstellungen S. 48..49 64MHz --> 15,625ns
20
; MRDLY:    LOAD MODE REGISTER command to ACTIVE or REFRESH command: 2T
21
; ROWCYCDLY: delay between a Refresh and an Activate command: 3T
22
; RPDLY:    delay between a Pre-charge command and another command: 20ns --> 2T
23
; WRDLY:    Write Recovery time: 1 CLK + 7.5 ns --> 2T
24
; ESRDLY:   Exit Self Refresh to Active Delay: 75ns --> 5T
25
; ROWCOLDLY: delay between an Activate command and a Read/Write command: 20ns --> 2T
26
27
  ldi  h1, 0b10011010  ; 2 CLK PER2 cycles delay, 3 CLK PER2 cycles delay, 2 CLK PER2 cycles delay
28
  sts  EBI_SDRAMCTRLB, h1
29
  ldi  h1, 0b10101010  ; 2 CLK PER2 cycles delay, 5 CLK PER2 cycles delay, 2 CLK PER2 cycles delay
30
  sts  EBI_SDRAMCTRLC, h1
31
  ldi  h1, 0xE8    ; 15.6µs/row = 64ms --> 0,000015625 * 64000000Hz = 1000
32
  sts  EBI_REFRESH, h1
33
  ldi  h1, 0x03
34
  sts  EBI_REFRESH+1, h1
35
  ldi  h1, 0x00
36
  sts  EBI_INITDLY, h1
37
  ldi  h1, 0x19    ; 100µs --> 0,0001s * 64000000Hz = 6400T
38
  sts  EBI_INITDLY+1, h1
39
  ldi  h1, 0b00000000
40
  sts  EBI_CS3_CTRLB, h1
41
;  ldi  h1, 0x40    ; BasAddr geht für 8/16kByte AdrSpace
42
;  ldi  h1, 0x80    ; BasAddr für 32kByte AdrSpace - ansonsten Basisadresse laufend an der Grenze ändern
43
  ldi  h1, 0x00    ; BasAddr für 8MByte AdrSpace
44
  sts  EBI_CS3_BASEADDR, h1
45
;  ldi  h1, 0x00    ; BasAddr geht für 8/16kByte AdrSpace
46
  ldi  h1, 0x80    ; BasAddr für 8MByte AdrSpace
47
  sts  EBI_CS3_BASEADDR+1, h1
48
;  ldi  h1, 0x17    ; AdrSpace 8kByte
49
;  ldi  h1, 0x1B    ; AdrSpace 16kByte
50
;  ldi  h1, 0x1F    ; AdrSpace 32kByte
51
  ldi  h1, 0x3F    ; AdrSpace 8MByte
52
  sts  EBI_CS3_CTRLA, h1

Hier wird EBI_CS3_CTRLA mit 0x3F geladen. Warum dieser Wert?
und die Basisadresse wird auf 0x8000 gesetzt.

wie komm man auf diese Werte? warum nich Basisadresse: 0x4000
und CTRLA 0xff?????

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.