Probleme bei SDRAM Initialisierung beim LPC2578

Gast #1535633
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);

}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren