TMS320LF2406调试入门.docx

上传人:b****4 文档编号:4344494 上传时间:2022-11-30 格式:DOCX 页数:15 大小:21.15KB
下载 相关 举报
TMS320LF2406调试入门.docx_第1页
第1页 / 共15页
TMS320LF2406调试入门.docx_第2页
第2页 / 共15页
TMS320LF2406调试入门.docx_第3页
第3页 / 共15页
TMS320LF2406调试入门.docx_第4页
第4页 / 共15页
TMS320LF2406调试入门.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

TMS320LF2406调试入门.docx

《TMS320LF2406调试入门.docx》由会员分享,可在线阅读,更多相关《TMS320LF2406调试入门.docx(15页珍藏版)》请在冰豆网上搜索。

TMS320LF2406调试入门.docx

TMS320LF2406调试入门

TMS320LF2406调试入门

 

           王佰营徐丽红

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

()

        

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

   

初学者可用TMS320LF2407+外RAM构成最小系统,最好配上相关器件便于调试DSP一些功能:

I/O功能使用,ADC,SCI,SPI,CAN,PWM和SVPWM;当然,若这种配置,就不用看这篇文章了。

虽然这种配置很流行,具有外部总线,但是在商业级产品上却很少采用。

我们用的是以TMS320LF2406为核心的一个完整的小功率变频器系统,DSP外围只需加上开关电源,光耦,运放,X5043,65176,CAN驱动250和相关功率模块。

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

          

           二、安装软件

             

1需要的软件

1>:

ccs3.1-集成调试环节

2>:

USBDriversForCCS3.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.inf和Seedusb2.sys文件的文件夹,安装即可.

4>将仿真器JTAG头插入目标板,上电,运行USB20emurst.exe:

点击Rest在下面就会出现:

“SEEDUSB2.0XDS510CARDISRESET,HARDWAREVERION1”

表明连机正常:

现在就可使用了。

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

F2406XDS510Emulator

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

Aut-Generateboarddatafilewithextraconfigur

C:

\CCStudio_v3.1\drivers\Seedusb2.cfg

I/OPort0X240

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

                   

   三、搭建调试平台

             

1.调试平台构思:

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

为了减少写片次数,提高工作效率,我们充分利用LF2406中的2K宝贵的SARAM资源:

将在有限的舞台上,将大的程序分成小块,分别调试,等调好了各个程序模块,再将它们组合成大系统整体调试。

2实现方法:

应当明白,

1>CCS3.1集成环境下

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

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

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

<1>程序存储器中

a.0000H~7FFFH为FLASH;

b.8000H~87FFH为SARAM;   (PON=1)

c.0000H~003FH为中断矢量;

d.FF00H~FFFFH为DRAM;         (CNF=1)

<2>数据存储器中:

a.0000H~005FH为D寄存器区;

b.0060H~007FH为DARAM的B2区;

c.0200H~02FFH为DARAM的B0区;(CNF=0)

d.0300H~03FFH为DARAM的B1区;

e.0800H~0FFFH为SARAM区;        (PON=0)

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

3>由上面的分析可知

FLASH区最大32K;接下来能用到程序上的只有2KSARAM,256字的DRAM的B0区一般不用。

因此,我们将程序代码分为两部分:

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.程序执行过程:

上电从FLASH的0000H跳至SARAM的8000H处开始运行主程序:

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

中断外部触发PIE向CPU申请INTI内核中断触发跳到FLASH的中断向量表INTI的0002H由0002H跳到FLASH的GISR-0200H的中断公共处理程序得到FLASH的外围中断向量表中的地址:

PVECTORS+2XPIVR由FLASH的外围表找到RAM中的8700H的TEST-ISR程序入口完成中断任务处理返回

                               

       四、注意事项

                 

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

(我是受过教训了)

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

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

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

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

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

6、当用发光管指示有无脉冲时,当脉冲频率太高或脉宽太窄时容易误判断:

认为是高电平或低电平,而无脉冲;要借助示波器判断。

刚开始最好将闪烁频率设置低一点。

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

             

五、主要代码

                         

1、硬件背景介绍

这儿的目的是构建调试平台,主要测试FLASH与SARAM间程序流通,中断的配合,程序很简单:

IOPE4口输出十多Hz的方波,去触发XINT1外部中断口16脚,中断处理程序通过IOPE3驱动放光管闪烁显示。

先将相对比较稳定变化不频繁的代码烧入LF2407,接下来在SARAM中通过LOADPROGRAM加载程序运行调试。

本程序有两个CMD文件,需要烧写芯片时选FLASH.CMD;需要加载程序时选用SARAM.CMD。

注意,许多变换是通过伪指令.if,.else,.endif完成。

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

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

