//--------------------------------------------------------------
// 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;
}