#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); 定义程序空间从8000-f000 可读写GEL_MapAdd(0x0000,1,0x10000,1,1); 定义数据空间从0000-10000 可读写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产生影响
除非断电后再上电
贴上DSP5416的GEL文件
/* 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文件,起到了作用。
程序员一定要好好注意。
xgbing 认证博客专家 驱动开发 arm开发 嵌入式硬件 专注于嵌入式方向的软硬件设计与开发(ASM\C\C ,RTOS,Linux,android,以太网\嵌入式网络协议栈,蓝牙,WIFI,文件系统/嵌入式存储,显示\音频,单片机\DSP\ARM\Cortex,电路设计\PCB布板\硬件驱动\数字逻辑CPLD,FPGA\niosII),目前从事VirtualBox\qemu\KVM虚拟化研究工作。