打印

下载程序到sdram

[复制链接]
4253|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wwjj1227|  楼主 | 2007-9-18 13:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
自己做的TMS320VC5509A板子,晶振12MHz,外扩4M*16位的SDRAM,FLASH还没焊。程序下载到片内RAM时,SDRAM读写测试正确。我现在想把程序下载到SDRAM,gel文件里对SDRAM进行了初始化(其中SDRAM寄存器的值与测试时的值设置相同 ),cmd文件中将.text设置到SDRAM,其他段设置到片内RAM。可是Load Program 时出现:data verification failed at address 0x40000. Please verify target memory and memory map. 是不是我的gel文件写的不对?或者是其他的原因?

相关帖子

沙发
wwjj1227|  楼主 | 2007-9-18 14:14 | 只看该作者

gel,cmd文件

gel文件中的存储器映射如下:(外部器件只焊接了SDRAM)
    /* Program Space */
    GEL_MapAdd(0x0000C0,0,0x00FF40,1,1);    /* DARAM */
    GEL_MapAdd(0x010000,0,0x030000,1,1);    /* SARAM */
    GEL_MapAdd(0x040000,0,0x3C0000,1,1);    /* External CE0 */
    GEL_MapAdd(0x400000,0,0x400000,1,1);    /* External CE1 */
    GEL_MapAdd(0x800000,0,0x400000,1,1);    /* External CE2 */
    /* For MP/MC=0  */
    GEL_MapAdd(0xC00000,0,0x400000,1,0);    /* External CE3 */


    /* Data Space */
    GEL_MapAdd(0x000000,1,0x000050,1,1);    /* MMRs */
    GEL_MapAdd(0x000060,1,0x007FA0,1,1);    /* DARAM */
    GEL_MapAdd(0x008000,1,0x018000,1,1);    /* SARAM */
    GEL_MapAdd(0x020000,1,0x1E0000,1,1);    /* External CE0 */
    GEL_MapAdd(0x200000,1,0x200000,1,1);    /* External CE1 */
    GEL_MapAdd(0x400000,1,0x200000,1,1);    /* External CE2 */
    /* For MP/MC=0 */
    GEL_MapAdd(0x600000,1,0x200000,1,0);    /* External CE3 */


cmd文件如下:

-w
-stack 500
-sysstack 500
-l rts55x.lib

MEMORY 
{
    DARAM:  o=0x100,    l=0x7f00
    VECT :  o=0x8000,    l=0x100
    DARAM2: o=0x8100,    l=0x7f00
    SARAM:  o=0x10000,    l=0x30000
    SDRAM:  o=0x40000,    l=0x7c0000
}

SECTIONS
{
    .text:    {} > SDRAM 
    .vectors: {} > VECT 
    .trcinit: {} > DARAM 
    .gblinit: {} > DARAM 
     frt:     {} > DARAM 
    
    .cinit:   {} > DARAM 
    .pinit:   {} > DARAM 
    .sysinit: {} > DARAM 
    .bss:     {} > DARAM2 
    .far:     {} > DARAM2 
    .const:   {} > DARAM2 
    .switch:  {} > DARAM2 
    .sysmem:  {} > DARAM2 
    .cio:     {} > DARAM2 
    .MEM$obj: {} > DARAM2 
    .sysheap: {} > DARAM2 
    .sysstack {} > DARAM2 
    .stack:   {} > DARAM2 
    
}



使用特权

评论回复
板凳
wowow| | 2007-9-18 14:40 | 只看该作者

Memory Map只是告诉CCS哪些存贮空间可用

GEL_MapAdd只是告诉CCS哪些存贮空间可用,并不等于存贮器的初始化。要在gel里初始化SDRAM相关的控制寄存器才行。

使用特权

评论回复
地板
wwjj1227|  楼主 | 2007-9-18 16:20 | 只看该作者

to wowow

gel文件里对SDRAM进行了初始化

hotmenu C5509A__Board_EMIF_Init()
{
      GEL_MemoryFill(0x6C00,2,1,0x0201);        //ebsr
      
      GEL_MemoryFill(0x1C00,2,1,0x2813);        //clkmd
      
      GEL_MemoryFill(0x800,2,1,0x0220);
//      GEL_MemoryFill(0x800,2,1,0x0020);
      GEL_MemoryFill(0x803,2,1,0x3FFF);
      GEL_MemoryFill(0x806,2,1,0x3FFF);
      GEL_MemoryFill(0x801,2,1,0x0000);
      GEL_MemoryFill(0x80F,2,1,0x5958);
      GEL_MemoryFill(0x813,2,1,0x038f); 
      GEL_MemoryFill(0x814,2,1,0x0003);
      GEL_MemoryFill(0x812,2,1,0x0000);

    GEL_TextOut("C5509A_Board_EMIF_Init Complete. ");
}

