专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
DSP
DSP28335工程模版各文件介绍
2019-07-13 10:21
发布
生成海报
站内文章
/
DSP
9602
0
1663
首先建立工程,file-new-css project。然后设置该工程。(包含include路径,是否使用浮点,生成的文件路径等),然后加入一些TI已经写好的文件。最终如下图:
一、ccs
中后缀为.pjt
的文件作用是什么?每个项目都需要有自己独有的pjt文件吗?
pjt
是project的缩写,你可以用任何的文本编辑软件打开查看里面的内容,例如记事本等。他里面主要指定了这个工程里有哪些源文件(.C、.CPP)要参与编译,头文件的搜索路径,还有就是工程的编译选项。你在工程里添加删除源文件,build option里修改编译选项,实际上就是在修改这个pjt文件,每个项目工程都要有一个对应的pjt文件,这样才能在CCS中管理工程,编译工程并最终输出可下载到DSP目标板运行的out文件。(编译后根据配置生成)
二、相对路径与绝对路径
利用网上找的一个
VC下的解释,
在用VC
编写程序的时候经常要用到相对路径的问题,在程序中写绝对路径会给代码移植带来巨大的麻烦,可以说是编程大忌。下面说明如何写相对路径。
相对路径,顾名思义,就是以当前文件为标准,找到另一个文件的位置关系。
如果当前打开的文件中要寻找同级的目录文件就要用到.\或者./vc
编译器都可以识别。例如#define ".XXXXxx.h"
如果当前打开的文件中要寻找在上级的目录文件就要用到..\或者../vc
编译器都可以识别。例如#define "..XXXXxx.h"
通过这样简单的标识,vc
相对路径的问题就解决了,这样也就避免了设置繁琐的系统路径。当然了,设置相对路径要在编码的时候对文件的存放层次关系特别清楚,否则统一修改路径将会带来很大的工作量。
绝对路径即从最上层一步步的全部包含的地址。
感觉应该都是根据这个地址设置相对路径的。(上一级应该指的是Q28335_SPI_8SEG的上一级)
头两个找到的是编译器的安装路径中的文件,大括号定义中的变量不知在哪,后两个为这两个文件放置的路径,大括号中的变量就定义在
macros.ini
中。
三、ccmxl文件
仿真器与目标板建立链接的设置。(写入仿真器的型号,目标板的型号。)
ccmxl
文件用于仿真器与板子之间的连接,是仿真器在线调试必须的;
a.新建New——TargetConfiguration File即可;建立后单击View——TargetConfiguration即可查看;
注意,有必要在其上右击选择setas default将其设为default;
b.在新建项目后,也可以在其上右击选择LinkFile To Project将其添加到你的工程中去;
c.板子接仿真器,然后上电,右击ccxml文件,点击launchselected configuration,这样可以测试仿真器与板子的链接;
成功连接后,就可以点Run-Load-Load Program选项添加你的编译生成的.out文件,进行在线仿真。
四、DSP2833x_Headers_nonBIOS.cmd
主要是对外设的寄存器与内存的地址建立了联系(包含MEMORY与SECTIONS)
MEMORY代表内存空间,PAGE0是程序空间, PAGE1是数据空间;(就是放入到内存的哪个位置)
SECTIONS代表需要映射的段。
MEMORY 指令可以根据实际的硬件地址建立一个地址空间模型,SECTION 这条指令就可以起到地址控制分配的只用,将初始化和未初始化的段非配到 MEMORY建立的地址空间去。
(
MEMORY
也即是把一块内存地址取个名字,
SECTIONS
也即是把谁放入到这个内存中)
例如上面即时把DevEmuRegsFile段放到DEV_EMU中,也即是0x000880到0x000180内存中。
如果想改变放置的位置,下面是官方
DSP2833x_GlobalVariableDefs.c
中的一段代码:
#ifdef
__cplusplus
#pragma
DATA_SECTION(
"DevEmuRegsFile"
)
#else
#pragma
DATA_SECTION(DevEmuRegs,
"DevEmuRegsFile"
);
#endif
volatile
struct
DEV_EMU_REGSDevEmuRegs;
在CCS编程中,如果我们不指定变量的存放位置,编译器会自动的给变量分配一个位置,但是如果有的时候需要把变量放在一个特定的空间内,我们应该如何操作呢,CCS提供了如下的两个指令:
#pragma CODE_SECTION
与
#pragma DATA_SECTION
其中data_section是针对数据空间的,code_section是针对程序空间的,具体的使用办法是
#pragmaDATA_SECTION(bufferB,
”
my_sect
”
)
char bufferB[512];
在.cmd文件中建立对应的section就可以使用了。
MEMORY { PAGE 1: spacename :origin = 0x...., length 0x.. }
SECTIONS { .my_sect : {} >spacename PAGE 1 }
#pragma DATA_SECTION(函数名或全局变量名,"用户自定义在数据空间的段名");
#pragma CODE_SECTION(函数名或全局变量名,"用户自定义在程序空间的段名");
注意
不能在函数体内声明,
必须在定义和使用前声明,
#pragma
可以阻止对未调用的函数的优化。
五、28335_RAM_Ink.cmd(下载到flash中是F28335.cmd)
对内存与段进行了划分,与DSP2833x_Headers_nonBIOS.cmd不同的是DSP2833x_Headers_nonBIOS.cmd只是对外设寄存器的位置的配置。28335_RAM_lnk.cmd对应的是可执行程序的放置位置的配置。方法是相同的。
六、DSP2833x_SysCtrl.c
DSP2833x_SysCtrl.c
是对
DSP2833x
的系统控制模块进行初始化。首先
(例如关于时钟,默认是全部开启)可以根据实际的项目进行修改。
七、DSP2833x_PieCtrl.c
DSP2833x_PieCtrl.c
初始化外围中断矢量控制寄存器
其内部函数的形式:
八、DSP2833x_PieVect.c
主要是对在该头文件中出现的中断函数初始化一个默认的入口地址,如果在使能中断,但是又没有重新给他赋值新地址的时候则该地址则为其中断函数的入口地址。简单的说就是使能中断向量表,并且初始化相应的中断入口地址。函数如下:
定义了这样的一个结构体,内部元素为各中断源名字。(是定义的中断函数的函数名)
在对应头文件中。
DSP2833x_DefaultIsr.c
,似乎是定义的一个个空的中断函数,需要相应的中断函数的时候就在相应的空函数体内加入代码。(实际上似乎不是的,等之后编中断函数的时候再确认)函数如下形式:
九、
ADC_cal.asm
28335
如果是正常启动的话,
ADC_cal()
这个校准函数在上电引导程序内就被自动调用了,用户不需要干预。而在调试模式下这一过程可能被绕过,所以需要用户自行调用,以校准
ADC
的转换结果。
文档上提供的两种方法
1
、汇编法
2
、指针函数法。第
2
种比较好理解,就是定义一个指向校准函数的指针,然后打开
ADC
时钟,运行校准函数就行。
第一种方法中,第一步添加
adc_cal.asm
,第二步映射到内存中一个位置,第三步调用
adc_cal()
十、
DSP2833x_CodeStartBranch.asm
执行完
boot
之后就执行该程序,
CMD
文件把
codestart
段放到
0x33FFF6
位置处,文件
“DSP2833x_CodeStartBranch.asm”
中有
codestart
段的定义,实际上
codestart
段只是包含了一个跳转指令,是程序跳转到
_c_int00
处,
_c_int00
在
boot.asm in RTS library
中有定义,
_c_int00
的代码最终会调用
c
的
main
函数,之后就是
main
函数的执行。(
其实
,
仿真状态下
,
这个
DSP281x_CodeStartBranch.asm
文件是不起作用的。原因嘛就是一仿真
,
仿真器直接把程序入口放到了
_c_int00
处了
。
也就是说
,_c_int00
之前的所有程序被仿真器跳过了
,
根本不执行
。
但是在
FLASH
启动下
,
这个
DSP281x_CodeStartBranch.asm
文件就是必须的
,
否则不能启动
)
rts2800.lib:C/C++
运行支持库
;
rts2800_ml.lib C/C++
大内存模式运行支持库
.
rts2800_ml.lib
中有大量浮点运算处理的函数而
rts2800.lib
没有,具体可在库文件的原文件中查询。
十一、若是下载到
flash
中,还需添加这两个文件
具体解释在划线处。(运行时把相应的代码搬移到RAM中)
以上这些都是
TI
公司已经写好,可直接放入我们的工程中,方便我们的开发,具体使用可以再修改这些文件。
Ta的文章
更多
>>
在mac下去掉电源使用ubuntu
0 个评论
10A同步升压IC HT7167/TPS61088对比测试报告
0 个评论
DSP28335工程模版各文件介绍
0 个评论
ARM与嵌入式linux入门的建议(深蓝原创)
0 个评论
热门文章
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