Перейти к содержанию
    

IAR + Jlink + отладка в SDRAM

Доброго времени суток.

 

Неделю терзаю отладочную плату LPC4357-EVB. Хочу научится исполнятся и отлаживаться из SDRAM MT48LC16M16A2, которая есть на плате. Никто не может поделится *.mac файлом для отладки из SDRAM для Jlink для семейства LPC43xx?

 

 

Вот мой код, который не работает

 

 


__var EMCClock;





__var FUNC0; 
__var FUNC1; 		
__var FUNC2; 		
__var FUNC3; 		
__var FUNC4;		
__var FUNC5;			
__var FUNC6;			
__var FUNC7;			



__var MD_PUP;
__var MD_BUK;
__var MD_PLN;
__var MD_PDN;
__var MD_EHS;
__var MD_EZI;
__var MD_ZI;
__var MD_EHD0;
__var MD_EHD1;
__var MD_EHD2;
__var MD_PLN_FAST;




EMC_SDRAM_REFRESH(ns)
{
   EMCClock = 108000000;
   __var tCLK_ns;
   tCLK_ns  = ((double)EMCClock / 16000000000 );    // CCLK period in ns
   return (int)((double)(ns) * tCLK_ns + 1);          // convert ns to CCLKs
}

NS_2_CLKS(ns)
{
   EMCClock = 108000000;
   __var tCLK_ns;
   tCLK_ns  = ((double)EMCClock / 1000000000.0 );    // CCLK period in ns
   return (int)((double)(ns) * tCLK_ns );          // convert ns to CCLKs
}


