原创 利用GEL语言对DSP初始化设置

2008-9-8 02:03 1444 3 3 分类: 处理器与DSP

http://www.61ic.com<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />


 


GEL 文件的功能同emuinit.cmd 的功能基本相同,用于初始化DSP。但它的功能比emuinit


的功能有所增强,GEL CCS 下有一个菜单,可以根据DSP 的对象不同,设置不同的初始


化程序。以TMS320LF2407 为例:


#define SCSR1 0x7018 ;定义scsr1 寄存器


#define SCSR2 0X7019 ;定义scsr2 寄存器


 


#defineWDKEY 0x7025 ;定义wdkey 寄存器


#defineWDNTR 0x7029 ;定义wdntr 寄存器


StartUp() ; 开始函数


{


GEL_MapReset(); ; 存储空间复位GEL_MapAdd(0x0000,0,0x7fff,1,1); 定义程序空间从0000


7fff 可读写


GEL_MapAdd(0x8000,0,0x7000,1,1); 定义程序空间从8000f000 可读写


GEL_MapAdd(0x0000,1,0x10000,1,1); 定义数据空间从000010000 可读写


GEL_MapAdd(0xffff,2,1,1,1); 定义i/o 空间0xffff 可读写


GEL_MapOn(); 存储空间打开


GEL_MemoryFill(0xffff,2,1,0x40); i/o 空间添入数值40h


*(int *)SCSR1=0x0200; scsr1 寄存器赋值


*(int *)SCSR2=0x000C; scsr2 寄存器赋值,在这里可以进行mp/mc 方式的转换


*(int *)WDNTR=0x006f; wdntr 寄存器赋值


*(int *)WDKEY=0x055; wdkey 寄存器赋值


*(int *)WDKEY=0x0AA; wdkey 寄存器赋值


 


}


 


GEL文件只是在仿真器和目标系统上电的时候起到初始化dsp的作用


 


在上电后再改变GEL文件将不会对DSP产生影响


 


除非断电后再上电


 


贴上DSP5416GEL文件


 


/* set PMST to: MP =  OVLY = 1; DROM off, CLKOUT on */


#define PMST_VAL        0x0ffe0u


 


/* set wait-state control reg for: 2 w/s or more on i/o; one for ext memory */


#define SWWSR_VAL       0x2009u


 


/* set external-banks switch control for: no bank switching; BH set */


#define BSCR_VAL        0x02u


 


/* Set Default Reset Initialization Value */


#define    ZEROS        0x0000u


 


这一部分是对寄存器初始化


 


/* Set Peripheral Control Register Addresses for DEV_RESET */


#define DMPREC          0x0054u


#define DMSA            0x0055u


#define DMSDI           0x0056u


 


#define DMA_CH0_DMFSC_SUB_ADDR  0x0003u


#define DMA_CH1_DMFSC_SUB_ADDR  0x0008u


#define DMA_CH2_DMFSC_SUB_ADDR  0x000Du


#define DMA_CH3_DMFSC_SUB_ADDR  0x0012u


#define DMA_CH4_DMFSC_SUB_ADDR  0x0017u


#define DMA_CH5_DMFSC_SUB_ADDR  0x001cu


 


#define MCBSP0_SPSA     0x0038u


#define MCBSP0_SPSD     0x0039u


#define MCBSP1_SPSA     0x0048u


#define MCBSP1_SPSD     0x0049u


 


#define MCBSP2_SPSA     0x0034u


#define MCBSP2_SPSD     0x0035u


 


#define MCBSP_SPCR1_SUB_ADDR   0x0000u


#define MCBSP_SPCR2_SUB_ADDR   0x0001u


#define MCBSP_SRGR1_SUB_ADDR   0x0006u


#define MCBSP_SRGR2_SUB_ADDR   0x0007u


#define MCBSP_MCR1_SUB_ADDR    0x0008u


#define MCBSP_MCR2_SUB_ADDR    0x0009u


#define SRGR1_INIT             0x0001u


 


#define PRD0            0x0025u


#define TCR0            0x0026u


 


#define PRD1            0x0031u


#define TCR1            0x0032u


 


#define TIMER_STOP             0x0010u


#define TIMER_RESET            0x0020u


#define PRD_DEFAULT            0xFFFFu 


 


#define GPIOCR                 0x0010u


 


StartUp()


{


C5416_Init();


 


GEL_TextOut("Gel StartUp complete.\n");


}


 


 


menuitem "C5416_Configuration";


hotmenu CPU_Reset()


{


GEL_Reset();


PMST = PMST_VAL;


 


/* don't change the wait states, let the application code handle it */


/* note: at power up all wait states will be the maximum (7)        */


/* SWWSR = SWWSR_VAL;                                          */


 


BSCR = BSCR_VAL;


 


GEL_TextOut("CPU Reset Complete.\n");


}


 


/* All memory maps are based on the PMST value of 0xFFE8 */


 


hotmenu C5416_Init()


{


GEL_Reset();


PMST = PMST_VAL;


 


/* don't change the wait states, let the application code handle it */


/* note: at power up all wait states will be the maximum (7)        */


/* SWWSR = SWWSR_VAL;                                          */


 


BSCR = BSCR_VAL;


 


C5416_Periph_Reset();


 


GEL_XMDef(0,0x1eu,1,0x8000u,0x7f);


GEL_XMOn();


GEL_MapOn();


GEL_MapReset();


 


GEL_MapAdd(0x80u,0,0x7F80u,1,1); /* DARAM */


GEL_MapAdd(0x08000u,0,0x8000u,1,1); /* External */


GEL_MapAdd(0x18000u,0,0x8000u,1,1); /* DARAM */


GEL_MapAdd(0x18000u,0,0x8000u,1,1); /* SARAM */


GEL_MapAdd(0x28000u,0,0x8000u,1,1); /* SARAM */


 


GEL_MapAdd(0x0u,1,0x60u,1,1);  /* MMRs */


GEL_MapAdd(0x60u,1,0x7FA0u,1,1); /* DARAM */


GEL_MapAdd(0x08000u,1,0x8000u,1,1); /* DARAM */


 


GEL_TextOut("C5416_Init Complete.\n"); }


 


 


/* ****************************** */


 


C5416_Periph_Reset()


{


IFR = 0xFFFFu; 


IFR = 0x0000u;


 


DMA_Reset();


MCBSP0_Reset();


MCBSP1_Reset();


MCBSP2_Reset();


TIMER0_Reset();


GPIO_Reset();


}


 


DMA_Reset()


 


MCBSP0_Reset()


 


MCBSP1_Reset()


 


MCBSP2_Reset()


 


TIMER0_Reset()


 


GPIO_Reset()


 


在上面的各个初始化函数中,多半是把0值付给寄存器。当然这些初始化值如果用户不使用的话必须在主程序中做修改。


 


所以加载了GEL文件以后,并不一定所有的寄存器都是复位值,主程序中没有赋值的寄存器并不一定就是它的上电复位值,因为加上了仿真器,加载了GEL文件,起到了作用。


 


程序员一定要好好注意。

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
3
关闭 站长推荐上一条 /3 下一条