2010年07月27日
by trueman
0 comments
#pragma DATA_SECTION("vectors")//将中断向量绝对定位到0×80处 uVectorEntry g_pfnVectors[] = { ISR_Reset(), //reset 0×0080 #0//软硬件复位nISR_REST ISR_Default(), //nmi 0×0084 #1//非屏蔽中断nISR_NMI ISR_Default(), //sint17 0×0088 #2//软件中断17 ISR_Default(), //sint18 0x008c #3//软件中断18 ISR_Default(), //sint19 0×0090 #4//软件中断19 ISR_Default(), //sint20 0×0094 #5//软件中断20 ISR_Default(), //sint21 0×0098 #6//软件中断21 ISR_Default(), //sint22 0x009c #7//软件中断22 ISR_Default(), //sint23 0x00a0 #8//软件中断23 ISR_Default(), //sint24 0x00a4 [...]
DSP
2010年07月27日
by trueman
1 comment
下边方法的思路:建立一个新的中断向量表;将现有中断添加入中断向量表中;将新建的中断向量表映射到相应的位置。 1. 编写中断服务例程 在.c源文件中编写ISR函数c_intXX,用于中断处理,如: interrupt void c_intXX (void) { …; } 注:对于硬件中断而言,XX = 00~15。 2.初始化中断向量表,并在内存段中的中断向量表中配置好对应的中断向量 首先是把中断向量表定位到某一内存段中,我们可以在cmd文件中配置中断向量表的内存映射,如: MEMORY { VECTORS: org = 00000000h, len = 00000400h L2SRAM: org = 00000400h, len = 00100000h SDRAM: org = 80000000h, len = 10000000h } SECTIONS { .vecs :> VECTORS .data :> [...]
DSP
2010年07月27日
by trueman
0 comments
以下方法还没有验证。 即将验证: 1.进入CCS环境,装载已有工程,并load生成的.out文件,并找到要察看代码执行周期的代码处。如图1所示。 图1 1. 选择ccs的菜单Profiler中的enable clock,如图所示。 Technorati 标签: ccs,dsp 图2 2. 选择Profiler菜单下的 clock setup子菜单,并在Instruction Cycle中输入你的DSP时钟周期,它的单位为纳秒,例如,2407的系统时钟为40MHz,你就该填入25,如果是2812系统时钟为150MHz,就该填入6.67ns,其他配置不动,然后确定。如图3所示。 图3 3. 选择Profiler菜单下的Start New Session子菜单,出现如图4所示的对话框,可以改名字,也可以不改,本例中不修改,直接确定。 图4 4. 通过第四部设定后就出现了如图5所示的一个窗体。 这个窗体中,有四个选项卡,其中Files为以源文件列出统计数据,Functions选项卡用于剖析程序中的函数,Ranges用于剖析一段连续的代码,Setup用于设置开始点和结束点,用于剖析不连续的代码。 窗体的左边按钮的含义为:(这里介绍主要的) 剖析所有的函数。 建立剖析区域。 设置开始点。 设置结束点。 在窗体中剖析数据有一个表格,用红框圈起来的,每个表格的字段名的含义为: Code size:剖析代码的大小,以程序存储器最小可寻址单元为单位,此值在剖析过程中不会发生变化。 Incl. Count:在统计过程中,程序运行进入剖析代码段的次数 Incl. Total: 在统计工程中剖析代码段消耗的所有时钟周期(如果是统计时钟周期的话,CCS还可以统计子程序调用等其他计数,统计其他特性则显示相应的值)。 Incl. Maximum: 执行剖析代码段一遍(包括在剖析代码段中对子程序的调用)消耗的最大时钟周期(由于每次进入剖析代码段的初始条件不同等原因,每次运行剖析代码段消耗的时钟周期可能不同); Incl. Minimum: 执行剖析代码段一遍(包括在剖析代码段中对子程序的调用)消耗的最小时钟周期 Incl. Average: 剖析代码段执行一遍(包括在剖析代码段中对子程序的调用)消耗的平均时钟周期。– 以上这三个就是用户关心的代码执行的时钟周期。 Excl. Count:在统计过程中,程序运行进入剖析代码段的次数,与Incl.Count的值相同。 Excl. Maximum: 剖析代码段执行一遍(不包括在剖析代码段中对子程序的调用)消耗的最大时钟周期。 Excl. Minimum: [...]
DSP
2010年07月26日
by trueman
1 comment
在ti的DSP程序设计中,总的说一个完整的工程需要由库文件(.lib),头文件(.h),源文件(.c)和CMD文件(.CMD)组成,缺一不可。另外,还有一种GEL文件。 通用扩展语言(.GEL) 什么是GEL文件?GEL文件的作用是什么呢? GEL是通用扩展语言(General Extension Language)是一种解释语言,类似于C语言。GEL函数可以用来扩展CC的功能,方便用户调试程序。CCS提供丰富的内嵌GEL函数,用户也可以定义自己的GEL函数。在处理器属性的GEL文件窗内为每个处理器选择用户的GEL文件(扩展名为 .gel) 需要注意的是:GEL文件用于初始化DSP。GEL在CCS下有一个菜单,可以根据DSP的对象不同,可以用gel来调用一些菜单命令,对DSP的存储器进行配置,设置不同的初始化程序。 在我们的调试中,出现过仿真器突然不能下载的情况。分析原因,是因为修改了gel的PMST参数,将它设置成了0xffac。经过验证,这个参数设置会导致仿真器失常,下载出错。将它设置成0x00ac、0x7fac等等都没有问题。 CMD文件(.CMD) 以.CMD为扩展名的文件,这个文件的作用是用来分配存储空间的。由于DSP编译器的编译结果是未定位的,DSP也没有操作系统来定位执行代码,DSP系统的配置需求也不尽相同,因此我们根据实际的需求,自己定义代码的存储位置。打个通俗的比喻,就是我们有一个仓库,现在需要把货物存放到仓库里面去,为了便于日后取用货物,我们将货物分门别类,然后把它们存放到指定的位置去。把哪些货物放到哪个位置的规则,就是我们的CMD文件的内容。 CMD文件又分成两种。一种是分配RAM空间的–微计算机模式(仿真模式)—XMP/MC`=0,用来将程序load到RAM内进行调试,因为我们大部分时间都是在调试程序,所以多用这类CMD,另一种是分配FLASH空间—–微处理器模式—XMP/MC`=1,当程序调试完毕后,需要将其烧写到FLASH内部进行固化,这个时侯我们 就需要使用这类CMD文件了。 库文件(.lib) .lib是库文件,rts.lib是TI提供的运行时支持库,如果是C代码写的源程序,必须要包含该库。该库由TI公司做好了,放在CCS的\cgtools\lib中,源代码TI网站可以下载。但是我们无法查看.编辑TI所提供的库文件内容 我们也可以添加自己的库,可在newproject中新建 头文件(.h) 源文件(.c)
DSP