bokee.net

电子/电气工程师博客

正文 更多文章

TMS320LF2406调试入门

                       TMS320LF2406调试入门

 

           王佰营    徐丽红

经过两个星期的紧张调试,终于将TMS320LF2406的调试平台搭建好,为了方便初学的朋友,我将整个过程整理如下: (http://wbymcs51.blog.bokee.net)

        

    一、设计硬件和仿真器购置

   

初学者可用TMS320LF2407+RAM构成最小系统,最好配上相关器件便于调试DSP一些功能:I/O功能使用,ADCSCISPICANPWMSVPWM;当然,若这种配置,就不用看这篇文章了。虽然这种配置很流行,具有外部总线,但是在商业级产品上却很少采用。我们用的是以TMS320LF2406为核心的一个完整的小功率变频器系统,DSP外围只需加上开关电源,光耦,运放,X504365176CAN驱动250和相关功率模块。

仿真器用的是合众达的USB接口的仿真器,以下实例皆以它为例说明。

          

            二、安装软件

             

1需要的软件

1>:ccs3.1-集成调试环节

2>USB Drivers For CCS3.1.exe-USB 接口仿真器驱动程序

3>:Seedusb2.inf Seedusb2.sys-USB驱动程序

4>:USB20emurst.exe-连机测试程序

5>:C2000-3.1-SA-to-UA-TI-FLASHA2X.exe-flash烧写插件程序

2.软件安装

1> ccs3.1的安装就象一般软件一样安装,但要注意两点:

1.       记住安装路径

2.       不必要全部安装,在安装时选自需选项安装,仅选与C2000相关的选项:仅需710M,若全安装需1.7G磁盘空间.

2> 安装仿真器驱动程序

安装时,选和ccs3.1一样的路径如:

C:\CCStudio-V3.1\....;而不要按默认路径安装;否则,将不能正常驱动仿真器;因为无法找到: C:\CCStudio-V3.1\ Drivers\Seedusb2.cfg

3> 安装USB驱动程序

插上仿真器,这时就会跳出新硬件向导画面,不要Windows自动安装,选从列表或指定位置安装,点击“浏览”直接去包含有::Seedusb2.infSeedusb2.sys文件的文件夹,安装即可.

4> 将仿真器JTAG头插入目标板,上电,运行USB20emurst.exe:点击Rest在下面就会出现:

“SEED USB2.0 XDS510 CARD IS RESET ,HARDWARE VERION 1”

表明连机正常:现在就可使用了。

5>点击桌面Setup CCStudio v3.1配置CPU和驱动文件;一下为要选择项以供参考:

       F2406 XDS510 Emulator

       在上述选项上点右键,选Properties进入;

       Aut-Generate board data file with extra configur

       C:\CCStudio_v3.1\drivers\Seedusb2.cfg

       I/O Port   0X240

5>若要烧芯片还要安装C2000-3.1-flash.exe插件程序,直接安装即可.

                   

    三、搭建调试平台

             

1.调试平台构思:

由于LF2406不像LF2407那样可以在外部扩充程序RAM,调试相对比较困难;仅靠烧写芯片效率太低;

为了减少写片次数,提高工作效率,我们充分利用LF2406中的2K宝贵的SARAM资源:将在有限的舞台上,将大的程序分成小块,分别调试,等调好了各个程序模块,再将它们组合成大系统整体调试。

2实现方法:

应当明白,

1> CCS3.1集成环境下

File-àLood Frogram 只能将程序加载RAM上运行;借助仿真器运行;

Tool-àOn-chip flash program 只能将程序烧写到FLASHA上;不用仿真器自行运行;

2>  LF2406中存储区的安排是固定的;

<1> 程序存储器中

a0000H~7FFFHFLASH

b8000H~87FFHSARAM;   (PON=1)

c0000H~003FH为中断矢量;

dFF00H~FFFFHDRAM;          (CNF=1)

<2> 数据存储器中:

             a.0000H~005FHD寄存器区;

             b.0060H~007FHDARAMB2;

             c.0200H~02FFHDARAMB0;(CNF=0)

             d.0300H~03FFHDARAMB1;

             e.0800H~0FFFHSARAM;         (PON=0)

             f.7000H~7FFFH为寄存器区;

3> 由上面的分析可知

FLASH区最大32K;接下来能用到程序上的只有2K SARAM256字的DRAMB0区一般不用。因此,我们将程序代码分为两部分:

1>.基本固定部分-放入FLASH;尽量多放:调试通过的部分就放入;

2>.频繁变化部分-放入SARAM;尽量少放;

为了便于相互连接,在每一部分的代码都要明确定位:

FLASH部分:

1>.中断向量表,这是固定的,用户不能随便定位:常定义以为VECTORS,地址:0000H~003FH

2>.外围模块中断向量表,用户可定位,常定义为PVECS段,地址:44H~FFH

3>.中断处理程序的公共代码-GISR,用户可自行定位,此处定义为PRGISR段,地址为:200H~FFFH;

SARAM部分:

1>.主程序代码区,用户可自行定位,常定义为TEXT段,地址:8000H~86FFH

2>.二级中断处理程序代码区,因为不论是定时器中断,AD转换,或串行通讯等中断处理都用同一区域来分别调试的,因此命名为TEST-ISR,测试中断处理程序;定义为RAMISR段,地址为:8700H~87FFH

4.程序执行过程:

上电从FLASH0000H跳至SARAM8000H处开始运行主程序:

中断时,假定XINTI设置为高优先级中断:

中断外部触发àPIECPU申请àINTI内核中断触发à跳到FLASH的中断向量表INTI0002Hà0002H跳到FLASHGISR-0200H的中断公共处理程序à得到FLASH的外围中断向量表中的地址:PVECTORS+2XPIVRàFLASH的外围表找到RAM中的8700HTEST-ISR程序入口à完成中断任务处理à返回

                               

       四、注意事项

                 

       初学的朋友,特别是由单片机转型过来的DSP工程师应注意一下几个问题:(我是受过教训了)

1、禁止内部看门狗,再调试;

2、注意外部看门狗捣乱,如烧写芯片时;

3、不要将指令或宏放在标号位置(第一列),指令和宏就当成标号了,指令也就不存在了,又不会报错,很难察觉,这一点和单片机大不相同;一定要注意;

4DSP的位操作功能很差,要以端口为单位来操作;有用OR,ANDXOR指令;

5DSP的许多重要位清零和单片机不同,并非写0而是写1;一定要注意;

6、当用发光管指示有无脉冲时,当脉冲频率太高或脉宽太窄时容易误判断:认为是高电平或低电平,而无脉冲;要借助示波器判断。刚开始最好将闪烁频率设置低一点。

7、烧写LF2406时,一定保证40h---43hFFFFH(LF2406A);CLKIN设置为有源晶振频率,PLL设置值保证与CLK的乘积不大于40MHz(LF2406A,30MHz--LF2406);不能正常写时,重新启动CCS3.1再写;

             

                                                                 五、主要代码

                         

1、硬件背景介绍

       这儿的目的是构建调试平台,主要测试FLASHSARAM间程序流通,中断的配合,程序很简单:IOPE4口输出十多Hz的方波,去触发XINT1外部中断口16脚,中断处理程序通过IOPE3驱动放光管闪烁显示。

       先将相对比较稳定变化不频繁的代码烧入LF2407,接下来在SARAM中通过LOAD PROGRAM加载程序运行调试。本程序有两个CMD文件,需要烧写芯片时选FLASH.CMD;需要加载程序时选用SARAM.CMD。注意,许多变换是通过伪指令.if,.else,.endif完成。

       20MHz有源晶振,CLKOUT20MHz;比例系数为1

       在用SARAM调试程序时,实际上还要用FLASH部分的代码,两者相互配合完成调试,又符合DSP程序流程规范。

2、主要程序 (http://wbymcs51.blog.bokee.net)

  

 

1> 主程序-----------DSPINVER.ASM

                     .title        "DSPINVER.ASM"

 

;DP_B2             .set        0       ;page 0 of data space

ST0REG               .usect             ".usect",                       1

ST1REG               .usect             ".usect",                       1

AR0REG               .usect             ".usect",                       1

AR1REG               .usect             ".usect",                       1

AR2REG               .usect             ".usect",                       1

AR3REG               .usect             ".usect",                       1

AR4REG               .usect             ".usect",                       1

AR5REG               .usect             ".usect",                       1

AR6REG               .usect             ".usect",                       1

AR7REG               .usect             ".usect",                       1

 

TREG_TMP          .usect             ".usect",                       1

PREG_TMP          .usect             ".usect",                       1

 

 

;================================

FLASHP                .set         1

SARAMP              .set         0

;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$

SLECTP         .set  SARAMP;FLASHP;烧写芯片选FLASHP;加载程序选SARAMP

;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$

;================================

                  .def              _c_int0

 

                .if SLECTP

                     ;==========LOAD FLASH

                     .copy             "Vector.ASM"

                     ;====================

                     .else

                     ;==========LOAD SARAM

                     .def         PVECTORS

                     .sect  ".pvecs"

PVECTORS:

                     ;====================

                .endif

      

                .include         "F2407REGS.H"            ;引用头部文件

 

;宏定义

;      IOPE3---CPUgB-----O----------D3

;------------------------------------------------------

;      D15 D14 D13 D12 D11 D10 D9 D8 D7 D6 D5 D4 D3 D2 D1 D0

;------------------------------------------------------

;      1    1   0   1   1   0  0  1  0  0  0  0  1  0  0  0

;------------------------------------------------------

 

CPUgB_F       .macro           ;驱动LED闪动;     

                     ldp          #PEDATDIR>>7

                     lacl         PEDATDIR

                     xor         #00008h

                     sacl         PEDATDIR

                     .endm

TEST_F         .macro           ;产生方波信号驱动XINT1;

                     ldp          #PEDATDIR>>7

                     lacl         PEDATDIR

                     xor         #00010h

                     sacl         PEDATDIR

                     .endm

 

;■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

                  .text

_c_int0:   nop         ;1000H/8000H

 

                     call  Init_DSP

 

;※※※※※※※※※※※※※※※※※※※※※※

loop:

                     nop

                     TEST_F

                     nop

                     call         Delay

                     b            loop

;※※※※※※※※※※※※※※※※※※※※※

;■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

 

                     .copy             "Init_DSP.ASM"

 

;----------------------------------------------------------

;      function:        Delay             延时

;      input:             ar4

;      output:           ---

;      usege:            ar4,   ar0

;----------------------------------------------------------

Delay:

                     lar           ar4,         #01h

                     nop

dy_lp:             lar           ar0,         #0ffffh

dy_lp0:           nop

                     mar         *,                  ar0

                     banz        dy_lp0

                     mar         *,                  ar4  

                     banz        dy_lp

                     ret

 

;==========================================================

;中断处理区域            

;==========================================================

;--------------------通用中断程序入口----------------------

              .if SLECTP

                     ;==========LOAD FLASH

                     .sect       ".prgisr"        

GISR:            ;0200h---FLASH

;-----保护现场程序开始----------------------

                     sst          #0,                        ST0REG

                     sst          #1,                        ST1REG

 

                     ldp          #DP_B2

                     push

 

                     sar          AR0,                     AR0REG

                     sar          AR1,                     AR1REG

                     sar          AR2,                     AR2REG

                     sar          AR3,                     AR3REG

                     sar          AR4,                     AR4REG

                     sar          AR5,                     AR5REG

                     sar          AR6,                     AR6REG

                     sar          AR7,                     AR7REG

                     spm        0

                     pac

                     sacl         PREG_TMP

                     mpy        #1

                     pac

                     sacl         TREG_TMP

;-----保护现场程序结束----------------------

 

;-------------中断检查----------------------

                     ldp          #PIVR>>7

                     lacc        PIVR,                   1

                     add         #PVECTORS

                     bacc                    

 

;-----------------------假中断处理--------------------------

PHANTOM:        

            CLRC     INTM

            RET

 

                     .else

                     ;==========LOAD SARAM

                     nop

                     ;====================

              .endif

 

 

              .if SLECTP

                     ;==========LOAD FLASH

                     nop

                     ;====================

                     .else

                     ;==========LOAD SARAM

                     .sect  ".ramisr" 

 

TEST_ISR:            ;8700h---SARAM

                     CPUgB_F

 

                     ldp          #XINT1CR>>7

                     splk         #8001h,                 XINT1CR

;-----恢复现场程序开始----------------------

 

                     ldp          #DP_B2

 

                     lar           AR0,                     AR0REG

                     lar           AR1,                     AR1REG

                     lar           AR2,                     AR2REG

                     lar           AR3,                     AR3REG

                     lar           AR4,                     AR4REG

                     lar           AR5,                     AR5REG

                     lar           AR6,                     AR6REG

                     lar           AR7,                     AR7REG

                     spm        0

                     lt            PREG_TMP

                     mpy        #1

                     lt            TREG_TMP

 

                     pop

 

                     lst           #1,                        ST1REG

                     lst           #0,                        ST0REG

 

 

;-----恢复现场程序结束----------------------

                     clrc     INTM

                     ret                     

;==========================================================                         

                     ;====================

              .endif          

 

;EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE

                     .end

         

2> Vector.ASM文件 (http://wbymcs51.blog.bokee.net)

;------------------- 定义主向量段--------------

;--------------------Vector.ASM

              .sect             ".vectors"          ;定义主向量段

RESET          B  8000h       ;_c_int0          ;地址0000H,复位,优先级1

INT1             B  GISR        ;200h;FLASH ;地址0002HINT1,优先级4

INT2             B  PHANTOM      ;地址0004HINT2,优先级5

INT3             B  PHANTOM      ;地址0006HINT3,优先级6

--------------------------------------------------------------------------------------

;---------------- 定义子向量段-------------------------

 

              .sect  ".pvecs" ;---0044h               ;定义子向量段

PVECTORS    B     PHANTOM                  ;偏移地址0000H

                     B     8700h            ;TEST_ISR ;PHANTOM  ;偏移地址0001H

                     B     PHANTOM                  ;偏移地址0002H

                     B     PHANTOM                  ;偏移地址0003H

                     B     PHANTOM                  ;偏移地址0004H

                     B     PHANTOM                  ;偏移地址0005H

                     B     PHANTOM                  ;偏移地址0006H

                     B     PHANTOM                  ;偏移地址0007H

                     B     PHANTOM                  ;偏移地址0008H

                     B     PHANTOM                  ;偏移地址0009H

                     ----------------------------------------------------

              

3> FLASH.CMD文件 (http://wbymcs51.blog.bokee.net)

/*---------FLASH.CMD----------*/

-stack 40

/*-------------------------------------------------------------------------*/

/*  LF2406 FLASH SARAM DARAM                         */

/*-------------------------------------------------------------------------*/

 

MEMORY

{

    PAGE 0 :      VECS      : origin =    0h  , length =   40h         

                        PVECS    : origin =   44h  , length =  100h

                        PRGISR  : origin =  200h ,  length =  0E00h  

                       PROG     : origin =  1000h , length =  7eafh         

             

 

    PAGE 1 :     

                       B2          : origin = 0060h , length =    20h           

                       B01         : origin = 0200h , length =    80h           

                       B02         : origin = 0280h , length =    80h

                       B11         : origin = 0300h , length =    80h           

                       B12         : origin = 0380h , length =    80h

}

 

 

SECTIONS

{

    .reset       : { } > VECS           PAGE 0   

    .vectors   : { } > VECS           PAGE 0     

    .pvecs     : { } > PVECS         PAGE 0

    .prgisr     : { } > PRGISR        PAGE 0            

    .text        : { } > PROG           PAGE 0

              

    .usect      : { } > B2                 PAGE 1

    .bss         : { } > B01               PAGE 1     

     .data      : { } > B02                PAGE 1    

    .data0     : { } > B11                PAGE 1     

    .stack     : { } > B12                PAGE 1       

 

}

                

4> FLASH.CMD文件 (http://wbymcs51.blog.bokee.net)

/*---------SARAM.CMD----------*/

 

-stack 40

/*-------------------------------------------------------------------------*/

/*  LF2406 FLASH SARAM DARAM                           */

/*-------------------------------------------------------------------------*/

 

MEMORY

{

    PAGE 0 :      VECS      : origin =    0h  , length =    40h        

                        PVECS    : origin =   44h  , length =   100h        

                       SMPROG: origin =  8000h , length =   700h

                       RAMISR : origin =  8700h , length =   100h        

             

 

    PAGE 1 :     

                       B2          : origin = 0060h , length =   020h           

                       B01         : origin = 0200h , length =    80h           

                       B02         : origin = 0280h , length =    80h

                       B11         : origin = 0300h , length =    80h           

                       B12         : origin = 0380h , length =    80h

}

 

 

SECTIONS

{

    .reset      : { } > VECS            PAGE 0   

    .vectors  : { } > VECS            PAGE 0     

    .pvecs    : { } > PVECS          PAGE 0     

    .text       : { } > SMPROG       PAGE 0

    .ramisr   : { } > RAMISR         PAGE 0

              

    .usect   :  { } > B2                    PAGE 1

    .bss       : { } > B01                 PAGE 1     

    .data     : { } > B02                  PAGE 1    

    .data0   : { } > B11                  PAGE 1     

    .stack   : { } > B12                  PAGE 1       

 

}

分享到:

上一篇:基于C8051F020的DS3231

下一篇:将进酒

评论 (2条) 发表评论

  • 学习 (游客) : 呵呵!来过。学习。cqkxtam

    2010-03-24 22:01

发表评论
验证码