//--------------------------------------------------------------
// 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);
}
Esempio n. 2
0
//--------------------------------------------------------------
// 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;
}
Esempio n. 3
0
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);
    }
  }
}