C2000系列常见问题

2019-08-02 15:28发布

看到有很多朋友用到C2000系列,现将这个系列觉的一些问题做个整理,方便初学者查阅。
1、将程序烧写入28xx的flash以后为什么设置不了断点(或只能设置一个断点)?
28xx最多允许设置两个硬件断点,一些C语言函数(如输出函数)会自动占用硬件断点,可以将该函数放在ram里执行。在CCS的Options->Customize->Program Load Options(不同的ccs版本可能不一样)选上
(1).`Do not set CIO breakpoint at load.`
(2).`Do not set end of program breakpoint at load.`
就可以设置两个硬件断点了。
分析: 在flash里只能设置硬件断点,Ram里可以设置软件断点(硬件断点也可以),其数量是没有限制的。这跟断点的机制有关(软件断点需要修改程序,硬件断点需要存储地址)

2、SEED-BLDC示例程序当中给了有位置传感器无刷电机的开环控制,第一次将主板和驱动板连接好时,开环例程运行一次后,第二次接着运行不行,必须得重新加载.out文件电机才能够正常?
开环例程的流程是一个开环体系。电机的运转就是个中断程序,进入中断后程序停止是不会跳出中断回到主程序,这一点可以通过在主程序第一指令处设置断点,而CCS是无法运行到该断点处来验证。解决办法:重新加载或debug->restart

3、我在TMS320LF2407A中无法设置硬件断点,一设置就报错,怎么回事?
ti2407使用内部flash仿真2407使用内部flash 仿真时候,需要使用ccs中 tools on-chip flash programmer 下载程序到内部flash中(如果没有这程序,装插件),然后使用file-load program复位程序,则程序可以运行增加断点,首先使用toggle breakpoint 增加断点,此时断点无用,然后进入debug-breakpoint 看到刚才断点,在breakpoint中,选择h/w break,点add增加一个硬件断点,此时可以使用断点仿真(同时只能有一个断点),CCS3.X以上版本可以直接设定,无须上述操作

4、是否可以用串口烧写2812片上flash?
C2000系列支持串口烧写片上flash,注意与bootmod有关的引脚是否按要求上下拉。
在软件中设置选择正确的232串口,握手过程会占用一定的时间,烧写速度可以参考软件
配套的文档进行设置。
注意:所有烧录入flash的数据必须定义在正确的page里

分析:串口烧写flash相比jtag烧写有不用装CCS,不需要留jtag口,使用简单方便的的特点。对于板卡空间有要求,或产量较大的用户是一个不错的选择。


5、F28x CCS 插件的烧写步骤
Step 1 : 选择一个工程。这个工程应该是调试通过的,并且可以在CCS调试状态下正常运行。
Step 2 : 对这个工程的CMD文件进行增加Flash的内存分配的内容。最好同时编制两份CMD文件:一份给烧写Flash用,一份仿真和试验使用。
Step 3:需要时对工程的文件进行修改,增加Flash API、程序搬移等文件。以扩展程序的有效运行和应用。
Step 4 : 编译这个文件以生成插件可识别的COFF文件
Step 5 : 打开CCS插件,设置时钟和相关内容
Step 6 : 配置插件的API
Step 6 : 测试时钟和工作频率
Step 7 : 选择需要擦写的段
Step 8 : 选择擦写、编程、效验的集合操作
Step 9 : 选择执行操作等待插件自动执行烧写过程
设置硬件跳线GPIOF4_SCITXDA 为高(硬件已设置好),则上电后,复位矢量直接跳转到flash处执行
至此一个使用Flash的烧写全过程就执行完了,在去掉仿真器的情况下上电程序就可以自动执行了。

6、F28x CCS 插件可能的问题
除了上述问题外CCS插件因为软硬件bug还可能出现一些意料不到的问题。以下列举了一些常见的不正常状况和相应的解决方法。
1. 上电初始CCS处于运行状态烧写时出现错误提示不能正常进行。
 --Flash本身已经有程序,需停止后再进行烧写。
