声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 4248|回复: 10

[基本模块类] 非原厂TMS320F2812目标板与MATLAB的CCSTarget结合的若干问题

[复制链接]
发表于 2010-1-22 16:11 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
相信MATLABCCS Target 是很多人坚守DSP而没转向ARM或者FPGA的原因,但是有多少人可以用得起原厂的目标板呢?顶多也是第三方提供的板子吧,而且我相信绝大多数人使用的是自制的目标板。这样问题就来了,到底手头上的板子和CCS Target到底有什么不一样呢,在这方面我走了很多弯路,在这里和大家分享一下。
MATLAB设置篇(软件+硬件)
1.外扩RAM容量
自制的板子通常都会有64K~512K的外扩异步RAM,例如IS61LV6416-10T ~ IS61LV51216-10T。这时就需要在Simulink中的Target模块添加外部内存定义段,通过仿真器在线调试的Target可以选用eZdsp2812,烧录到FLASH运行的选用F2812 eZdsp Stand alone code using Flash Memory。例如通过zone6~7扩展的IS61LV6416,在Target reference中的memory添加ExtRAM,起始地址为0x00100000,长度为0x0010000,存储类型我喜欢用code & data。然后在sections定义中我通常把原来在RAMH0的转到ExtRAM中,而RAMH0的存储类型变为data,专门存变量。另外,对与外扩FLASH同理,但是我没有试过。
2.晶振运行速度
如果你的晶振选错了,别以为可以通过修改Target reference的运行速度可以达到代码匹配,我在MATLAB2009A中试过,肯定不行!还有就是MATLAB中默认DSP运行在150M,而很多人(包括我)由于使用了1.8V进行供电,2812150M运行速度上根本不稳定。这里需要手动修改PLLDIV值进行降频,具体位置在MATLAB安装目录下的toolbox\rtw\targets\ccslink\ccslink\src\DSP281x_SysCtrl.c文件中进行修改,将
InitPll(0xA)
//150M;

改为
InitPll(0x9);
//135M

由于我的第一块板子连电源散热都没设计好,一旦高于45M电源芯片就烫手。出于长治久安的考虑我把板子的速度设为30M,也就是InitPll(0x2)。有人会问为什么不用2407A?便宜而且还比2812简单。我告诉你如果你敢当我面问,我肯定揍你一顿!
3.步长设置
再将Target拖进Simulinksimulink中的设置会跟随变化,其中需要我们手动参与修改的是solverFixed-step size,原来是auto,我一般改为最小步长的1/10。其实有些情况下1/4也勉强可以,这是由模型中的模块决定的。模型中的模块应尽量选用支持定点计算的,至于那些定点计算的请看看帮助吧,太多了,讲不完!模块的采样时间按照需要设定,不知道怎么设的输入-1,与solver的步长一致,别小于solve的补偿就可以了。浮点数模块与定点模块通过Data Type Conversion模块进行转换。
4.外设操作
2812的地址是统一编址的,这样就很方便的实现了Simulink中对外设的操作,通过write to memory read from memory进行操作。我的板子上有DAC7625AD7892,所以这一步很重要。
到此为止,基本的简单模型也就够用了,例如简单的脉冲发生器,Target reference + Pulse generator+Data Type Conversion+Digital Output。按照上面说的跑一遍就可以按Ctrl+B下到DSP去试了,按Ctrl+B时仿真器、目标板和电脑要进行连接。在MATLAB2009A中仿真时间是不是Inf好像没关系,反正我是没有试出来。用示波器或者焊一个发光二极管就可以看到结果,爽吧!如果在运行过程中把CCS关了,再从SimulinkCtrl+B会出错的,这时就要在MATLAB中输入clear清除一次工作空间内存。

评分

1

查看全部评分

回复
分享到:

使用道具 举报

 楼主| 发表于 2010-1-22 16:12 | 显示全部楼层
4.代码与化简
为了提高速度,MATLAB中加入的很多用域代码都可以去掉,这里一条一条来说。
a)        在real-time workshop中的Debug,取消所有选项。
b)        在real-time workshop中的interface中Taarget Function library 选择Ti C28x(ISO),support里面只选floating-point number,Code interface里面仅选Single output/update function,下面的全部不选或者是None。
c)        Code style 中 Parentheses level 选择 minimum,下面的都不选
d)        Embedded IDE Link CC中Build action我喜欢选creat project,code generation 中都不选,选了实时性也好像差不多。

修改MATLAB代码提速
烧进FLASH后,就算系统是150M,Matlab默认的程序运行起来速度不怎么样,这是因为FLASH的速度这的不怎么样。仔细看看MATLAB生成程序,原来要放到RAM跑的ramfuncs段根本就没有放进去,里面包括FLASH初始化和一个汇编语言的循环延迟程序。我不知道各位的MATLAB怎样,但是我的好像就没有放进RAM。如果系统在135M跑,时间应该是不对的。
为了将程序运行速度提速,我这里给出两个方法。
方法1:
直接从FLASH中运行提高FLASH的运行速度,修改实例见
“D:\works\matlabf\CCSLink\MOSFET_drv\DRV_FLASH_spd_up”下的工程文件
1.        修改main()函数将ramfuncs拷贝至H0,并运行FLASH初始化程序
在含有main()函数的文件中添加
#include <string.h>