SDRAM寄存器的设置与我程序下载到片内RAM测试SDRAM读写时的设置相同,CPU时钟96MHz,SDRAM时钟为48MHz。晶振是12MHz,在GEL文件里,不设置CLKMD(cpu时钟12MHz)或设置clkmd(cpu时钟96MHz),出现的错误是一样的。

使用特权

评论回复
5
wowow| | 2007-9-18 17:22 | 只看该作者

参考一下c5502.gel

CCStudio_v3.1ccgelc5502.gel

/*************************************************/
/* 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    0x1C81
    #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()
{
}

OnTargetConnect()
{
    C5502_Init(); 

    Init_CE1_SBSRAM_5502CPUBoard();
    Init_CE0_SDRAM_5502CPUBoard();
}

OnReset()
{
    Init_CE1_SBSRAM_5502CPUBoard();
    Init_CE0_SDRAM_5502CPUBoard();
}

menuitem "C5502_Configuration";
hotmenu CPU_Reset()
{
    /*GEL_Reset();*/

    GEL_TextOut("CPU Reset Complete. ");
}


/* Memory map based on MP/MC value=1 (BOOTM[2:0]=0).    */

hotmenu C5502_Init()
{
    GEL_Reset();

    GEL_MapOn();
    GEL_MapReset();
    
    /* Program Space */
    GEL_MapAdd(0x0000C0u,0,0x00FF40u,1,1);        /* DARAM */
/*    GEL_MapAdd(0x050000u,0,0x3B0000u,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=1 (BOOTM[2:0] = 0)  */
/*    GEL_MapAdd(0xC00000u,0,0x400000u,1,1);*/    /* External CE3 */
    /* 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,0x000050u,1,1);    /* MMRs */
    GEL_MapAdd(0x000060u,1,0x007FA0u,1,1);    /* DARAM */
    GEL_MapAdd(0x08000u,1,0x1D8000u,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=1 (BOOTM[2:0] = 0) */
    GEL_MapAdd(0x600000u,1,0x200000u,1,1);    /* External CE3 */
    /* 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 */
     /* Removed certain I/O locations due to emulation access problems */
/*    GEL_MapAdd(0x0000u,2,0x0012u,1,1); */    /* RHEA 1KW */
    GEL_MapAdd(0x0400u,2,0x0300u,1,1);    /* EMULATION */
    GEL_MapAdd(0x0800u,2,0x0042u,1,1);     /* EMIF 1KW */
/*    GEL_MapAdd(0x0C00u,2,0x00B0u,1,1); */     /* DMA 1KW */
    GEL_MapAdd(0x1000u,2,0x0014u,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(0x2800u,2,0x0020u,1,1); */    /* SERIAL PORT#0 1KW */
/*    GEL_MapAdd(0x2C00u,2,0x0020u,1,1); */    /* SERIAL PORT#1 1KW */
/*    GEL_MapAdd(0x3000u,2,0x0020u,1,1); */    /* SERIAL PORT#2 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(0x9400u,2,0x0004u,1,1); */    /* IDLE 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. ");
}


emif_init()
{
    /* EMIF REGISTER values     */
    GEL_MemoryFill(0x6c00 ,2,1,0x0001);     /* Enable EMIF bus. */
    GEL_MemoryFill(EMIF_GCTL1 ,2,1,0x0060);
    GEL_MemoryFill(EMIF_GCTL2 ,2,1,0x0009);
    GEL_MemoryFill(EMIF_CE01 ,2,1,0xFF03);
}

hotmenu Init_CE0_Async()
{
    GEL_MemoryFill(0x6c00 ,2,1,0x0001);     /* Enable EMIF bus. */
    GEL_MemoryFill(EMIF_CE01 ,2,1,0xFF23);  /* 32-bit async in CE0 space. */
    GEL_MapAdd(0x010000u,0,0x3B0000u,1,1);    /* External CE0 */
    GEL_MapAdd(0x08000u,1,0x1D8000u,1,1);    /* External CE0 */
}

hotmenu Init_CE0_Async_Fast()
{
    GEL_MemoryFill(0x6c00 ,2,1,0x0001);     /* Enable EMIF bus. */
    GEL_MemoryFill(EMIF_CE01 ,2,1,0x0121);  /* 32-bit async in CE0 space. */
    GEL_MemoryFill(EMIF_CE02 ,2,1,0x1051);  /* 32-bit async in CE0 space. */
/*    GEL_MemoryFill(EMIF_CE02 ,2,1,0x0000); */  /* 32-bit async in CE0 space. */    
    GEL_MapAdd(0x010000u,0,0x3B0000u,1,1);    /* External CE0 - program space     */
    GEL_MapAdd(0x08000u,1,0x1D8000u,1,1);    /* External CE0 - data space     */
}

hotmenu Init_CE1_Async_32()
{
    GEL_MemoryFill(0x6c00 ,2,1,0x0001);     /* Enable EMIF bus. */
    GEL_MemoryFill(EMIF_CE11 ,2,1,0xFF23);  /* 32-bit async in CE1 space. */
    GEL_MapAdd(0x400000u,0,0x400000u,1,1);    /* External CE1 */
    GEL_MapAdd(0x200000u,1,0x200000u,1,1);    /* External CE1 */
}

hotmenu Init_CE1_Async_16()
{
    GEL_MemoryFill(0x6c00 ,2,1,0x0001);     /* Enable EMIF bus. */
    GEL_MemoryFill(EMIF_CE11 ,2,1,0xFF13);  /* 16-bit async in CE1 space. */
    GEL_MapAdd(0x400000u,0,0x400000u,1,1);    /* External CE1 */
    GEL_MapAdd(0x200000u,1,0x200000u,1,1);    /* External CE1 */
}

hotmenu Init_CE0_SDRAM_5502CPUBoard() /* For MT48LC2M32B2 Micron Memory use. (C5502 CPU Board) */
{    
    GEL_MemoryFill(0x6c00 ,2,1,0x0001);     /* Enable EMIF bus. */
    GEL_MemoryFill(EMIF_CE01 ,2,1,0xFF33);  /* 32-bit SDRAM in CE0 space. */
    GEL_MemoryFill(EMIF_SDCNT1 ,2,1,0xF000);/* ?5000*/
    GEL_MemoryFill(EMIF_SDCNT2 ,2,1,0x4748);/* ?4711*/
    GEL_MemoryFill(EMIF_SDREF1 ,2,1,0x0001);
    GEL_MemoryFill(EMIF_SDREF2 ,2,1,0x0000);    
    GEL_MapAdd(0x010000u,0,0x3B0000u,1,1);    /* External CE0 - program space */
    GEL_MapAdd(0x08000u,1,0x1D8000u,1,1);    /* External CE0 - data space     */
}

hotmenu Init_CE1_SDRAM() /* For MT48LC2M32B2 Micron Memory use. */
{    
    GEL_MemoryFill(0x6c00 ,2,1,0x0001);     /* Enable EMIF bus. */
    GEL_MemoryFill(EMIF_CE11 ,2,1,0xFF33);  /* 32-bit SDRAM in CE0 space. */
    GEL_MemoryFill(EMIF_SDCNT1 ,2,1,0xF000);/* ?5000*/
    GEL_MemoryFill(EMIF_SDCNT2 ,2,1,0x4748);/* ?4711*/
    GEL_MemoryFill(EMIF_SDREF1 ,2,1,0x0001);
    GEL_MemoryFill(EMIF_SDREF2 ,2,1,0x0000);    
    GEL_MapAdd(0x400000u,0,0x400000u,1,1);    /* External CE1 - program space */
    GEL_MapAdd(0x200000u,1,0x200000u,1,1);    /* External CE1 - data space     */
}

hotmenu Init_CE1_SBSRAM_5502CPUBoard() /* For MT58L25632PS Micron Memory use. (C5502 CPU Board) */
{    
    GEL_MemoryFill(0x6c00 ,2,1,0x0001);     /* Enable EMIF bus. */
    GEL_MemoryFill(EMIF_CE11 ,2,1,0xFF43);  /* 32-bit SBSRAM in CE1 space. */
    GEL_MemoryFill(EMIF_CE1SECCTL1 ,2,1,0x0002);  

    GEL_MapAdd(0x0400000u,0,0x3FFFFFu,1,1);    /* External CE1 - program space */
    GEL_MapAdd(0x0200000u,1,0x1FFFFFu,1,1);    /* External CE1 - data space     */
}


hotmenu Init_PLL_by15()
{
    GEL_MemoryFill(PLLCSR, 2, 1,0x0001);    /* PLL enabled */
    GEL_MemoryFill(PLLM, 2, 1,0x000E);        /* PLL X15 */
}

hotmenu Init_PLL_by16()
{
    GEL_MemoryFill(PLLCSR, 2, 1,0x0001);    /* PLL enabled */
    GEL_MemoryFill(PLLM, 2, 1,0x000F);        /* PLL X16 */
}

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

9

帖子

1

粉丝