zhangmangui 发表于 2014-4-9 21:42
这个就不好说了 在确认一下连到哪个区了
在CCS中读写是应该是字地址 而不是字节地址
你再试试吧 ...
谢谢你的提醒. 重新修改了GEL文件. 用的开发板的GEL是CCS3.3里面的GEL, 后来从网上找到SEED的, 参照修改了一下, 现在可以在仿真环境访问0X200000的空间了.
新问题, 程序放到NAND FLASH, 直接boot后做0X200000的读写测试, 却又不行了, 已经把gel的寄存器配置都改到程序里了.还不行??
/*******************************************************************************/
//
// Filename: GEL file for SEED_DEC5502
//
//******************************************************************************/
/*************************************************/
/* EMIF REGISTERS */
/*************************************************/
#define EMIF_GCTL1 0x800
#define EMIF_GCTL2 0x801
#define EMIF_CE11 0x802
#define EMIF_CE12 0x803
#define EMIF_CE01 0x804
#define EMIF_CE02 0x805
#define EMIF_CE21 0x808
#define EMIF_CE22 0x809
#define EMIF_CE31 0x80A
#define EMIF_CE32 0x80B
#define EMIF_SDCNT1 0x80C
#define EMIF_SDCNT2 0x80D
#define EMIF_SDREF1 0x80E
#define EMIF_SDREF2 0x80F
#define EMIF_SDEXT1 0x810
#define EMIF_SDEXT2 0x811
#define EMIF_CE1SECCTL1 0x822
#define EMIF_CE1SECCTL2 0x823
#define EMIF_CE0SECCTL1 0x824
#define EMIF_CE0SECCTL2 0x825
#define EMIF_CE2SECCTL1 0x828
#define EMIF_CE2SECCTL2 0x829
#define EMIF_CE3SECCTL1 0x82A
#define EMIF_CE3SECCTL2 0x82B
#define EMIF_CECTL1 0x840
#define EMIF_CECTL2 0x841
/*************************************************/
/* PLL REGISTERS */
/*************************************************/
#define PLLCSR 0x1C80
#define CK3SEL 0x1C82
#define PLLM 0x1C88
#define PLLDIV0 0x1C8A
#define PLLDIV1 0x1C8C
#define PLLDIV2 0x1C8E
#define PLLDIV3 0x1C90
#define OSCDIV1 0x1C92
#define WAKEUP 0x1C98
/*************************************************/
/* The Startup() function is executed when the GEL file is loaded. */
StartUp()
{
C5502_Init(); /* 初始化板卡 */
Init_CE23_SDRAM(); /* 初始化CE2,CE3空间的SDRAM */
GEL_TextOut("Gel StartUp Complete.\n");
}
OnReset()
{
Init_CE23_SDRAM(); /* 初始化CE2,CE3空间的SDRAM */
}
menuitem "C5502_Configuration";
hotmenu CPU_Reset()
{
GEL_Reset(); /* 复位目标系统并重装监视器 */
GEL_TextOut("CPU Reset Complete.\n");
}
/* Memory map based on MP/MC value=0 (BOOTM[2:0]!=0). */
hotmenu C5502_Init()
{
GEL_Reset(); /* 复位目标系统并重装监视器 */
Init_PLL_byF(); /* 将板卡主频设置为300Mhz */
GEL_MapOn(); /* 使能存储器映射 */
GEL_MapReset(); /* 复位存储器映射,禁止读写所有空间 */
/*------------------------- Program Space------------------------------------ */
GEL_MapAdd(0x0000C0u,0,0x00FF40u,1,1); /* DARAM */
GEL_MapAdd(0x010000u,0,0x7F0000u,1,1); /* External CE0 */
//GEL_MapAdd(0x400000u,0,0x400000u,1,1); /* External CE1 */
GEL_MapAdd(0x800000u,0,0x400000u,1,1); /* External CE2 */
/* For MP/MC=0 (BOOTM[2:0] != 0) */
GEL_MapAdd(0xC00000u,0,0x3F8000u,1,1); /* External CE3 */
GEL_MapAdd(0xFF8000u,0,0x008000u,1,0); /* PDROM */
/*------------------------- Data Space--------------------------------------- */
GEL_MapAdd(0x000000u,1,0x00005Fu,1,1); /* MMRs */
GEL_MapAdd(0x000060u,1,0x007FA0u,1,1); /* DARAM */
GEL_MapAdd(0x08000u,1,0x3F8000u,1,1); /* External CE0 */
//GEL_MapAdd(0x200000u,1,0x200000u,1,1); /* External CE1 */
GEL_MapAdd(0x400000u,1,0x200000u,1,1); /* External CE2 */
/* For MP/MC=0 (BOOTM[2:0] != 0)*/
GEL_MapAdd(0x600000u,1,0x1FC000u,1,1); /* External CE3 */
GEL_MapAdd(0x7FC000u,1,0x004000u,1,0); /* PDROM */
/*------------------------- IO Space------------------------------------------- */
GEL_MapAdd(0x0800u,2,0x0042u,1,1); /* EMIF 1KW */
GEL_MapAdd(0x0C00u,2,0x00B0u,1,1); /* DMA 1KW */
GEL_MapAdd(0x1000u,2,0x0020u,1,1); /* TIMER#0 1KW */
GEL_MapAdd(0x1C80u,2,0x0019u,1,1); /* PLL Control */
GEL_MapAdd(0x2400u,2,0x0014u,1,1); /* TIMER#1 1KW */
GEL_MapAdd(0x1400u,2,0x0004u,1,1); /* ICACHE 1KW */
GEL_MapAdd(0x1C00u,2,0x0400u,1,1); /* CLKGEN 1KW */
GEL_MapAdd(0x2000u,2,0x0055u,1,1); /* TRACE FIFO 1KW */
GEL_MapAdd(0x3400u,2,0x0002u,1,1); /* GPIO 1KW */
GEL_MapAdd(0x3800u,2,0x0008u,1,1); /* ID 1KW */
GEL_MapAdd(0x3C00u,2,0x000Fu,1,1); /* I2C 1KW */
GEL_MapAdd(0x4000u,2,0x0014u,1,1); /* TIMER#2 1KW */
GEL_MapAdd(0x4400u,2,0x0009u,1,1); /* PGPIO 1KW */
GEL_MapAdd(0x6C00u,2,0x0002u,1,1); /* XBSR 1KW */
GEL_MapAdd(0x7800u,2,0x0010u,1,1); /* BIOS Timer 1KW */
GEL_MapAdd(0x8000u,2,0x0002u,1,1); /* Timer Signal Selector 1KW */
GEL_MapAdd(0x8400u,2,0x0002u,1,1); /* CLKOUT selector 1KW */
GEL_MapAdd(0x8800u,2,0x0400u,1,1); /* IOMACRO 1KW */
GEL_MapAdd(0x8c00u,2,0x0002u,1,1); /* CLKMOD0 1KW */
GEL_MapAdd(0x9000u,2,0x0400u,1,1); /* Peri data Mux 1KW */
GEL_MapAdd(0x9C00u,2,0x000Du,1,1); /* UART 1KW */
GEL_MapAdd(0xA000u,2,0x0028u,1,1); /* UHPI 1KW */
EMIF_Init();
GEL_TextOut("C5502_Init Complete.\n");
}
EMIF_Init()
{
/* 配置EMIF寄存器 */
GEL_MemoryFill(0x6c00 ,2,1,0x0001); /* Enable EMIF bus. */
GEL_MemoryFill(EMIF_GCTL1 ,2,1,0x0764); /* EK1HZ=1, EK1EN=1 */
GEL_MemoryFill(EMIF_GCTL2 ,2,1,0x0003); /* ECLKOUT2=ECLKOUT1,ECLKOUT2 enabled */
}
hotmenu Init_CE23_SDRAM()
{
/* 首先配置EMIF */
EMIF_Init();
/* 然后配置SDRAM空间 */
GEL_MemoryFill(EMIF_CE01 ,2,1,0xFF93); /* 32-bit SDRAM in CE2 space. */
GEL_MemoryFill(EMIF_CE11 ,2,1,0xFF93); /* 32-bit SDRAM in CE3 space. */
GEL_MemoryFill(EMIF_SDCNT1 ,2,1,0x6000);/* TRC=5, disable self-refresh mode */
GEL_MemoryFill(EMIF_SDCNT2 ,2,1,0x5715);/* 4 banks,11 row address, 8 column address, Refresh enabled */
GEL_MemoryFill(EMIF_SDREF1 ,2,1,0x061B);
GEL_MemoryFill(EMIF_SDREF2 ,2,1,0x0300);
GEL_MemoryFill(EMIF_SDEXT1 ,2,1,0xB488);
GEL_MemoryFill(EMIF_SDEXT2 ,2,1,0x0005);
GEL_MemoryFill(EMIF_CECTL1 ,2,1,0x0001);
GEL_MapAdd(0x008000u,1,0x3F8000u,1,1); // External CE2 -- data space
GEL_MapAdd(0x010000u,0,0x7f0000u,1,1); // External CE2 -- program space
//GEL_MapAdd(0x200000u,1,0x200000u,1,1); // External CE3 -- data space
//GEL_MapAdd(0x400000u,0,0x400000u,1,1); // External CE3 -- program space
}
hotmenu Init_PLL_byF()
{
GEL_MemoryFill(PLLCSR, 2, 1,0x0001); /* PLL enabled */
GEL_MemoryFill(PLLM, 2, 1,0x000F); /* PLL X15 */
}
hotmenu Init_PLL_byA()
{
GEL_MemoryFill(PLLCSR, 2, 1,0x0001); /* PLL enabled */
GEL_MemoryFill(PLLM, 2, 1,0x0008); /* PLL X10 */
}
/*------------------------------------------------------------------------------------*/
// No more
/*-------------------------------------------------------------------------------------*/
|