GEL文件
- 格式:docx
- 大小:29.00 KB
- 文档页数:14
Ccs调试问题1、调试环境:CCS v5 + seed560puls ;2、开发环境,调试开发板可以看到所有的GEL文件初始化都成功,如下所示:CortexA8: GEL Output: EVM816x Startup SequenceCortexA8: GEL Output: PRCM Setup CompleteCortexA8: GEL Output: Configuring Pad Functions...CortexA8: Output: Main PLL Init is in Progress, Please wait ..... CortexA8: Output: Main PLL Init is Done .....CortexA8: Output: EVM816x DDR PLL Init is in Progress for 400 MHz DDR Clock, Please wait .....CortexA8: Output: DDR2 Selected.CortexA8: Output: EVM816x DDR PLL Init is Done .....CortexA8: Output: EVM816x DDR2/3 PRCM Init is in progress ..... CortexA8: Output: oneCortexA8: Output: woCortexA8: Output: hreeCortexA8: Output: _ourCortexA8: Output: _iveCortexA8: Output: sixCortexA8: Output: sevenCortexA8: Output: eightCortexA8: Output: nineCortexA8: Output: aCortexA8: Output: bCortexA8: Output: cCortexA8: Output: dCortexA8: Output: eCortexA8: Output: fCortexA8: Output: enCortexA8: Output: aCortexA8: Output: bCortexA8: Output: cCortexA8: Output: dCortexA8: Output: eCortexA8: Output: fCortexA8: Output: EVM816x DDR2/3 PRCM Init is Done .....CortexA8: Output: DM816x EMIF Init is Done @ 400MHz Clock Rate..... CortexA8: GEL Output: Startup Complete.3、将Gel文件是:evm816x_PG1.1.gel的:ddr2 设为0,开启ddr3;#define DDR2 0 // Set to 1 for DDR2 board#define DDR3 1 // Set to 1 for DDR3 board4、同样的方法connect to the target,出现一下错误:CortexA8: GEL Output: EVM816x Startup SequenceCortexA8: GEL Output: PRCM Setup CompleteCortexA8: GEL Output: Configuring Pad Functions...CortexA8: Output: Main PLL Init is in Progress, Please wait ..... CortexA8: Output: Main PLL Init is Done .....CortexA8: Output: EVM816x DDR PLL Init is in Progress for 400 MHz DDR Clock, Please wait .....CortexA8: Output: DDR3 Selected.CortexA8: Output: DM816x DDR PLL Init is Done .....CortexA8: Output: EVM816x DDR2/3 PRCM Init is in progress ..... CortexA8: Output: oneCortexA8: Output: twoCortexA8: Output: threeCortexA8: Output: fourCortexA8: Output: fiveCortexA8: Output: sixCortexA8: Output: sevenCortexA8: Output: eightCortexA8: Output: nineCortexA8: Output: aCortexA8: Output: bCortexA8: Output: cCortexA8: Output: dCortexA8: Warning: The DAP access, address 0x00003D5B, has casued a STALL. DAP transaction is aborted. (Error -1204) @ 15707 (0x3D5B)CortexA8: GEL: Error while executing OnTargetConnect(): Target failed to write memory at 0x4819827C.CortexA8: Warning: Device driver: Cannot acquire emulator process Possible conflict for device driver usage (Error -1044) @ -5002(0xFFFFEC76)CS_DAP_DebugSS: Warning: Unknown error (Error -5008) @ -5008 (0xFFFFEC70) CS_DAP_DebugSS: Warning: Unknown error (Error -5002) @ -5002 (0xFFFFEC76) CortexA8: 11 other operation(s) were automatically canceled as a result CortexA8: Warning: Device driver: Cannot acquire emulator process Possible conflict for device driver usage (Error -1044) @ -5002(0xFFFFEC76)从输出的信息可以判断GEL初始化到如下位置:EMIF4PRCM(){GEL_TextOut("\tEVM816x DDR2/3 PRCM Init is in progress ..... \n","Output",1,1,1);WR_MEM_32(CM_DEFAULT_FW_CLKCTRL, 0x2); // Enable the EMIF FireWall ClocksGEL_TextOut("\ one \n","Output",1,1,1);WR_MEM_32(CM_DEFAULT_L3_FAST_CLKSTCTRL, 0x2); // Enable the Power Domain Transition of L3 Fast Domain PeripheralGEL_TextOut("\ two \n","Output",1,1,1);WR_MEM_32(CM_DEFAULT_EMIF_0_CLKCTRL, 0x2); // Enable EMIF0 ClockGEL_TextOut("\ three \n","Output",1,1,1);WR_MEM_32(CM_DEFAULT_EMIF_1_CLKCTRL, 0x2); // Enable EMIF1 ClockGEL_TextOut("\ four \n","Output",1,1,1);while((RD_MEM_32(CM_DEFAULT_L3_FAST_CLKSTCTRL) & 0x300)!=0x300); // Poll for L3_FAST_GCLK & DDR_GCLK are activeGEL_TextOut("\ five \n","Output",1,1,1);while(RD_MEM_32(CM_DEFAULT_EMIF_0_CLKCTRL)!=0x2); // Poll for Module is functionalGEL_TextOut("\ six \n","Output",1,1,1);while(RD_MEM_32(CM_DEFAULT_EMIF_1_CLKCTRL)!=0x2); // Poll for Module is functionalGEL_TextOut("\ seven \n","Output",1,1,1);WR_MEM_32(CM_DEFAULT_DMM_CLKCTRL, 0x2); // Enable DMM clock ClockGEL_TextOut("\ eight \n","Output",1,1,1);while(RD_MEM_32(CM_DEFAULT_DMM_CLKCTRL)!=0x2); // Poll for Module is functionalGEL_TextOut("\ nine \n","Output",1,1,1);ddr_init_settings(0);/////////////////////////////#define DDRPHY_CONFIG_BASE ((emif == 0) ? 0x48198000 : 0x4819a000) //////////////ddr_init_settings(int emif){/* DLL Lockdiff */GEL_TextOut("\n a \n","Output",1,1,1);if(PG1_0_DDR2){/* The below programming is not required on EVM816x PG1.1 */WR_MEM_32(DDRPHY_CONFIG_BASE + 0x028, 0xF);WR_MEM_32(DDRPHY_CONFIG_BASE + 0x05C, 0xF);WR_MEM_32(DDRPHY_CONFIG_BASE + 0x090, 0xF);WR_MEM_32(DDRPHY_CONFIG_BASE + 0x138, 0xF);WR_MEM_32(DDRPHY_CONFIG_BASE + 0x1DC, 0xF);WR_MEM_32(DDRPHY_CONFIG_BASE + 0x280, 0xF);WR_MEM_32(DDRPHY_CONFIG_BASE + 0x324, 0xF);}GEL_TextOut("\n b \n","Output",1,1,1);/* Setup use rank delays */WR_MEM_32(DDRPHY_CONFIG_BASE + 0x134, 1);GEL_TextOut("\n c \n","Output",1,1,1);WR_MEM_32(DDRPHY_CONFIG_BASE + 0x1d8, 1);GEL_TextOut("\n d \n","Output",1,1,1);WR_MEM_32(DDRPHY_CONFIG_BASE + 0x27c, 1);//在此处就出现问题。
软件的安装与配置一.相关文件目录。
1、SEED-XDS510PLUS仿真器驱动安装文件目录:E:\SEED-DTK5416\driver\setup\SEED-XDS510Plus Emulator for CCS3.3 Below.exe2、开发板初始化文件:C:\ti\cc\gel\ dtk-boot.gel3、配置文件:C:\ti\drivers\seedxds510plus.cfg3、C运行时间支持库目标文件:C:\ti\c5400\cgtools\lib\rts.lib二.CCS以及驱动程序的安装1.安装Code Comppser Studio2.2 for C5000需要安装V2.2以上的版本的CCS版本。
找到附带光盘的CCS软件的安装程序文件夹(\ccs5000),双击“Setup.exe”,然后按照提示安装软件。
2.安装SEED-XDS510PLUS仿真器驱动。
点击仿真器驱动的安装程序SEED-XDS510Plus Emulator for CCS3.3 Below.exe,设置与CCS软件一样的安装路径(默认为C:\ti),此文件是仿真器所配光盘的内容,电脑存放目录为E:\ SEED-DTK5416\driver\setup。
注意:安装过程中,需要您选择CCS的版本来安装相应的驱动。
3.安装SEED-XDS510PLUS仿真器的硬件设备。
1)安装准备:用所提供的USB连接线将SEED-XDS510PLUS仿真器和电脑主机相连,将SEED-XDS510PLUS和目标系统相连2)安装步骤:安装准备完成后,系统会自动提示安装“找到新的硬件向导”,默认“自动安装软件(推荐)”,单击下一步,按照提示进行仿真器硬件的安装3)安装完成后,系统提示SEED-XDS510PLUS JTAG仿真器已经成功识别。
4.GEL文件的拷贝。
找到SEED-DTK5416附带光盘中例程(\SEED-DTK5416\SEED-DTK5416\03. Examples of Program\04. SEED-DTK5416例程)的任意一个例程,打开,找到dtk-boot.gel文件,将其拷贝到CCS2(C5000)安装目录下(本安装目录名统一设为ti)的\ti\cc\gel\文件夹下,方便后续配置。
抗辐射MRAM的外部程序存储器设计谢妮慧;王淳;何海燕【摘要】In this paper,an external program memory design scheme based on MRAM is proposed,and taking the MRAM chip 3DMR2M16VS2427 of 3D-PLUS as the example,the external memory online programming method through the DSP simulator is introduced,which does not need file format conversion,uses the General Extension Language(GEL) function programming online program.%本文提出了一种基于MRAM的外部程序存储器设计方案,并以3D-PLUS公司的MRAM芯片3DMR2M16VS2427为例介绍了一种不需要进行文件格式的转换,采用通用扩展语言(GEL,General Extension Language)函数编制在线编程程序,通过DSP仿真器实现的外部存储器在线编程方法.【期刊名称】《单片机与嵌入式系统应用》【年(卷),期】2017(017)004【总页数】5页(P46-50)【关键词】MRAM;GEL;在线编程;仿真器;CCS【作者】谢妮慧;王淳;何海燕【作者单位】北京空间机电研究所,北京100094;北京空间机电研究所,北京100094;北京空间机电研究所,北京100094【正文语种】中文【中图分类】TP211以高性能DSP为核心的电子电路被广泛应用于空间飞行器的控制管理和数据处理中。
为了方便对程序进行升级和维护,保证系统掉电时指令、数据不丢失,一般都将DSP应用程序存储于外部非易失性存储器芯片中,在系统上电或者复位时将存储在外部存储器芯片中的应用程序搬移到DSP片内或者片外的RAM中全速运行。
gelf标准GELF标准是一种用于日志记录的格式和协议,它的全称是Graylog Extended Log Format。
GELF标准的出现,为日志记录和分析提供了更加高效和灵活的解决方案。
在传统的日志记录中,通常使用文本文件来存储日志信息。
然而,这种方式存在一些问题。
首先,文本文件的格式不统一,不同的应用程序可能使用不同的格式来记录日志,这给日志的分析和处理带来了困难。
其次,文本文件的大小通常较大,占用存储空间较多。
最后,文本文件的读取和解析速度较慢,不利于实时监控和分析。
GELF标准通过定义一种结构化的日志记录格式,解决了上述问题。
GELF格式使用JSON(JavaScript Object Notation)作为数据交换格式,使得日志信息可以以结构化的方式进行存储和传输。
这样,不同的应用程序可以使用相同的格式来记录日志,方便了日志的分析和处理。
此外,GELF标准还定义了一种基于UDP(User Datagram Protocol)的协议,用于传输日志信息。
相比于传统的TCP(Transmission Control Protocol)协议,UDP协议具有更低的延迟和更高的吞吐量,适用于实时监控和分析。
同时,GELF协议还支持压缩和加密,保证了日志信息的安全性和可靠性。
GELF标准的应用非常广泛。
首先,它被广泛应用于日志收集和分析系统中。
通过使用GELF格式和协议,可以方便地将各种应用程序的日志信息发送到中央日志服务器进行集中存储和分析。
其次,GELF标准还被一些监控系统和报警系统采用,用于实时监控和报警。
通过使用GELF格式和协议,可以快速地传输和处理大量的日志信息,及时发现和解决问题。
除了以上应用,GELF标准还有一些其他的特性和优势。
首先,GELF格式支持自定义字段,可以根据需要添加额外的信息,方便了日志的分析和查询。
其次,GELF协议支持批量发送,可以将多条日志信息打包发送,减少了网络传输的开销。
第一部分 软件介绍及本使用手册的一些定义欢迎使用Gel-Pro凝胶分析软件,这是一个功能强大,且非常容易学习操作的专业级科学软件,作为科学图像分析系统,该系统的先进与品质在全球数以万计的实验室得到了认可。
使用本软件,可以做以下一些工作:●可以精确的处理一些实验-DNA、RNA以及蛋白质电泳凝胶-Southern、Northern 和western Blots-Dot和 Slot Blots-微孔板-菌落计数-膜杂交●把实验结果发表●打印图像、分析结果以及注解●把图像或结果存储起来在使用本软件之前,有一些必要的计算机知识需要掌握:●会激活应用程序●会使用鼠标●会使用下拉式菜单●会选择及编辑文本●会保存和打印工作如果对Microsoft Windows的操作比较生疏,建议先熟练Microsoft windows的基本操作。
定义:●双击连续快速双击鼠标左键●单击单击鼠标左键●选中单击一个目标后,此目标反显●选择用鼠标单击一个目标后,按住鼠标左键不放,然后移动鼠标将全部目标覆盖●拖动用鼠标选择一个目标后,按住鼠标左键不放,然后移动鼠标到预定位置●组合键用手按住指定按键后,再单击鼠标左键●在本文中出现的此标记是下—步的意思第二部分 图像技术概述什么是图像处理?一幅图像就是一个物体或一组物体的视觉描述。
图像处理就是对一幅图像所含信息根据特定的用途进行处理。
数字图像处理是一种计算机操作的特殊的图像处理方式。
你可能比较熟悉照片图像,但是照片并不能用计算机进行分析,这是因为计算机是以数字方式而不是以图形方式工作的。
为了使用计算机处理一幅相片,图像必须转换成数字方式。
这个过程就是图像数字化。
图像数字化数字化过程把一幅图像划分成平行的格点或阵列,这些格点或阵列被称为图像元素或像素。
在计算机中图像就是以这些数字格点或位图描述的。
位图中的每一个像素由它在格点中的位置表示,如行(x)和列(Y)。
方便起见,通常把位图左上角位置点设为参考点(0,0)。
DDR3设计调试DDR3设计配置:1.关于配置寄存器:部分配置寄存器基地址在0x2100_0000#define DDR3_BASE_ADDR (0x21000000)#define DDR_SDCFG (*(unsigned int*)(DDR3_BASE_ADDR + 0x00000008))#define DDR_SDRFC (*(unsigned int*)(DDR3_BASE_ADDR + 0x00000010))#define DDR_SDTIM1 (*(unsigned int*)(DDR3_BASE_ADDR + 0x00000018))#define DDR_SDTIM2 (*(unsigned int*)(DDR3_BASE_ADDR + 0x00000020))#define DDR_SDTIM3 (*(unsigned int*)(DDR3_BASE_ADDR + 0x00000028))#define DDR_PMCTL (*(unsigned int*)(DDR3_BASE_ADDR + 0x00000038))#define RDWR_LVL_RMP_WIN (*(unsigned int*)(DDR3_BASE_ADDR + 0x000000D4)) #define RDWR_LVL_RMP_CTRL (*(unsigned int*)(DDR3_BASE_ADDR + 0x000000D8)) #define RDWR_LVL_CTRL (*(unsigned int*)(DDR3_BASE_ADDR + 0x000000DC))#define DDR_ZQCFG (*(unsigned int*)(DDR3_BASE_ADDR + 0x000000C8))#define DDR_PHYCTRL (*(unsigned int*)(DDR3_BASE_ADDR + 0x000000E4))⼤部分寄存器位于chip-level registers 0x0262_0000 #define DDR3PLLCTL0 (*(unsigned int*)(0x02620330))#define DDR3PLLCTL1 (*(unsigned int*)(0x02620334))#define DATA0_WRLVL_INIT_RATIO (*(unsigned int*)(0x0262040C))#define DATA1_WRLVL_INIT_RATIO (*(unsigned int*)(0x02620410))#define DATA2_WRLVL_INIT_RATIO (*(unsigned int*)(0x02620414))#define DATA3_WRLVL_INIT_RATIO (*(unsigned int*)(0x02620418))#define DATA4_WRLVL_INIT_RATIO (*(unsigned int*)(0x0262041C))#define DATA5_WRLVL_INIT_RATIO (*(unsigned int*)(0x02620420))#define DATA6_WRLVL_INIT_RATIO (*(unsigned int*)(0x02620424))#define DATA7_WRLVL_INIT_RATIO (*(unsigned int*)(0x02620428))#define DATA8_WRLVL_INIT_RATIO (*(unsigned int*)(0x0262042C))#define DATA0_GTLVL_INIT_RATIO (*(unsigned int*)(0x0262043C))#define DATA1_GTLVL_INIT_RATIO (*(unsigned int*)(0x02620440))#define DATA2_GTLVL_INIT_RATIO (*(unsigned int*)(0x02620444))#define DATA3_GTLVL_INIT_RATIO (*(unsigned int*)(0x02620448))#define DATA4_GTLVL_INIT_RATIO (*(unsigned int*)(0x0262044C))#define DATA5_GTLVL_INIT_RATIO (*(unsigned int*)(0x02620450))#define DATA6_GTLVL_INIT_RATIO (*(unsigned int*)(0x02620454))#define DATA7_GTLVL_INIT_RATIO (*(unsigned int*)(0x02620458))#define DATA8_GTLVL_INIT_RATIO (*(unsigned int*)(0x0262045C))#define DDR3_CONFIG_REG_0 (*(unsigned int*)(0x02620404))#define DDR3_CONFIG_REG_12 (*(unsigned int*)(0x02620434))#define DDR3_CONFIG_REG_23 (*(unsigned int*)(0x02620460))#define DDR3_CONFIG_REG_24 (*(unsigned int*)(0x02620464))⼆、KICK Unlock和DDR3 PLL配置初始化DDR3控制器之前必须完成KICK Unlock和DDR3 PLL的配置。
dsp实验报告实验一:CCS入门实验实验目的:1. 熟悉CCS集成开发环境,掌握工程的生成方法;熟悉SEED-DEC643实验环境; 掌握CCS集成开发环境的调试方法。
2.学习用标准C 语言编写程序;了解TI CCS开发平台下的C 语言程序设计方法和步骤; 熟悉使用软件仿真方式调试程序。
3. 学习用汇编语言编写程序; 了解汇编语言与 C 语言程序的区别和在设置上的不同;了解TMS320C6000 汇编语言程序结果和一些简单的汇编语句用法学习在CCS 环境中调试汇编代码。
4. 在了解纯C 语言程序工程和汇编语言程序工程结构的基础上,学习在C 工程中加入汇编编程的混合编程方法; 了解混合编程的注意事项;理解混合编程的必要性和在什么情况下要采用混合编程5. 熟悉CCS集成开发环境,掌握工程的生成方法; 熟悉SEED-DEC643实验环境;掌握CCS集成开发环境的调试方法。
实验原理:CCS 提供了配置、建立、调试、跟踪和分析程序的工具,它便于实时、嵌入式信号处理程序的编制和测试,它能够加速开发进程,提高工作效率。
CCS 提供了基本的代码生成工具,它们具有一系列的调试、分析能力序。
使用此命令后,要重新装载.out 文件后,再执行程序。
使用 CCS常遇见文件简介1. program.c: C 程序源文件;2. program.asm: 汇编程序源文件;3. filename.h: C 程序的头文件,包含DSP/BIOS API模块的头文件;4. filename.lib: 库文件;5. project.cmd: 连接命令文件;6. program.obj: 由源文件编译或汇编而得的目标文件;7. program.out: 经完整的编译、汇编以及连接后生成可执行文件; 8. program.map: 经完整的编译、汇编以及连接后生成空间分配文件; 9.project.wks: 存储环境设置信息的工作区文件。
P.S(CMD文件中常用的程序段名与含义1. .cinit 存放C程序中的变量初值和常量;2. .const 存放C程序中的字符常量、浮点常量和用const声明的常量;3. .text 存放C程序的代码;4. .bss 为C 程序中的全局和静态变量保留存储空间;5. .far 为C 程序中用far声明的全局和静态变量保留空间;6. .stack 为 C 程序系统堆栈保留存储空间,用于保存返回地址、函数间的参数传递、存储局部变量和保存中间结果;7. .sysmem 用于 C 程序中malloc、calloc 和 realloc 函数动态分配存储空间。
CCS3.3中不导入工程直接加载.out文件的方法有时候我们在运行DSP程序时,没有带有源文件的工程项目,只有一个可执行文件.out文件或者我们不想导入复杂的工程项目而运行程序,那么我们如何加载这个.out文件到DSP中运行呢,下面以TMS320C6455为例,介绍了CCS3.3版本的加载方法。
1、正确连接仿真器,板卡上电,打开CCS3.3
2、添加GEL文件
选中GEL files,右键选择Load GEL,添加相应的GEL文件。
本例TMS320C6455相应的GEL文件为DSK6455.gel,路径为C:\CCStudio_v3.3\cc\gel(CCS3.3安装在C盘)。
GEL文件主要进行一些必要的初始化,并提供一些常用功能的函数,此时必须要添加。
添加完成后如图,
3、连接目标板
单击Debug,选择Connect连接目标板,或者使用快捷键Alt+C
4、加载.out文件
单击File,选择Load Program,选择要加载的.out文件并打开,等待加载完成。
如图,
5、运行程序
加载完成后,点击左侧“运行”按钮(Debug->Run或者快捷键F5)运行,
查看运行结果。
本例中,加载成功后运行结果如图,
至此,CCS3.3中直接加载.out文件运行成功。
GEL概述GEL(General Extension Language通用扩展语言)是一种类似于C 语言的一种解释性语言,它可以创建GEL函数,以扩展CCS用途。
GEL是C语言的一个子集,然而它不能声明主机变量,所有的变量必须在DSP程序中定义,存在于仿真/实际目标板中,唯一不在目标板上定义的标识符是GEL函数及其参数。
GEL函数可在任何能键入C表达式的地方调用,既可以在任何可键入C表达式的对话框中调用,也可以在其他GEL函数中调用;但不支持递归。
在实际应用中,用户只需要要按照GEL的语法,建立GEL文件并将其加载到CCS中。
加载GEL文件后,为GEL菜单增加新的功能选项,这给调试程序时自动测试以及用户自定义工作空间带来很大方便。
注意:GEL对于硬件仿真环境是没有太大用处的,但在软件仿真环境下,GEL可以为用户产生一个虚拟的DSP硬件初始化环境。
1、在GEL菜单中添加GEL函数在一个工程项目中,可以将常用的GEL函数添加到CCS的GEL菜单下,此时需要使用menuitem关键词在GEL菜单下创建一个新的下拉菜单列表(一级菜单),再使用hotmenu,dialog和slider等关键词,在该菜单项中添加新的菜单项(二级菜单)。
2、GEL文件的加载和卸载对于包含一个或多个GEL函数的文件(.gel),编写好后,必须将其加载到CCS中才能调用GEL文件中的GEL函数。
有两种加载GEL 文件的方法:②选择File→Load GEL菜单项,从文件夹中选择GEL文件加载。
②在工程窗口中,右击GEL File文件夹,在弹出的快捷菜单中选择Load GEL,然后从文件夹中选择GEL文件加载。
GEL文件一旦加载,其中的GEL函数将一直驻留在内存中,直到将其卸载为止。
当一个加载的GEL文件更改后,必须先将其卸载,然后再重新加载才能使更改生效。
GEL文件的卸载很简单,右击欲卸载的GEL文件名,从弹出的局势菜单中选择Remove就可以了。
从CCS启动是自动执行GEL函数。
SETUP CCS时设置环境时设置了自动执行GEL函数,自动运行StartUp()函数,这样要求每个工程建立时都载入GEL文件。
CCS提供了一系列嵌入GEL的函数。
使用这些函数,用户可以控制仿真/实际目标板的状态,访问存储器,并在输出窗口中显示结果。
使用CCSStudio Setup工具,可以为系统配置中的每一个处理器指定一个启动GEL文件。
当CCSStudio启动时,GEL文件加载到PC机的内存中,如果定义了StartUp()函数则执行该函数。
在CCSStudio(V2.3或更早的版本中),主机和目标板的初始化工作都在Startup()函数中执行。
但是对于支持Connect/Disconnect的CCSStudio(V2.4 或之后的版本,尤其3.1版本),这样的GEL文件有可能没有正确的执行,因为CCSStudio启动时和目标处理器是断开的。
这个时候,当Startup()函数试图访问目标处理器时会出错。
因此,V2.4或之后的版本,尤其3.1版本CCS启动时候,一个新的回调函数OnTargetConnect()来执行目标处理器的初始化工作。
3、GEL回调函数3.1 Startup()函数如果指定的GEL文件中包含Startup()函数,当CCSStudio启动时执行Startup()函数。
支持Connect/Disconnect的CCSStudio的启动时,Startup()函数中不包括访问目标处理器的代码,目标处理器由回调函数OnTargetConnect()来初始化。
推荐:建立基本的CCSStudio内存映射关系(不需要访问目标处理器)任何不需要访问目标处理器的基本初始化不推荐:Get_Reset()(该函数通过仿真器复位目标处理器)通过GEL_BreakPtAdd()设置断点GEL_TextOUT()和GET_OpenWindow(),因为StartUp()执行时CCSStudio的任何控制窗口还没有打开不支持Connect/Disconnect的CCSStudio GEL文件中的StartUp()函数:/* The StartUp() function is called each time CCS is started. *//* Customize this function to perform desired initialization. */StartUp(){setup_memory_map();GEL_Reset(); /* Do not call in StartUp() with CCStudio v2.4 or higher */init_emif(); /* Do not call in StartUp() with CCStudio v2.4 or higher */}支持Connect/Disconnect的CCSStudio GEL文件中的StartUp()函数:/* The StartUp() function is called each time CCS is started. *//* Customize this function to perform desired initialization *//* that will not access the target. */StartUp(){setup_memory_map();}3.2 OnTargetConnect()函数绝对最小的系统初始化处理,保证CCSStudio在目标处理器上处于一种可信赖的状态。
例如:禁止看门狗时钟、DSP复位结束每一次和目标处理器建立连接时都调用OnTargetConnect()函数。
/* OnTargetConnect() is called every time a target is connected.*//* Its execution finishes before anything else occurs. Customize*//* this function to perform essential target initialization. */OnTargetConnect(){// place critical target initialization steps hereGEL_Reset();init_emif();}对某些平台,必须调用GEL_Reset()函数使得CCSStudio处于一种“Good”状态,可以通过测试来确定是否需要调用GEL_Reset()函数。
应该尽可能的降低GEL startup functions复杂度-包括减少GEL_Reset()的调用。
3.3 OnPreFileLoaded()函数在加载program/symbol(.out)文件之前该回调函数执行。
在该函数中执行另外的目标处理器初始化操作以保证程序可以加载和调试是一个好的选择。
/* This function is called automatically when the 'Load Program'*//* Menu item is selected. */OnPreFileLoaded(){FlushCache();IER = 0;IFR = 0;init_emif();}3.4 OnReset()函数当目标处理器复位后该函数被调用。
如果你需要每次重新启动程序设计了软复位,GEL_Restart()在此处调用。
/* This function is called automatically after a SW Reset has been executed.OnReset(intnErrorCode){init_emif();}3.5OnRestart()函数当程序复位时调用该函数。
This function is called by CCS when you do Debug->Restart. The goal is to put the C6x into a known good state with respect to cache, edma and interrupts. Failure to do this can cause problems when you restart and run code multiple times.OnRestart(intnErrorCode ){Turn off L2 for all EMIFA CE spaces. App should manage these for coherency GEL_TextOut("Turn off cache segment\n");*(int *)0x1848200 = 0; /* MAR0 */*(int *)0x1848204 = 0; /* MAR1 */*(int *)0x1848208 = 0; /* MAR2 */*(int *)0x184820c = 0; /* MAR3 *//* Disable EDMA events and interrupts and clear any pending events. */GEL_TextOut("Disable EDMA event\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 *//* Disable other interrupts */IER = 0;IFR = 0;}4、存储器映射CCSStudio存储器映射告诉调试器目标处理器的那些存储区域可以访问那些不能访问。
CCSStudio存储器映射一般在StartUp()函数种执行。
4.1 、GEL_MapAdd()函数该函数添加一个存储区域到存储区映射中。
4.2 、GEL_MapOn()和GEL_MapOff()函数可以调用GEL_MapOn() or GEL_MapOff()来打开或关闭存储区映射。
当存储区映射关闭时,CCSStudio假定可以访问所有的存储区空间。