__setupEMC(){
__var tmpclk;
__var tempReg;
__var freq;
__var psel;
__var pval;

EMCClock = 108000000;

FUNC0 = 		0x0;			
FUNC1 =			0x1;				
FUNC2 =			0x2;				
FUNC3 =			0x3;				
FUNC4 =			0x4;
FUNC5 =			0x5;
FUNC6 =			0x6;
FUNC7 =			0x7;

MD_PUP = (0x0 << 3);
MD_BUK = (0x1 << 3);
MD_PLN = (0x2 << 3);
MD_PDN = (0x3 << 3);
MD_EHS = (0x1 << 5);
MD_EZI = (0x1 << 6);
MD_ZI  = (0x1 << 7);
MD_EHD0 = (0x1 << 8);
MD_EHD1 = (0x1 << 9);
MD_EHD2 = (0x3 << 8);
MD_PLN_FAST = (MD_PLN | MD_EZI | MD_ZI | MD_EHS);

//Setup CGU


//CGU_SetXTALOSC(12000000);
__writeMemory32(__readMemory32(0x40050018, "Memory") & ~(1<<2) , 0x40050018, "Memory"); // LPC_CGU->XTAL_OSC_CTRL &= ~(1<<2);

//CGU_EnableEntity(CGU_CLKSRC_XTAL_OSC, ENABLE);
__writeMemory32(__readMemory32(0x40050018, "Memory") & ~(1<<0) , 0x40050018, "Memory"); // LPC_CGU->XTAL_OSC_CTRL &= ~CGU_CTRL_EN_MASK;  

__delay(100);	///*Delay for stable clock


//CGU_EntityConnect(CGU_CLKSRC_XTAL_OSC, CGU_CLKSRC_PLL1);
tempReg = __readMemory32(0x40050044, "Memory"); //CGU_ADDRESS32(LPC_CGU->PLL1_CTRL);
tempReg &= ~(0xF<<24);
tempReg |= (6<<24) | (1<<11);
__writeMemory32(tempReg , 0x40050044, "Memory"); //CGU_ADDRESS32(LPC_CGU->PLL1_CTRL) = tempReg;


//CGU_SetPLL1(9);                                                                        
freq = 12000000 * 9;

tempReg = __readMemory32(0x40050044, "Memory"); //CGU_ADDRESS32(LPC_CGU->PLL1_CTRL);   
tempReg &= ~((1<<6) | (1<<1) | (1<<7) | (0x03<<8) | (0xFF<<16) | (0x03<<12));//	LPC_CGU->PLL1_CTRL &= ~(CGU_PLL1_FBSEL_MASK |   //0x06000800	CGU_PLL1_BYPASS_MASK |	CGU_PLL1_DIRECT_MASK |	(0x03<<8) | (0xFF<<16) | (0x03<<12));
__writeMemory32(tempReg , 0x40050044, "Memory");

pval=1;
while(2*(pval)*freq < 156000000) 
{
 psel++;
 pval*=2;
}
tempReg |= ((9-1)<<16) | (0<<12) | (psel<<8) | (1<<6);  //0x06080840
__writeMemory32(tempReg , 0x40050044, "Memory");

//CGU_EnableEntity(CGU_CLKSRC_PLL1, ENABLE);
tempReg = __readMemory32(0x40050044, "Memory"); //CGU_ADDRESS32(LPC_CGU->PLL1_CTRL);   //PLL1_CTRL &= ~CGU_CTRL_EN_MASK;
tempReg &= ~1;
__writeMemory32(tempReg , 0x40050044, "Memory");

while((__readMemory32(0x40050040, "Memory")&1) == 0x0);

//CGU_EntityConnect(CGU_CLKSRC_PLL1, CGU_BASE_M4);
tempReg = __readMemory32(0x4005006C, "Memory"); //CGU_ADDRESS32(LPC_CGU->CGU_BASE_M4);   
tempReg &= ~(0xF<<24);
tempReg |= (9<<24) | (1<<11);
__writeMemory32(tempReg , 0x4005006C, "Memory");     //CGU_ADDRESS32(CGU_BASE_M4) = tempReg;

//PIN

 __writeMemory32(0x000000F3, 0x4008609C, "Memory"); // D0
 __writeMemory32(0x000000F3, 0x400860A0, "Memory"); // D1
 __writeMemory32(0x000000F3, 0x400860A4, "Memory"); // D2
 __writeMemory32(0x000000F3, 0x400860A8, "Memory"); // D3 
 __writeMemory32(0x000000F3, 0x400860AC, "Memory"); // D4
 __writeMemory32(0x000000F3, 0x400860B0, "Memory"); // D5
 __writeMemory32(0x000000F3, 0x400860B4, "Memory"); // D6
 __writeMemory32(0x000000F3, 0x400860B8, "Memory"); // D7

 __writeMemory32(0x000000F2, 0x40086290, "Memory"); // D8
 __writeMemory32(0x000000F2, 0x40086294, "Memory"); // D9
 __writeMemory32(0x000000F2, 0x40086298, "Memory"); // D10
 __writeMemory32(0x000000F2, 0x4008629C, "Memory"); // D11
 __writeMemory32(0x000000F2, 0x40086280, "Memory"); // D12
 __writeMemory32(0x000000F2, 0x40086284, "Memory"); // D13
 __writeMemory32(0x000000F2, 0x40086288, "Memory"); // D14
 __writeMemory32(0x000000F2, 0x4008628C, "Memory"); // D15

 __writeMemory32(0x000000B3, 0x40086124, "Memory"); // A0
 __writeMemory32(0x000000B3, 0x40086128, "Memory"); // A1
 __writeMemory32(0x000000B3, 0x4008612C, "Memory"); // A2
 __writeMemory32(0x000000B3, 0x40086130, "Memory"); // A3
 __writeMemory32(0x000000B3, 0x40086134, "Memory"); // A4
 __writeMemory32(0x000000B2, 0x40086080, "Memory"); // A5
 __writeMemory32(0x000000B2, 0x40086084, "Memory"); // A6
 __writeMemory32(0x000000B2, 0x40086088, "Memory"); // A7

 __writeMemory32(0x000000B3, 0x40086120, "Memory"); // A8
 __writeMemory32(0x000000B3, 0x4008611C, "Memory"); // A9
 __writeMemory32(0x000000B2, 0x40086118, "Memory"); // A10
 __writeMemory32(0x000000B2, 0x40086108, "Memory"); // A11
 __writeMemory32(0x000000B2, 0x40086104, "Memory"); // A12
 __writeMemory32(0x000000B2, 0x40086100, "Memory"); // A13
 __writeMemory32(0x000000B1, 0x40086320, "Memory"); // A14


 __writeMemory32(MD_PLN_FAST+FUNC3, 0x40086324, "Memory"); //DYCS0//scu_pinmux(	6	,	9	,	MD_PLN_FAST	,	3	);//DYCS0
 __writeMemory32(MD_PLN_FAST+FUNC3, 0x40086328, "Memory"); //DQMOUT1//scu_pinmux(	6	,	10	,	MD_PLN_FAST	,	3	);//DQMOUT1
 __writeMemory32(MD_PLN_FAST+FUNC3, 0x4008632C, "Memory"); //CKEOUT0//scu_pinmux(	6	,	11	,	MD_PLN_FAST	,	3	);//CKEOUT0
 __writeMemory32(MD_PLN_FAST+FUNC3, 0x40086330, "Memory"); //DQMOUT0//scu_pinmux(	6	,	12	,	MD_PLN_FAST	,	3	);//DQMOUT0


 __writeMemory32(MD_PLN_FAST+FUNC3, 0x40086098, "Memory"); //scu_pinmux(0x1,  6,  (MD_PLN | MD_EZI | MD_ZI | MD_EHS), FUNC3);  /* P1_6: WE (function 0) errata */
 __writeMemory32(MD_PLN_FAST+FUNC3, 0x40086310, "Memory"); //scu_pinmux(0x6,  4,  (MD_PLN | MD_EZI | MD_ZI | MD_EHS), FUNC3);  /* P6_4: CAS  (function 0) > CAS# errata */
 __writeMemory32(MD_PLN_FAST+FUNC3, 0x40086314, "Memory"); //scu_pinmux(0x6,  5,  (MD_PLN | MD_EZI | MD_ZI | MD_EHS), FUNC3);  /* P6_5: RAS  (function 0) > RAS# errata */


 __writeMemory32(MD_PLN_FAST+FUNC0, 0x40086C00, "Memory"); //LPC_SCU_CLK(0) = 0 + (MD_PLN | MD_EZI | MD_ZI | MD_EHS); /* SFSCLK0: EXTBUS_CLK0  (function 0, from datasheet) > CLK ds */


//Static setup

__writeMemory32(NS_2_CLKS(55), 0x4000524C, "Memory"); //     LPC_EMC->STATICWAITRD2 = NS_2_CLKS(55);	
__writeMemory32(0x81, 0x40005240, "Memory");          //     LPC_EMC->STATICCONFIG2 = /*1<<19| */0x81;	
__writeMemory32(NS_2_CLKS(10), 0x40005248, "Memory"); //	  LPC_EMC->STATICWAITOEN2 = NS_2_CLKS(10);	
__writeMemory32(NS_2_CLKS(10), 0x40005244, "Memory"); //	  LPC_EMC->STATICWAITWEN2 = NS_2_CLKS(10);	
__writeMemory32(NS_2_CLKS(55), 0x40005250, "Memory"); //	  LPC_EMC->STATICWAITPAG2 = NS_2_CLKS(55);	
__writeMemory32(NS_2_CLKS(55), 0x40005254, "Memory"); //	  LPC_EMC->STATICWAITWR2 = NS_2_CLKS(55);	
__writeMemory32(NS_2_CLKS(55), 0x40005258, "Memory"); //	  LPC_EMC->STATICWAITTURN2 = NS_2_CLKS(55);	/* Select EMC clock-out */

//Dynamic setup

__writeMemory32(0x00000001, 0x40005000, "Memory"); //	  LPC_EMC->CONTROL 	= 0x00000001;
__writeMemory32(0x00000000, 0x40005008, "Memory"); //	  LPC_EMC->CONFIG  	= 0x00000000;
__writeMemory32(((0<<14) + (3<<9) + (1<<7)), 0x40005100, "Memory"); //	  LPC_EMC->DYNAMICCONFIG0    = 0<<14 | 3<<9 | 1<<7; /* 256Mb, 16Mx16, 4 banks, row=13, column=9 */

__writeMemory32(0x00000303, 0x40005104, "Memory"); //	  LPC_EMC->DYNAMICRASCAS0    = 0x00000303; /* 1 RAS, 3 CAS latency */
__writeMemory32(0x00000001, 0x40005028, "Memory"); //	  LPC_EMC->DYNAMICREADCONFIG = 0x00000001; /* Command delayed strategy, using EMCCLKDELAY */


__writeMemory32(NS_2_CLKS(20), 0x40005030, "Memory"); //	  	LPC_EMC->DYNAMICRP         = NS2CLK(pclk, 20);
__writeMemory32(NS_2_CLKS(42), 0x40005034, "Memory"); //	  	LPC_EMC->DYNAMICRAS        = NS2CLK(pclk, 42);
__writeMemory32(NS_2_CLKS(63), 0x40005038, "Memory"); //	  	LPC_EMC->DYNAMICSREX       = NS2CLK(pclk, 63);
__writeMemory32(0x00000005, 0x4000503C, "Memory"); //	  	LPC_EMC->DYNAMICAPR        = 0x00000005;
__writeMemory32(0x00000005, 0x40005040, "Memory"); //	  	LPC_EMC->DYNAMICDAL        = 0x00000005;
__writeMemory32(0x00000002, 0x40005044, "Memory"); //	  	LPC_EMC->DYNAMICWR         = 2;
__writeMemory32(NS_2_CLKS(63), 0x40005048, "Memory"); //	  	LPC_EMC->DYNAMICRC         = NS2CLK(pclk, 63);
__writeMemory32(NS_2_CLKS(63), 0x4000504C, "Memory"); //	  	LPC_EMC->DYNAMICRFC        = NS2CLK(pclk, 63);
__writeMemory32(NS_2_CLKS(63), 0x40005050, "Memory"); //	  	LPC_EMC->DYNAMICXSR        = NS2CLK(pclk, 63);
__writeMemory32(NS_2_CLKS(14), 0x40005054, "Memory"); //	  	LPC_EMC->DYNAMICRRD        = NS2CLK(pclk, 14);
__writeMemory32(0x00000002, 0x40005058, "Memory"); //	  	LPC_EMC->DYNAMICMRD        = 0x00000002;

__delay(100);

__writeMemory32(0x00000183, 0x40005020, "Memory"); 	//LPC_EMC->DYNAMICCONTROL    = 0x00000183; /* Issue NOP command */

__delay(200);

__writeMemory32(0x00000103, 0x40005020, "Memory"); 	// 	LPC_EMC->DYNAMICCONTROL    = 0x00000103; /* Issue PALL command */

__writeMemory32(EMC_SDRAM_REFRESH(70), 0x40005024, "Memory"); 	// 	LPC_EMC->DYNAMICREFRESH    = EMC_SDRAM_REFRESH(pclk,70); /* ( n * 16 ) -> 32 clock cycles */

__delay(200);

tmpclk = 15625*EMCClock/1000000000/16;

__writeMemory32(tmpclk, 0x40005024, "Memory"); // LPC_EMC->DYNAMICREFRESH    = tmpclk; /* ( n * 16 ) -> 736 clock cycles -> 15.330uS at 48MHz <= 15.625uS ( 64ms / 4096 row ) */EMC_CONTROL
__writeMemory32(0x00000083, 0x40005020, "Memory"); // LPC_EMC->DYNAMICCONTROL    = 0x00000083; /* Issue MODE command */


tempReg = __readMemory32((0x28000000 | (3<<4| 3)<<11), "Memory");        //temp = *((volatile uint32_t *)(SDRAM_ADDR_BASE | (3<<4| 3)<<11)); /* 4 burst, 3 CAS latency */

__writeMemory32(0x00000000, 0x40005020, "Memory"); //LPC_EMC->DYNAMICCONTROL    = 0x00000000; /* Issue NORMAL command */

//[re]enable buffers
__writeMemory32(__readMemory32(0x40005100, "Memory") |(1<<19) , 0x40005100, "Memory"); //	LPC_EMC->DYNAMICCONFIG0    |= 1<<19; 


__writeMemory32(0x01020304, 0x28000020, "Memory");
if(__readMemory32(0x28000020, "Memory") !=  0x01020304)
  __message "fail\n";
else
  __message "not fail\n";


__writeMemory32(0x28000000, 0x40043100, "Memory"); // map SPIFI to shadow area at address 0
}

