折腾了好多天,终于下载了第一个程序到片子里。
虽然看不见有什么输出,但从仿真器的现象和CCS里边看得结果,程序确实是写进去了。
开贴记录我的TMS320VC5410开发板折腾进程


2楼
开发环境用的是CCS2.2
用3.3有问题。3.3默认的Gel文件有bug。这个bug让我折腾了好多天。
第一个BUG是这样的:
CCSSetup里边配置好MCU和仿真器之后,启动CCS。
会报出一个对话框,写着:
Error adding memory map range:End address is beyond target memory length
这是因为gel文件里边有一行这样的:
GEL_MapAdd(0x18000u,0,0x8000u,1,1); /* SARAM2 */
将sram映射到0x18000u开始0x8000u结束的地址。
这个在启动是就会报错。
我还没用到外扩的SRAM,暂时不考虑这一行。就将他改成
GEL_MapAdd(0x8000u,0,0x8000u,1,1); /* SARAM2 */
这样这个告警就没了
然后就是一个
Unable to determine default Pin/Port configuration!
这个据说是CCS系统的BUG。有人打电话问TI,说是兼容性问题这个可以不用考虑的
看着烦,就改回去CCS2.2了,这些问题都没有了。网上找了个小程序,能下载到板子上。
用3.3有问题。3.3默认的Gel文件有bug。这个bug让我折腾了好多天。
第一个BUG是这样的:
CCSSetup里边配置好MCU和仿真器之后,启动CCS。
会报出一个对话框,写着:
Error adding memory map range:End address is beyond target memory length
这是因为gel文件里边有一行这样的:
GEL_MapAdd(0x18000u,0,0x8000u,1,1); /* SARAM2 */
将sram映射到0x18000u开始0x8000u结束的地址。
这个在启动是就会报错。
我还没用到外扩的SRAM,暂时不考虑这一行。就将他改成
GEL_MapAdd(0x8000u,0,0x8000u,1,1); /* SARAM2 */
这样这个告警就没了
然后就是一个
Unable to determine default Pin/Port configuration!
这个据说是CCS系统的BUG。有人打电话问TI,说是兼容性问题这个可以不用考虑的
看着烦,就改回去CCS2.2了,这些问题都没有了。网上找了个小程序,能下载到板子上。

3楼
于是,我的开发环境出来了:
仿真器:XDS510
软件环境:CCS2.2
开发板:TM320VC5410A
仿真器:XDS510
软件环境:CCS2.2
开发板:TM320VC5410A

4楼
敲出来第一个程序。弄了半天终于能运行了。
DSP程序有几个部分:
1、源文件,大家都知道的
2、中断向量表文件
3、cmd文件,管的是内存的分配。告诉CCS程序应该加载到什么地方去。
CMD文件编写一片陌生。这次用的是个现成的。
据群里边网友sprone介绍,有本书:手把手教你学F2812,可以参考
DSP程序有几个部分:
1、源文件,大家都知道的
2、中断向量表文件
3、cmd文件,管的是内存的分配。告诉CCS程序应该加载到什么地方去。
CMD文件编写一片陌生。这次用的是个现成的。
据群里边网友sprone介绍,有本书:手把手教你学F2812,可以参考

5楼
看看数据手册:TMS320C54x DSP Reference Set, Volume 1: CPU and Peripherals
完全不懂什么叫做按页分配内存,也许平时都用到了但没这么叫,也许是个新东西
完全不懂什么叫做按页分配内存,也许平时都用到了但没这么叫,也许是个新东西

6楼
继续今天的折腾,看spru173。
跟以前玩的几个东西都不一样,这个DSP得自己写代码让它启动。
以前的ARM7、CM3、51什么的基本都是可以不用管启动的。
跟以前玩的几个东西都不一样,这个DSP得自己写代码让它启动。
以前的ARM7、CM3、51什么的基本都是可以不用管启动的。

7楼
一个没有CMD的工程,可以运行。据说CCS自己给添加了CMD,这种CMD效率比较低。
这种低效率的方法只有在添加了对rts.lib的引用之后才能用,程序入口在c_int00,之后跳转到main
这种低效率的方法只有在添加了对rts.lib的引用之后才能用,程序入口在c_int00,之后跳转到main