2. 烧写过程中程序死在擦除状态,关掉CCS插件再开状况依旧。
 --硬件重新上电并重启CCS,同时移除所有断点。
3. 在没有非法操作时出现Flash不能正常Unlock。
 --通常需要在其他系统中重新烧写一次Flash后,插件恢复正常。
4. 烧写过程中出错并且无**常进行。
 --按上述1-3步骤进行,同时需要检查硬件电压和软件版本支持。
5. 烧写完成但是程序运行错误或者过度缓慢。
 --需要关注相应的设置和系统是否处于正常状态。
 必要时有可能需要重新安装CCS和插件


7、调试TMS320C2000系列的常见问题?
1)单步可以运行,连续运行时总回0地址: Watchdog没有关,连续运行复位DSP回到0地址。
2)OUT文件不能load到片内flash中: Flash不是RAM,不能用简单的写指令写入,需要专门的程序写入。CCS和C Source Debugger中的load命令,不能对flash写入。 OUT文件只能load到片内RAM,或片外RAM中。
3)在flash中如何加入断点: 在flash中可以用单步调试,也可以用硬件断点的方法在flash中加入断点,软件断点是不能加在ROM中的。硬件断点,设置存储器的地址,当访问该地址时产生中断。
4)中断向量: C2000的中断向量不可重定位,因此中断向量必须放在0地址开始的flash内。在调试系统时,代码放在RAM中,中断向量也必须放在flash内

8、TMSLF2407A的EVM板外部的轴角传感器(旋转变压器+RDC)的19位信号读入dsp.本来想把该传感器映射到IO空间进行寻址,但是seed_dec2407得扩展总线只能映射到数据空间上,而且/IS引脚的信号并没有引出。如果把外部的传感器映射到数据空间,又会与板子上的外扩sram在寻址地址上产生冲突。如何解决?
DEC2407的扩展总线的存储空间是通过对DS的高32K空间分页得到的,你可以将.BSS段分配给2K的片内RAM,而一些其他的特殊数据段,定义在片外RAM中,通过地址扩展寄存器,分别选定使用扩展空间的ce0~ce3,还是片外RAM,来切换的选定

9、SEED-DSP2812M V2.1AD头文件中,*AD_CONVST 和 *ADREG的作用是什么?在对AD编程时,对它们的时序有哪些要求?
*AD_CONVST是转换的控制信号,*ADREG是一个保留的信号没什么用。对于转换控制时序请参看AD7656的相关文档。

在例程中出现了下述语句:
初始化EVA定时器1
ADREG=0;
XIntruptRegs.XINT2CR.all=0x0001;
PieCtrlRegs.PIEIER1.bit.INTx3=1;
这几条语句在此是否有其它考虑?

程序中使用了两个中断,一个定时器一个外部中断。需要开着两个中断。 ADREG=0;这句没用本身有问题,但不影响程序运行。


10、当要求两片AD7656同时采集信号时,如何用ADCCSProFlag来配合使用?
我打算用该板来完成实时多通道信号采集、分析及传输工作,因分析的算法较复杂,要求在该板上实现两片AD7656同时进行定时采样(,但不要像例程中那样产生中断),仅在数据转换完成后才产生一次中断。依据这一要求,编程时,对AD头文件中所定义的*AD_CONVST 、 *ADREG、*AD_CHIPSEL0、*AD_CHIPSEL1等信号及struct FLAG_BITS中的ADCCS0、ADCCS1、ADCCSProFlag域,在时序上有哪些要求和限制,请一并指教。

具体的采样还是一个通道一个通道的采集数据(看AD7656数据手册)。通常采完一片通过片选采另一片。FLAG_BITS中的ADCCS1和ADCCS0,用于指定使用哪片片选,就是一个变量。在采样的时候有个选通控制,没有别的用处,和硬件的片选没关系。
*AD_CONVST 、 *AD_CHIPSEL0、*AD_CHIPSEL1第一个信号说了后两个是实际的片选控制。也就是针对两片AD每片的CS。控制时序见AD7656数据手册。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。