gel文件的应用 zz.docx
- 文档编号:14409195
- 上传时间:2023-06-23
- 格式:DOCX
- 页数:13
- 大小:19.73KB
gel文件的应用 zz.docx
《gel文件的应用 zz.docx》由会员分享,可在线阅读,更多相关《gel文件的应用 zz.docx(13页珍藏版)》请在冰点文库上搜索。
gel文件的应用zz
gel文件的应用zz
GEL--通用扩展语言,无类型语言,只有int类型,当CCS运行时首先执行这个GEL函数
当我们自己需要设定某功能上电后立即开启,那么可以在这个函数里面实现。
5H)I#g8~+b2n*G/g4|*Z(U5U
以2407的看门狗为例子,因为上电后2407的看门狗是自动开启的,但我们在调试程序的时候
都是把看门狗关闭的,所以想在调试程序的时候可以把关看门狗的任务放在GEL中1o*c'Z*x6?
以下就是这个小程序(欢迎指正)
#defineWDCR0X7029
#defineWDKEY0X7025DSP交流网DSP学习第一论坛DSP技术应用与推广平台DSP开发服务平台6jd#U/g5h
Startup()DSP
{
WDCR=0X68
}
Startup()函数在GEL文件加载时会自动运行,这样就可以实现上电关闭看门狗功能了
.
GEL(GeneralExtensionLanguage通用扩展语言)是一种解释语言,类似与C语言,这个文件中的函数是按照先后顺序执行的。
GEL函数可以用来配置CCS开发环境,也可以用来初始化目标CPU。
当启动CCS时,扫描启动的GEL文件并加载文件中包含的GEL函数,如果文件中包含Startup()函数,则包含的所有函数都运行
GEL存储空间映射函数可以用来描述处理器的存储空间映射。
Startup()
{
/*startup内的所有函数都要执行*/
GEL_MapOn();
GEL_MapAdd(0,0,0xf000,1,1);
GEL_MapAdd(0,1,0xf000,1,1);
}
1GEL文件的改变
使用CCSStudioSetup工具,可以为在系统配置中的每一个处理器指定一个启动GEL文件。
当CCSStudio启动时,GEL文件加载到PC机的内存中,如果定义了StartUp()函数则执行该函数。
在CCSStudio(V2.3或更早的版本中),主机和目标板的初始化工作都在Startup()函数中执行。
但是对于支持Connect/Disconnect的CCSStudio,这样的GEL文件有可能没有正确的执行,因为CCSStudio启动时和目标处理器是断开的。
当Startup()函数试图访问目标处理器时会出错。
一个新的回调函数OnTargetConnect()来执行目标处理器的初始化工作。
2GEL回调函数
2.1Startup()函数
如果指定的GEL文件中包含Startup()函数,当CCSStudio启动时执行Startup()函数。
支持Connect/Disconnect的CCSStudio的启动时,Startup()函数中不包括访问目标处理器的代码,目标处理器由回调函数OnTargetConnect()来初始化。
推荐:
l建立基本的CCSStudio内存映射关系(不需要访问目标处理器)
l任何不需要访问目标处理器的基本初始化
不推荐:
lGet_Reset()(该函数通过仿真器复位目标处理器)
l通过GEL_BreakPtAdd()设置断点
lGEL_TextOUT()和GET_OpenWindow(),因为StartUp()执行时CCSStudio的任何控制窗口还没有打开
不支持Connect/Disconnect的CCSStudioGEL文件中的StartUp()函数:
/*TheStartUp()functioniscalledeachtimeCCSisstarted.*/
/*Customizethisfunctiontoperformdesiredinitialization.*/
StartUp()
{
setup_memory_map();
GEL_Reset();/*DonotcallinStartUp()withCCStudiov2.4orhigher*/
init_emif();/*DonotcallinStartUp()withCCStudiov2.4orhigher*/
}
支持Connect/Disconnect的CCSStudioGEL文件中的StartUp()函数:
/*TheStartUp()functioniscalledeachtimeCCSisstarted.*/
/*Customizethisfunctiontoperformdesiredinitialization*/
/*thatwillnotaccessthetarget.*/
StartUp()
{
setup_memory_map();
}
2.2OnTargetConnect()函数
推荐:
l绝对最小的系统初始化处理,保证CCSStudio在目标处理器上处于一种可信赖的状态。
例如:
禁止看门狗时钟、DSP复位结束
每一次和目标处理器建立连接时都调用OnTargetConnect()函数。
/*OnTargetConnect()iscalledeverytimeatargetisconnected.*/
/*Itsexecutionfinishesbeforeanythingelseoccurs.Customize*/
/*thisfunctiontoperformessentialtargetinitialization.*/
OnTargetConnect()
{
//placecriticaltargetinitializationstepshere
GEL_Reset();
init_emif();
}
对某些平台,必须调用GEL_Reset()函数使得CCSStudio处于一种“Good”状态,可以通过测试来确定是否需要调用GEL_Reset()函数。
应该尽可能的降低GELstartupfunctions复杂度-包括减少GEL_Reset()的调用。
2.3OnPreFileLoaded()函数
在加载program/symbol(.out)文件之前该回调函数执行。
在该函数中执行另外的目标处理器初始化操作以保证程序可以加载和调试是一个好的选择。
/*Thisfunctioniscalledautomaticallywhenthe'LoadProgram'*/
/*Menuitemisselected.*/
OnPreFileLoaded()
{
FlushCache();
IER=0;
IFR=0;
init_emif();
}
2.4OnReset()函数
当目标处理器复位后该函数被调用。
如果你需要每次重新启动程序设计了软复位,GEL_Restart()在此处调用。
/*ThisfunctioniscalledautomaticallyafteraSWResethasbeenexecuted.
OnReset(intnErrorCode)
{
init_emif();
}
2.5OnRestart()函数
当程序复位时调用该函数。
ThisfunctioniscalledbyCCSwhenyoudoDebug->Restart.ThegoalistoputtheC6xintoaknowngoodstatewithrespecttocache,edmaandinterrupts.Failuretodothiscancauseproblemswhenyourestartandruncodemultipletimes.
OnRestart(intnErrorCode)
{
TurnoffL2forallEMIFACEspaces.Appshouldmanagetheseforcoherency
GEL_TextOut("Turnoffcachesegment\n");
*(int*)0x1848200=0;/*MAR0*/
*(int*)0x1848204=0;/*MAR1*/
*(int*)0x1848208=0;/*MAR2*/
*(int*)0x184820c=0;/*MAR3*/
/*DisableEDMAeventsandinterruptsandclearanypendingevents.*/
GEL_TextOut("DisableEDMAevent\n");*/
*(int*)0x01A0FFA8=0;/*CIERH*/
*(int*)0x01A0FFB4=0;/*EERH*/
*(int*)0x01A0FFB8=0XFFFFFFFF;/*ECRH*/
*(int*)0x01A0FFE8=0;/*CIERL*/
*(int*)0x01A0FFF4=0;/*EERL*/
*(int*)0x01A0FFF8=0xFFFFFFFF;/*ECRL*/
/*Disableotherinterrupts*/
IER=0;
IFR=0;
}
3存储器映射
CCSStudio存储器映射告诉调试器目标处理器的那些存储区域可以访问那些不能访问。
CCSStudio存储器映射一般在StartUp()函数种执行。
3.1GEL_MapAdd()函数
该函数添加一个存储区域到存储区映射中。
3.2GEL_MapOn()和GEL_MapOff()函数
可以调用GEL_MapOn()orGEL_MapOff()来打开或关闭存储区映射。
当存储区映射关闭时,CCSStudio假定可以访问所有的存储区空间。
3.3GEL_MapReset()函数
GEL_MapReset()函数清除所有的存储区映射。
没有存储区映射时,缺省设置是所有的存储区空间都不能访问。
4尽量避免使用GEL初始化
可以考虑在GEL文件中使用GEL_MapAdd()建立存储区映射以准许CCSStudio可以调试,但是不在GEL文件中执行外设设置例如:
EMIF寄存器初始化、看门狗禁止。
因为GEL语法和C兼容,inif_emif()函数可以在.c文件中实现,和应用程序链接在一起。
但是要注意以下几点:
l使用“volatile”来保证变量不被优化。
例如:
*(volatileint*)EMIFA_SDRAMTIM=0x00000618;/*SDRAMtiming(refresh)*/
在编译调试过程中避免在GEL文件中进行外设设置,当到达了最终程序时,需要一个智能加载软件从FLASH或主机加载程序对EMIF进行设置,然后通过(E)DMA或memcpy()拷贝程序/数据。
*.gel是你的秘书,可以帮你打杂
Gel文件用来处理一些繁琐的事情,例如我总是用Gel来自动初始化DSP系统,代码如下:
StartUp()
{
inti;
//setup_memory_map();
for(i=0;i<1000;i++)i=i;
GEL_Reset();
for(i=0;i<1000;i++)i=i;
init_emif();
for(i=0;i<1000;i++)i=i;
GEL_ProjectLoad("D:
\\ti\\MyProjects\\EagleEye\\V100\\EagleEye.pjt");
for(i=0;i<10000;i++)i=i;
GEL_Load("D:
\\ti\\MyProjects\\EagleEye\\V100\\debug\\EagleEye.out");
for(i=0;i<10000;i++)i=i;
GEL_Go(main);
}
只要打开CCS,它就会自动依次执行:
系统软件复位、配置EMIF的各种寄存器、打开项目文件、装载项目文件,并且自动执行到MAIN(),停在那里等着你继续操作。
如果不用Gel,你就麻烦了。
GEL文件的功能同emuinit.cmd的功能基本相同,用于初始化DSP。
但它的功能比emuinit
的功能有所增强,GEL在CCS下有一个菜单,可以根据DSP的对象不同,设置不同的初始
化程序。
以TMS320LF2407为例:
#defineSCSR10x7018;定义scsr1寄存器
#defineSCSR20X7019;定义scsr2寄存器
#defineWDKEY0x7025;定义wdkey寄存器
#defineWDNTR0x7029;定义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文件
/*setPMSTto:
MP=OVLY=1;DROMoff,CLKOUTon*/
#definePMST_VAL0x0ffe0u
/*setwait-statecontrolregfor:
2w/sormoreoni/o;oneforextmemory*/
#defineSWWSR_VAL0x2009u
/*setexternal-banksswitchcontrolfor:
nobankswitching;BHset*/
#defineBSCR_VAL0x02u
/*SetDefaultResetInitializationValue*/
#defineZEROS0x0000u
这一部分是对寄存器初始化
/*SetPeripheralControlRegisterAddressesforDEV_RESET*/
#defineDMPREC0x0054u
#defineDMSA0x0055u
#defineDMSDI0x0056u
#defineDMA_CH0_DMFSC_SUB_ADDR0x0003u
#defineDMA_CH1_DMFSC_SUB_ADDR0x0008u
#defineDMA_CH2_DMFSC_SUB_ADDR0x000Du
#defineDMA_CH3_DMFSC_SUB_ADDR0x0012u
#defineDMA_CH4_DMFSC_SUB_ADDR0x0017u
#defineDMA_CH5_DMFSC_SUB_ADDR0x001cu
#defineMCBSP0_SPSA0x0038u
#defineMCBSP0_SPSD0x0039u
#defineMCBSP1_SPSA0x0048u
#defineMCBSP1_SPSD0x0049u
#defineMCBSP2_SPSA0x0034u
#defineMCBSP2_SPSD0x0035u
#defineMCBSP_SPCR1_SUB_ADDR0x0000u
#defineMCBSP_SPCR2_SUB_ADDR0x0001u
#defineMCBSP_SRGR1_SUB_ADDR0x0006u
#defineMCBSP_SRGR2_SUB_ADDR0x0007u
#defineMCBSP_MCR1_SUB_ADDR0x0008u
#defineMCBSP_MCR2_SUB_ADDR0x0009u
#defineSRGR1_INIT0x0001u
#definePRD00x0025u
#defineTCR00x0026u
#definePRD10x0031u
#defineTCR10x0032u
#defineTIMER_STOP0x0010u
#defineTIMER_RESET0x0020u
#definePRD_DEFAULT0xFFFFu
#defineGPIOCR0x0010u
StartUp()
{
C5416_Init();
GEL_TextOut("GelStartUpcomplete.\n");
}
menuitem"C5416_Configuration";
hotmenuCPU_Reset()
{
GEL_Reset();
PMST=PMST_VAL;
/*don'tchangethewaitstates,lettheapplicationcodehandleit*/
/*note:
atpowerupallwaitstateswillbethemaximum(7)*/
/*SWWSR=SWWSR_VAL;*/
BSCR=BSCR_VAL;
GEL_TextOut("CPUResetComplete.\n");
}
/*AllmemorymapsarebasedonthePMSTvalueof0xFFE8*/
hotmenuC5416_Init()
{
GEL_Reset();
PMST=PMST_VAL;
/*don'tchangethewaitstates,lettheapplicationcodehandleit*/
/*note:
atpowerupallwaitstateswillbethemaximum(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_InitComplete.\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文件,起到了作用。
程序员一定要好好注意。
本文来自CSDN博客,转载请标明出处:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- gel文件的应用 zz gel 文件 应用
![提示](https://static.bingdoc.com/images/bang_tan.gif)