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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.