<br />GEL 文件的功能同emuinit.cmd 的功能基本相同,用于初始化DSP。但它的功能比emuinit<br />的功能有所增强,GEL 在CCS 下有一个菜单,可以根据DSP 的对象不同,设置不同的初始<br />化程序。以TMS320LF2407 为例:<br />#define SCSR1 0x7018 ;定义scsr1 寄存器<br />#define SCSR2 0X7019 ;定义scsr2 寄存器 <br /><br />#defineWDKEY 0x7025 ;定义wdkey 寄存器<br />#defineWDNTR 0x7029 ;定义wdntr 寄存器<br />StartUp() ; 开始函数<br />{<br />GEL_MapReset(); ; 存储空间复位GEL_MapAdd(0x0000,0,0x7fff,1,1); 定义程序空间从0000<br />-7fff 可读写<br />GEL_MapAdd(0x8000,0,0x7000,1,1); 定义程序空间从8000-f000 可读写<br />GEL_MapAdd(0x0000,1,0x10000,1,1); 定义数据空间从0000-10000 可读写<br />GEL_MapAdd(0xffff,2,1,1,1); 定义i/o 空间0xffff 可读写<br />GEL_MapOn(); 存储空间打开<br />GEL_MemoryFill(0xffff,2,1,0x40); 在i/o 空间添入数值40h<br />*(int *)SCSR1=0x0200; 给scsr1 寄存器赋值<br />*(int *)SCSR2=0x000C; 给scsr2 寄存器赋值,在这里可以进行mp/mc 方式的转换<br />*(int *)WDNTR=0x006f; 给wdntr 寄存器赋值<br />*(int *)WDKEY=0x055; 给wdkey 寄存器赋值<br />*(int *)WDKEY=0x0AA; 给wdkey 寄存器赋值<br /><br />}<br /><br />GEL文件只是在仿真器和目标系统上电的时候起到初始化dsp的作用<br /><br />在上电后再改变GEL文件将不会对DSP产生影响<br /><br />除非断电后再上电<br /><br />贴上DSP5416的GEL文件<br /><br />/* set PMST to: MP = OVLY = 1; DROM off, CLKOUT on */<br />#define PMST_VAL 0x0ffe0u <br /><br />/* set wait-state control reg for: 2 w/s or more on i/o; one for ext memory */<br />#define SWWSR_VAL 0x2009u<br /><br />/* set external-banks switch control for: no bank switching; BH set */<br />#define BSCR_VAL 0x02u<br /><br />/* Set Default Reset Initialization Value */<br />#define ZEROS 0x0000u<br /><br />这一部分是对寄存器初始化<br /><br />/* Set Peripheral Control Register Addresses for DEV_RESET */<br />#define DMPREC 0x0054u<br />#define DMSA 0x0055u<br />#define DMSDI 0x0056u<br /><br />#define DMA_CH0_DMFSC_SUB_ADDR 0x0003u<br />#define DMA_CH1_DMFSC_SUB_ADDR 0x0008u<br />#define DMA_CH2_DMFSC_SUB_ADDR 0x000Du<br />#define DMA_CH3_DMFSC_SUB_ADDR 0x0012u<br />#define DMA_CH4_DMFSC_SUB_ADDR 0x0017u<br />#define DMA_CH5_DMFSC_SUB_ADDR 0x001cu<br /><br />#define MCBSP0_SPSA 0x0038u<br />#define MCBSP0_SPSD 0x0039u<br />#define MCBSP1_SPSA 0x0048u<br />#define MCBSP1_SPSD 0x0049u<br /><br />#define MCBSP2_SPSA 0x0034u<br />#define MCBSP2_SPSD 0x0035u<br /><br />#define MCBSP_SPCR1_SUB_ADDR 0x0000u<br />#define MCBSP_SPCR2_SUB_ADDR 0x0001u<br />#define MCBSP_SRGR1_SUB_ADDR 0x0006u<br />#define MCBSP_SRGR2_SUB_ADDR 0x0007u<br />#define MCBSP_MCR1_SUB_ADDR 0x0008u<br />#define MCBSP_MCR2_SUB_ADDR 0x0009u<br />#define SRGR1_INIT 0x0001u<br /><br />#define PRD0 0x0025u<br />#define TCR0 0x0026u<br /><br />#define PRD1 0x0031u<br />#define TCR1 0x0032u<br /><br />#define TIMER_STOP 0x0010u<br />#define TIMER_RESET 0x0020u<br />#define PRD_DEFAULT 0xFFFFu <br /><br />#define GPIOCR 0x0010u<br /><br />StartUp()<br />{<br />C5416_Init(); <br /><br />GEL_TextOut("Gel StartUp complete.\n");<br />}<br /><br /><br />menuitem "C5416_Configuration";<br />hotmenu CPU_Reset()<br />{<br />GEL_Reset();<br />PMST = PMST_VAL;<br /><br />/* don't change the wait states, let the application code handle it */<br />/* note: at power up all wait states will be the maximum (7) */<br />/* SWWSR = SWWSR_VAL; */<br /><br />BSCR = BSCR_VAL;<br /><br />GEL_TextOut("CPU Reset Complete.\n");<br />}<br /><br />/* All memory maps are based on the PMST value of 0xFFE8 */<br /><br />hotmenu C5416_Init()<br />{<br />GEL_Reset();<br />PMST = PMST_VAL;<br /><br />/* don't change the wait states, let the application code handle it */<br />/* note: at power up all wait states will be the maximum (7) */<br />/* SWWSR = SWWSR_VAL; */<br /><br />BSCR = BSCR_VAL;<br /><br />C5416_Periph_Reset();<br /><br />GEL_XMDef(0,0x1eu,1,0x8000u,0x7f);<br />GEL_XMOn();<br />GEL_MapOn();<br />GEL_MapReset();<br /><br />GEL_MapAdd(0x80u,0,0x7F80u,1,1); /* DARAM */<br />GEL_MapAdd(0x08000u,0,0x8000u,1,1); /* External */<br />GEL_MapAdd(0x18000u,0,0x8000u,1,1); /* DARAM */<br />GEL_MapAdd(0x18000u,0,0x8000u,1,1); /* SARAM */<br />GEL_MapAdd(0x28000u,0,0x8000u,1,1); /* SARAM */<br /><br />GEL_MapAdd(0x0u,1,0x60u,1,1); /* MMRs */<br />GEL_MapAdd(0x60u,1,0x7FA0u,1,1); /* DARAM */<br />GEL_MapAdd(0x08000u,1,0x8000u,1,1); /* DARAM */<br /><br />GEL_TextOut("C5416_Init Complete.\n"); }<br /><br /><br />/* ****************************** */<br /><br />C5416_Periph_Reset()<br />{<br />IFR = 0xFFFFu; <br />IFR = 0x0000u; <br /><br />DMA_Reset();<br />MCBSP0_Reset();<br />MCBSP1_Reset();<br />MCBSP2_Reset();<br />TIMER0_Reset();<br />GPIO_Reset();<br />}<br /><br />DMA_Reset()<br /><br />MCBSP0_Reset()<br /><br />MCBSP1_Reset()<br /><br />MCBSP2_Reset()<br /><br />TIMER0_Reset()<br /><br />GPIO_Reset()<br /><br />在上面的各个初始化函数中,多半是把0值付给寄存器。当然这些初始化值如果用户不使用的话必须在主程序中做修改。<br /><br />所以加载了GEL文件以后,并不一定所有的寄存器都是复位值,主程序中没有赋值的寄存器并不一定就是它的上电复位值,因为加上了仿真器,加载了GEL文件,起到了作用。<br /><br />程序员一定要好好注意。<br />本贴地址:http://www.hellodsp.com/bbs/viewthread.php?tid=9003<br /><br /><br /><br /> |
|