__releaseCoreReset()
{
 __writeMemory32((~(__readMemory32(0x40053154,"Memory"))) & (~(1<<24)),0x40053104,"Memory");
}

__loadLoopCode()
{
 __writeMemory32(0x00001F00,0x28080000,"Memory");   /* dummy stack pointer */
 __writeMemory32(0x000000D5,0x2880004,"Memory");   /* reset handler */
 __writeMemory32(0xE7FEE7FE,0x280800D4,"Memory");   /* jump to itself instruction for M0a */
 __writeMemory32(0x28080000,0x40043404,"Memory");   /* M0 shadow pointer. */
}

execUserReset()
{
 __message "execUserReset\n";
 __setupEMC();
 __releaseCoreReset();
 __message "execUserReset Finish\n";
}

execUserPreload(){
 __message "execUserPreload\n";
 __setupEMC();
 __loadLoopCode();
 __releaseCoreReset();
 __message "execUserPreload Finish\n";
}

 

IAR выдает:

 

Tue Apr 16, 2013 09:16:42: Loaded macro file: C:\Program Files\IAR Systems\Embedded Workbench 6.5\arm\config\flashloader\NXP\LPC43xx_extRAM.mac

Tue Apr 16, 2013 09:16:42: Loaded macro file: C:\Program Files\IAR Systems\Embedded Workbench 6.5\arm\config\debugger\NXP\Trace_LPC18xx_LPC43xx.dmac

