Это понятно - в коде при старте есть код:
#ifdef XSDRAM_INIT
// assign GPIO to EMC
MODE0_0 = 0xFFFFFFFF;
MODE0_1 = 0x000FFFFF;
MODE1_0 = 0x00000000;
MODE1_1 = 0x00000000;
// enable EMC clk
// disable fractional divider
EMCESR0_bit.ESR_EN = EMCESR1_bit.ESR_EN = 0;
// release reset of the EMC
EMCRES = 1;
// Init SDRAM controller and memory
EMCCONTROL = 1; // Enable EMC
EMCDYNAMICREADCONFIG = 1; // Command delayed strategy, using AHBHCLKDELAY
EMCMISC = 0;
EMCDYNAMICRASCAS_bit.CAS = 2;
EMCDYNAMICRASCAS_bit.RAS = 2;
EMCDYNAMICRP = P2C(SDRAM_TRP);
EMCDYNAMICRAS = P2C(SDRAM_TRAS);
EMCDYNAMICSREX = P2C(SDRAM_TXSR);
EMCDYNAMICAPR = SDRAM_TAPR;
EMCDYNAMICDAL = SDRAM_TDAL+P2C(SDRAM_TRP);
EMCDYNAMICWR = SDRAM_TWR;
EMCDYNAMICRC = P2C(SDRAM_TRC);
EMCDYNAMICRFC = P2C(SDRAM_TRFC);
EMCDYNAMICXSR = P2C(SDRAM_TXSR);
EMCDYNAMICRRD = P2C(SDRAM_TRRD);
EMCDYNAMICMRD = SDRAM_TMRD;
EMCDYNAMICCONFIG = 0x0000680; // 13 row, 9 - col, SDRAM
// JEDEC General SDRAM Initialization Sequence
// DELAY to allow power and clocks to stabilize ~100 us
// NOP
EMCDYNAMICCONTROL = 0x4183;
Dly_us(200);
// PALL
EMCDYNAMICCONTROL_bit.SDRAMINI = 2;
EMCDYNAMICREFRESH = 1;
for(volatile Int32U i= 128; i; --i); // > 128 clk
EMCDYNAMICREFRESH = P2C(SDRAM_REFRESH) >> 4;
// COMM
EMCDYNAMICCONTROL_bit.SDRAMINI = 1;
// Burst 8, Sequential, CAS-2
volatile unsigned long Dummy = *(volatile unsigned short *)(SDRAM_BASE_ADDR | (0x23UL << 12));
// NORM
EMCDYNAMICCONTROL = 0x4000;
EMCDYNAMICCONFIG_bit.BUF_EN = 1;
#endif // XSDRAM_INIT
т.е. получается что при старте у меня контроллер уже инициализирован, остается только прописать диапазон внешней памяти в линкер и должно все работать:?
-DRAMSTART=0x30000000
-DRAMEND=0x32000000