Forum: Mikrocontroller und Digitale Elektronik Probleme bei SDRAM Initialisierung beim LPC2578


von mkrug (Gast)


Lesenswert?

Hallo,

ich spiele etwas mit dem LPC2478 EVAL Board von embedded artists herum. 
Programmieren und ausführen von Programmen funktioniert 
soweit(openocd0.3.0, amontec tiny-key, yargato gnu tool-chain). Wenn ich 
allerdings das Beispiel von embedded artists zur LCD Ansteuerung 
debuggen möchte stürzt der Debugger immer bei der Initialisierung des 
SDRAM ab. Das passiert egal ob ich gdb-insight oder eclipse als 
front-end nehme. Das SDRAM wird als 'Video RAM' für den LCD Controller 
benützt. Der eigentliche Programmcode steht bei mir immer im internen 
Flash.

Konkret stürzt der Debugger beim ausführen folgender Zeile ab:
/* Mem clock enable, CLKOUT runs, send command: NOP */
EMC_DYN_CTRL = 0x00000183;

Ich habe genau den selben Effekt wenn ich die SDRAM Initialisierung 
nehme die im NXP code bundle zur Verfügung gestellt wird.

Die Fehlermeldung die gdb ausgibt lautet:
timeout waiting for SYSCOMP & DBGACK, last DBG_STATUS: 0

Untenstehend hab ich noch die komplette Funktion sdramINIT angehängt. 
Ich lasse den LPC2478 derzeit mit 36MHz laufen da es von embedded 
artists den Hinweis gibt das das Board bzgl SDRAM nur bis 48MHz stabil 
läuft. Allerdings habe ich festgestellt das bei der Programmausführung 
aus dem Flash das SDRAM offensichtlich auch bei einem µC Takt von 72MHz 
noch korrekt funktioniert.

Bin für jeden Hinweis dankbar.

Gruss
Markus


sdramInit(void)
{
volatile unsigned int i, dummy = dummy;

// SCS &= ~0x00000002;
// SCS |= 0x00000002;
EMC_CTRL = 0x00000001;
PCONP |= 0x00000800; /* Turn on EMC PCLK */
PINSEL4 = 0x50000000;
PINSEL5 = 0x55010115;
PINSEL7 = 0x55555555;

PINSEL6 = 0x55555555;
PINSEL8 = 0x55555555;
PINSEL9 = 0x50555555;

//all registers...
EMC_DYN_RP = 1;
EMC_DYN_RAS = 3;
EMC_DYN_SREX = 5;
EMC_DYN_APR = 1;
EMC_DYN_DAL = 5;
EMC_DYN_WR = 1;
EMC_DYN_RC = 5;
EMC_DYN_RFC = 5;
EMC_DYN_XSR = 5;
EMC_DYN_RRD = 1;
EMC_DYN_MRD = 1;
EMC_DYN_RD_CFG = 1;

//
EMC_DYN_RASCAS0 = 0x00000202;

//
EMC_DYN_CFG0 = 0x00005488;


//wait 100mS
mdelay(100);

//Send command: NOP
// THE NEXT COMMAND LEADS TO THE DEBUGGER CRASH
EMC_DYN_CTRL = 0x00000183;

//wait 200mS
mdelay(200);


//Send command: PRECHARGE-ALL, shortest possible refresh period
EMC_DYN_CTRL = 0x00000103;
EMC_DYN_RFSH = 0x00000002;

//wait 128 ABH clock cycles
for(i=0; i<0x40; i++)
asm volatile(" nop");

//Set correct refresh period
EMC_DYN_RFSH = (unsigned int)(Fcclk  250  8192) + 1;

//Send command: MODE
EMC_DYN_CTRL = 0x00000083;

//Set mode register in SDRAM
dummy = *((volatile unsigned int*)(SDRAM_BASE | (0x22 << 11)));


//Send command: NORMAL
EMC_DYN_CTRL = 0x00000000;

//Enable buffer
EMC_DYN_CFG0 |= 0x00080000;

//initial system delay
mdelay(1);

}

von Star K. (starkeeper)


Lesenswert?

Hast du das problem lösen können? Ich habe gerade das gleiche Problem. 
Beim ersten Schreiben in EMC_DYN_CTRL scheint der Controller den Abgang 
zu machen.

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.