2、主要程序()

  

 

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

.title"DSPINVER.ASM"

 

;DP_B2.set0;page0ofdataspace

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.set1

SARAMP.set0

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

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

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

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

.def_c_int0

 

.ifSLECTP

;==========LOADFLASH

.copy"Vector.ASM"

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

.else

;==========LOADSARAM

.defPVECTORS

.sect".pvecs"

PVECTORS:

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

.endif

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

 

;宏定义

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

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

;D15D14D13D12D11D10D9D8D7D6D5D4D3D2D1D0

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

;1101100100001000

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

 

CPUgB_F.macro;驱动LED闪动;

ldp#PEDATDIR>>7

laclPEDATDIR

xor#00008h

saclPEDATDIR

.endm

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

ldp#PEDATDIR>>7

laclPEDATDIR

xor#00010h

saclPEDATDIR

.endm

 

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

.text

_c_int0:

nop;1000H/8000H

 

callInit_DSP

 

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

loop:

nop

TEST_F

nop

callDelay

bloop

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

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

 

.copy"Init_DSP.ASM"

 

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

;function:

Delay延时

;input:

ar4

;output:

---

;usege:

ar4,  ar0

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

Delay:

larar4,#01h

nop

dy_lp:

larar0,#0ffffh

dy_lp0:

nop

mar*,ar0

banzdy_lp0

mar*,ar4

banzdy_lp

ret

 

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

;中断处理区域

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

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

.ifSLECTP

;==========LOADFLASH

.sect".prgisr"

GISR:

;0200h---FLASH

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

sst#0,ST0REG

sst#1,ST1REG

 

ldp#DP_B2

push

 

sarAR0,AR0REG

sarAR1,AR1REG

sarAR2,AR2REG

sarAR3,AR3REG

sarAR4,AR4REG

sarAR5,AR5REG

sarAR6,AR6REG

sarAR7,AR7REG

spm0

pac

saclPREG_TMP

mpy#1

pac

saclTREG_TMP

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

 

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

ldp#PIVR>>7

laccPIVR,1

add#PVECTORS

bacc

 

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

PHANTOM:

CLRCINTM

RET

 

.else

;==========LOADSARAM

nop

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

.endif

 

 

.ifSLECTP

;==========LOADFLASH

nop

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

.else

;==========LOADSARAM

.sect".ramisr"

 

TEST_ISR:

;8700h---SARAM

CPUgB_F

 

ldp#XINT1CR>>7

splk#8001h,XINT1CR

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

 

ldp#DP_B2

 

larAR0,AR0REG

larAR1,AR1REG

larAR2,AR2REG

larAR3,AR3REG

larAR4,AR4REG

larAR5,AR5REG

larAR6,AR6REG

larAR7,AR7REG

spm0

ltPREG_TMP

mpy#1

ltTREG_TMP

 

pop

 

lst#1,ST1REG

lst#0,ST0REG

 

 

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

clrcINTM

ret

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

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

.endif

 

;EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE

.end

         

2>Vector.ASM文件()

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

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

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

RESETB8000h;_c_int0;地址0000H,复位,优先级1

INT1BGISR;200h;FLASH;地址0002H,INT1,优先级4

INT2BPHANTOM;地址0004H,INT2,优先级5

INT3BPHANTOM;地址0006H,INT3,优先级6

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

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

 

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

PVECTORSBPHANTOM;偏移地址0000H

B8700h;TEST_ISR;PHANTOM;偏移地址0001H

BPHANTOM;偏移地址0002H

BPHANTOM;偏移地址0003H

BPHANTOM;偏移地址0004H

BPHANTOM;偏移地址0005H

BPHANTOM;偏移地址0006H

BPHANTOM;偏移地址0007H

BPHANTOM;偏移地址0008H

BPHANTOM;偏移地址0009H

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

              

3>FLASH.CMD文件()

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

-stack40

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

/*LF2406FLASHSARAMDARAM*/

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

 

MEMORY

{

PAGE0:

VECS:

origin=0h,length=40h

PVECS:

origin=44h,length=100h

PRGISR:

origin=200h,length=0E00h

PROG:

origin=1000h,length=7eafh

 

PAGE1:

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:

{}>VECSPAGE0

.vectors :

{}>VECSPAGE0

.pvecs:

{}>PVECSPAGE0

.prgisr:

{}>PRGISRPAGE0

.text:

{}>PROGPAGE0

.usect:

{}>B2PAGE1

.bss:

{}>B01PAGE1

.data:

{}>B02PAGE1

.data0:

{}>B11PAGE1

.stack:

{}>B12PAGE1

 

}

                

4>FLASH.CMD文件()

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

 

-stack40

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

/*LF2406FLASHSARAMDARAM*/

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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1