void InitFlash(void);
在main()函数内对内存块进行拷贝,尽量靠近前面
memcpy( &RamfuncsRunStart,
                &RamfuncsLoadStart,
                &RamfuncsLoadEnd - &RamfuncsLoadStart);
添加FLASH初始化程序
        InitFlash();

2.        修改DSP281x_SysCtrl.c文件,缩短FLASH读取指令周期
FlashRegs.FBANKWAIT.bit.RANDWAIT最小值为1,默认值为5
   //Set the Random Waitstate for the Flash // org =5   opt= 1
   FlashRegs.FBANKWAIT.bit.RANDWAIT = 1;
FlashRegs.FBANKWAIT.bit.PAGEWAIT 最小值为0,默认值为5
      //Set the Paged Waitstate for the Flash // org =5    opt= 0
   FlashRegs.FBANKWAIT.bit.PAGEWAIT = 0;

其余程序不用修改,编译运行,程序运行速度会得到大幅提升,速度提升2倍左右。

方法2:
将FLASH中部分程序或者全部程序复制到ExtRAM或者RAM_H0中运行,例子程序在D:\works\matlabf\CCSLink\MOSFET_drv\DRV_FLH_ExtRAM\DRV_sigFLASH.pjt

1.        拷贝并修改boot_copy.asm文件,如需全部从RAM中运行则取消所有注释
修改时需注意两个部分,首先修改变量声明
        .global _text_loadstart, _text_runstart, _text_size
修改内存拷贝过程中的相应变量
        MOVL XAR5,#_ramfuncs_size                                ; Store Section Size in XAR5
        MOVL ACC,@XAR5                                                ; Move Section Size to ACC
        MOVL XAR6,#_ramfuncs_loadstart                        ; Store Load Starting Address in XAR6
    MOVL XAR7,#_ramfuncs_runstart                        ; Store Run Address in XAR7
    LCR  copy                                                        ; Branch to Copy
2.        修改CMD文件中的运行方式和存储方式
.text                        :   LOAD = FLASH,                 PAGE = 0    /* Load section to Flash */
                     RUN = ExtRAM,           PAGE = 0    /* Run section from RAM */
                      LOAD_START(_text_loadstart),
                       RUN_START(_text_runstart),
                        SIZE(_text_size)
需要注意前面RAM_H0和ExtRAM的PAGE分布;添加wddisable的section声明;sectioncopy的section声明;

3.        将原来的starbanch.asm替换为mycode_startbanch.asm
其中ref.  _c_int00被替换为.ref   copy_sections
其中的看门狗程序添加段定义.sect "wddisable"

4.        修改zone 6的访问速度
/* Zone 6 Configuration */
  XintfRegs.XTIMING6.bit.X2TIMING = 0; // Timing scale factor = 1
  XintfRegs.XTIMING6.bit.XSIZE = 3;    // Always write as 11b
  XintfRegs.XTIMING6.bit.READYMODE = 1;// XREADY is asynchronous
  XintfRegs.XTIMING6.bit.USEREADY = 0; // Disable XREADY
  XintfRegs.XTIMING6.bit.XRDLEAD = 1;  // Read lead time
  XintfRegs.XTIMING6.bit.XRDACTIVE = 0;// Read active time   org=2
  XintfRegs.XTIMING6.bit.XRDTRAIL = 0; // Read trail time
  XintfRegs.XTIMING6.bit.XWRLEAD = 1;  // Write lead time
  XintfRegs.XTIMING6.bit.XWRACTIVE = 0;// Write active time   org = 2
  XintfRegs.XTIMING6.bit.XWRTRAIL = 0; // Write trail time
 楼主| 发表于 2010-1-22 16:12 | 显示全部楼层
以上都是我自己的笔记,请包涵里面的错别字。转载请注明。另外帖子里面我自己做的例子还没上传,感兴趣的话大家留下邮箱,我每30人统一发一次。

[ 本帖最后由 egwim 于 2010-1-22 16:15 编辑 ]
发表于 2010-3-30 23:27 | 显示全部楼层
这么好的帖子没人顶???看来大家都还是停留在仿真阶段。
发表于 2010-3-30 23:28 | 显示全部楼层
楼主有空给我发点资料吧。 x_w_long@163.com
多谢了!
发表于 2010-5-28 21:26 | 显示全部楼层
楼主,有MATLAB与DSP相连产生SPWM的例子或者笔记不?rantjf@163.com
发表于 2010-5-30 10:52 | 显示全部楼层
楼主,关于步长设置,如果把Fixed-step size设为auto,那么采样时间是多少?
发表于 2012-7-1 09:47 | 显示全部楼层
回复 1 # egwim 的帖子

谢谢,CCS 和 MATLAB一直都没连上,我现在用的WIN7 64 位系统,

有空给我发一份lyg511@sina.com
发表于 2012-8-8 15:47 | 显示全部楼层
强烈建议楼主留下其他联系方式,可以方便讨论,顶楼主一个!
另外,我现在用自己做的AD和DA板子,想要跟DSP连起来用matlab什么方法呢?楼主有没有这方面的经验?
邮箱37007137@qq.com
发表于 2012-8-10 11:12 | 显示全部楼层
楼主发我一份谢谢!hy1214001@163.com
发表于 2013-12-2 10:59 | 显示全部楼层
求楼主给例子,谢谢!342290365@qq.com
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-12-26 02:50 , Processed in 0.091205 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表