//-------------------------------------------------------------- // Init vom externen SDRAM // Return_wert : // -> ERROR , wenn SDRAM nicht gefunden wurde // -> SUCCESS , wenn SDRAM gefunden wurde //-------------------------------------------------------------- ErrorStatus UB_SDRAM_Init(void) { ErrorStatus ret_wert=ERROR; uint16_t oldwert,istwert; static uint8_t init_ok=0; // initialisierung darf nur einmal gemacht werden if(init_ok!=0) { if(init_ok==1) { return(SUCCESS); } else { return(ERROR); } } // IO-Lines initialisieren P_SDRAM_InitIO(); // FMC initialisieren P_SDRAM_InitFMC(); //----------------------------------------- // check ob SDRAM vorhanden ist // schreib-/lese-Test auf Adr 0x00 //----------------------------------------- oldwert=UB_SDRAM_Read16b(0x00); UB_SDRAM_Write16b(0x00, 0x5A3C); istwert=UB_SDRAM_Read16b(0x00); UB_SDRAM_Write16b(0x00, oldwert); if(istwert==0x5A3C) ret_wert=SUCCESS; // RAM vorhanden // init Mode speichern if(ret_wert==SUCCESS) { init_ok=1; } else { init_ok=2; } return(ret_wert); }
//-------------------------------------------------------------- // Init vom externen SDRAM // Return_wert : // -> ERROR , wenn SDRAM nicht gefunden wurde // -> SUCCESS , wenn SDRAM gefunden wurde //-------------------------------------------------------------- ErrorStatus UB_SDRAM_Init(void) { ErrorStatus result = ERROR; uint16_t old_value, new_value; static uint8_t init_ok = 0; // Initialization may be made only once if (init_ok == 0) { init_ok = 2; // IO-Lines initialisieren P_SDRAM_InitIO(); // FMC initialisieren P_SDRAM_InitFMC(); //----------------------------------------- // check ob SDRAM vorhanden ist // schreib-/lese-Test auf Adr 0x00 //----------------------------------------- old_value = UB_SDRAM_Read16b(0); UB_SDRAM_Write16b(0, 0x5A3C); new_value = UB_SDRAM_Read16b(0); UB_SDRAM_Write16b(0, old_value); if (new_value == 0x5A3C) { init_ok = 1; result = SUCCESS; } } else if (init_ok == 1) { result = SUCCESS; } return result; }
int main(void) { uint32_t adr; uint8_t sollwert, istwert; ErrorStatus ramcheck; SystemInit(); // Quarz Einstellungen aktivieren // init der LEDs UB_Led_Init(); // init vom externen SDRAM (und test ob es vorhanden ist) ramcheck=UB_SDRAM_Init(); if(ramcheck==SUCCESS) { // zum test RAM komplett füllen sollwert=0xA1B2; for(adr=0;adr<SDRAM_MAX_ADR;adr+=2) { UB_SDRAM_Write16b(adr,sollwert); sollwert++; } // Ram wieder auslesen und prüfen sollwert=0xA1B2; for(adr=0;adr<SDRAM_MAX_ADR;adr+=2) { istwert=UB_SDRAM_Read16b(adr); if(istwert!=sollwert) { // RAM-Inhalt fehlerhaft ramcheck=ERROR; } sollwert++; } } while(1) { if(ramcheck==SUCCESS) { // wenn kein Fehler -> gruene LED leuchtet UB_Led_On(LED_GREEN); } else { // wenn Fehler -> rote LED blinkt UB_Led_Toggle(LED_RED); Delay(5000000); } } }