DSP

[转]GEL文件的功能,用于初始化DSP。

2019-07-13 12:24发布

转帖:http://blog.sina.com.cn/s/blog_5cd8c1ef0100c2gv.html 
GEL文件的功能同emuinit.cmd的功能基本相同,用于初始化DSP。但它的功能比emuinit的功能有所增强,GEL在CCS下有一个菜单,可以根据DSP的对象不同,设置不同的初始化程序。以TMS320LF2407为例: #define SCSR1 0x7018  ;定义scsr1寄存器
#define SCSR2 0X7019  ;定义scsr2寄存器
#define WDKEY 0x7025 ;定义wdkey寄存器
#define WDNTR 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寄存器赋值
} (转载自warmshepherd的博客:http://blog.sina.com.cn/s/blog_438048460100a8z4.html)       CCS2.2以后版本的GEL文件 1、GEL文件的改变 使用CCS Setup工具,可以为在系统配置中的每一个处理器指定一个启动GEL文件。当CCS启动时,GEL文件加载到PC机的内存中,如果定义了StartUp()函数则执行该函数。在CCS(V2.3或更早版本),主机和目标板的初始化工作都在Startup()函数中执行。但对于支持Connect/Disconnect的CCS,这样的GEL文件有可能没有正确执行,因为CCS启动时和目标处理器是断开的。当Startup()函数试图访问目标处理器时会出错。一个新的回调函数OnTargetConnect()来执行目标处理器的初始化工作。 2、GEL回调函数 (1)Startup()函数   如果指定的GEL文件中包含Startup()函数,当CCS启动时执行Startup()函数。支持Connect/Disconnect的CCS启动时,Startup()函数中不包括访问目标处理器的代码,目标处理器由回调函数OnTargetConnect()来初始化。 推荐: 建立基本的CCS内存映射关系(不需要访问目标处理器);任何不需要访问目标处理器的基本初始化。 不推荐: Get_Reset()(该函数通过仿真器复位目标处理器);通过GEL_BreakPtAdd()设置断点;GEL_TextOUT()和GET_OpenWindow(),因为StartUp()执行时CCS的任何控制窗口还没有打开。 不支持Connect/Disconnect的CCS GEL文件中的StartUp()函数:     StartUp() { setup_memory_map(); GEL_Reset(); init_emif();    } 支持Connect/Disconnect的CCS GEL文件中的StartUp()函数:       StartUp() { setup_memory_map(); } (2)OnTargetConnect()函数 推荐: 绝对最小的系统初始化处理,保证CCS在目标处理器上处于一种可信赖的状态。例如:禁止看门狗时钟、DSP复位结束。 每一次和目标处理器建立连接时都调用OnTargetConnect()函数。       OnTargetConnect() { // place critical target initialization steps here GEL_Reset(); init_emif(); } 对某些平台,必须调用GEL_Reset()函数使得CCS处于一种“Good”状态,可以通过测试来确定是否需要调用GEL_Reset()函数。应该尽可能的降低GEL startup functions复杂度——包括减少GEL_Reset()的调用。 (3)OnPreFileLoaded()函数 在加载program/symbol(.out)文件之前该回调函数执行。在该函数中执行另外的目标处理器初始化操作以保证程序可以加载和调试是一个好的选择。     OnPreFileLoaded() { FlushCache(); IER = 0; IFR = 0; init_emif(); } (4)OnReset() 函数 当目标处理器复位后该函数被调用。如果需要每次重新启动程序,设计了软复位,GEL_Restart()在此处调用。   OnReset(int nErrorCode) { init_emif(); } (5)OnRestart() 函数 当程序复位时调用该函数。   OnRestart(int nErrorCode ) { GEL_TextOut("Turn off cache segment "); *(int *)0x1848200 = 0; *(int *)0x1848204 = 0; *(int *)0x1848208 = 0; *(int *)0x184820c = 0;   GEL_TextOut("Disable EDMA event "); */ *(int *)0x01A0FFA8 = 0; *(int *)0x01A0FFB4 = 0; *(int *)0x01A0FFB8 = 0XFFFFFFFF; *(int *)0x01A0FFE8 = 0; *(int *)0x01A0FFF4 = 0; *(int *)0x01A0FFF8 = 0xFFFFFFFF;   IER = 0; IFR = 0; } 3、存储器映射 CCS存储器映射告诉调试器目标处理器的哪些存储区域可以访问哪些不能访问。CCS存储器映射一般在StartUp()函数种执行。 (1)GEL_MapAdd()函数 该函数添加一个存储区域到存储区映射中。 (2)GEL_MapOn()和GEL_MapOff()函数 可以调用GEL_MapOn() or GEL_MapOff()来打开或关闭存储区映射。当存储区映射关闭时,CCSStudio假定可以访问所有的存储区空间。 (3)GEL_MapReset()函数 GEL_MapReset()函数清除所有的存储区映射。没有存储区映射时,缺省设置是所有的存储区空间都不能访问。 4、尽量避免使用GEL初始化 可以考虑在GEL文件中使用GEL_MapAdd()建立存储区映射以准许CCS可以调试,但是不在GEL文件中执行外设设置例如:EMIF寄存器初始化、看门狗禁止。 因为GEL语法和C兼容,inif_emif()函数可以在.c文件中实现,和应用程序链接在一起。但是要注意以下几点: 使用“volatile”来保证变量不被优化。例如: *(volatile int *)EMIFA_SDRAMTIM = 0x00000618;   在编译调试过程中避免在GEL文件中进行外设设置,当到达了最终程序时,需要一个智能加载软件从FLASH或主机加载程序对EMIF进行设置,然后通过(E)DMA或memcpy()拷贝程序/数据。 (转载自:我们的幸福http://blog.lmtw.com/b/freeman/archives/2006/40889.html