Tue Apr 16, 2013 09:17:06: Sign on message from :

Segger JLink ARM JTAG

Tue Apr 16, 2013 09:17:06: execUserPreload

Tue Apr 16, 2013 09:17:07: not fail

Tue Apr 16, 2013 09:17:07: execUserPreload Finish

Tue Apr 16, 2013 09:17:07: 7820 bytes downloaded and verified (16.28 Kbytes/sec)

Tue Apr 16, 2013 09:17:07: Warning: Target inconsistency detected in Memory range 0x28000000-0x28000113

Tue Apr 16, 2013 09:17:07: Warning: Target inconsistency detected in Memory range 0x28000140-0x28001EB6

Tue Apr 16, 2013 09:17:08: Warning: There were warnings during download, see Log Window

Tue Apr 16, 2013 09:17:08: Loaded debugee: D:\Documents\ÌÊ\LPC43xx\LPC4300-demos\Examples\LCD_ExtSDRAM\EWARM\LPC4350_IntSRAM\Exe\LCD_ExtSDRAM.out

Tue Apr 16, 2013 09:17:09: WinRDI CPUread APSR failed

 

[RDI Error: 9] Error message should have been found on target

Tue Apr 16, 2013 09:17:09: Target reset

Tue Apr 16, 2013 09:17:09: Failed to load debugee: D:\Documents\ÌÊ\LPC43xx\LPC4300-demos\Examples\LCD_ExtSDRAM\EWARM\LPC4350_IntSRAM\Exe\LCD_ExtSDRAM.out

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...