9楼
第一个稍微有那么点样子的DSP程序,相当于一个Hello world:
一小段汇编:
.title "ex.asm"
.mmregs
STACK .usect "STACK",10H
.bss x,1
.def start
.data
table: .word -7
.text
start STM #0,SWWSR //这里是程序入口,跟CMD文件对应
STM #STACK+10H,SP
STM #x,AR1
MVPD table,*AR1
LD *AR1,A
BC end,AGT
ABS A
STL A,@x
end: B end
.end
外加一段CMD进行内存分配:
Debug\ex.obj //要进行连接的OBJ文件
-o Debug\ex.out //生成的目标文件
-m Debug\ex.map //map文件
-e start //程序入口
MEMORY
{
PAGE 0:
EPROM:org = 0E00H,len = 100H
PAGE 1:
SPRAM:org = 0060H,len = 20H
DARAM:org = 0080H,len = 100H
}
SECTIONS
{
.text :>EPROM PAGE0
.data :>EPROM PAGE0
.bss :>SPRAM PAGE1
STACK :>DARAM PAGE1
}
程序实验了几个简单的指令,体验了CMD文件的写法。
几行汇编是抄的,伪指令还没搞明白。有待进一步理解
这段小程序在链接的时候还有三个Warning如下:
<Linking>
>> D:\dspPRJ\ex42\ex42.cmd, line 19: warning:
multiple definitions of SECTION named 'PAGE0'
>> D:\dspPRJ\ex42\ex42.cmd, line 21: warning:
multiple definitions of SECTION named 'PAGE1'
>> warning: entry point other than _c_int00 specified
第三个倒好理解,因为程序的入口点c_int00我没有定义。我定义了start作为程序的入口
前两个warning,说是SECTIONS段里边重复定义了PAGE0和PAGE1.我哪里重复定义了啊?
一小段汇编:
.title "ex.asm"
.mmregs
STACK .usect "STACK",10H
.bss x,1
.def start
.data
table: .word -7
.text
start STM #0,SWWSR //这里是程序入口,跟CMD文件对应
STM #STACK+10H,SP
STM #x,AR1
MVPD table,*AR1
LD *AR1,A
BC end,AGT
ABS A
STL A,@x
end: B end
.end
外加一段CMD进行内存分配:
Debug\ex.obj //要进行连接的OBJ文件
-o Debug\ex.out //生成的目标文件
-m Debug\ex.map //map文件
-e start //程序入口
MEMORY
{
PAGE 0:
EPROM:org = 0E00H,len = 100H
PAGE 1:
SPRAM:org = 0060H,len = 20H
DARAM:org = 0080H,len = 100H
}
SECTIONS
{
.text :>EPROM PAGE0
.data :>EPROM PAGE0
.bss :>SPRAM PAGE1
STACK :>DARAM PAGE1
}
程序实验了几个简单的指令,体验了CMD文件的写法。
几行汇编是抄的,伪指令还没搞明白。有待进一步理解
这段小程序在链接的时候还有三个Warning如下:
<Linking>
>> D:\dspPRJ\ex42\ex42.cmd, line 19: warning:
multiple definitions of SECTION named 'PAGE0'
>> D:\dspPRJ\ex42\ex42.cmd, line 21: warning:
multiple definitions of SECTION named 'PAGE1'
>> warning: entry point other than _c_int00 specified
第三个倒好理解,因为程序的入口点c_int00我没有定义。我定义了start作为程序的入口
前两个warning,说是SECTIONS段里边重复定义了PAGE0和PAGE1.我哪里重复定义了啊?

10楼
搞明白了:
SECTIONS
{
.text :>EPROM PAGE0
.data :>EPROM PAGE0
.bss :>SPRAM PAGE1
STACK :>DARAM PAGE1
}
改写成:
SECTIONS
{
.text :>EPROM PAGE 0
.data :>EPROM PAGE 0
.bss :>SPRAM PAGE 1
STACK :>DARAM PAGE 1
}
中间有个空格,疏忽啊。。。。。
下载,运行,没问题了。
至于那个c_int00警告暂时先不管了。
SECTIONS
{
.text :>EPROM PAGE0
.data :>EPROM PAGE0
.bss :>SPRAM PAGE1
STACK :>DARAM PAGE1
}
改写成:
SECTIONS
{
.text :>EPROM PAGE 0
.data :>EPROM PAGE 0
.bss :>SPRAM PAGE 1
STACK :>DARAM PAGE 1
}
中间有个空格,疏忽啊。。。。。
下载,运行,没问题了。
至于那个c_int00警告暂时先不管了。
回复
打赏帖 | |
---|---|
VOFA+波形显示+JYD-31蓝牙发送和解析不定长数据被打赏10分 | |
宏定义和const关键字定义被打赏5分 | |
换取逻辑分析仪】STM32G4从入门到大师之五:ADC中断方式单路采集电压被打赏16分 | |
【换取逻辑分析仪】STM32G4从入门到大师之四:ADC查询方式单路采集电压被打赏14分 | |
【分享开发笔记,赚取电动螺丝刀】几个单片机I2S外设的BLCK时钟对比被打赏20分 | |
【功率监测与控制系统DIY活动成果贴】DIY功率计与LabVIEW数据采集被打赏100分 | |
【分享开发笔记,赚取电动螺丝刀】使用ESP32S3调试I2S音频模块MAX98357被打赏22分 | |
【Freertos】任务管理被打赏10分 | |
分享博世的两种不同的喷射系统模式被打赏5分 | |
汽车+开路实验与短路实验被打赏10分 |