TMS320LF2406调试入门Word下载.docx
《TMS320LF2406调试入门Word下载.docx》由会员分享,可在线阅读,更多相关《TMS320LF2406调试入门Word下载.docx(15页珍藏版)》请在冰豆网上搜索。
C:
\CCStudio-V3.1\Drivers\Seedusb2.cfg
安装USB驱动程序
插上仿真器,这时就会跳出新硬件向导画面,不要Windows自动安装,选从列表或指定位置安装,点击“浏览”直接去包含有:
:
Seedusb2.inf和Seedusb2.sys文件的文件夹,安装即可.
将仿真器JTAG头插入目标板,上电,运行USB20emurst.exe:
点击Rest在下面就会出现:
“SEEDUSB2.0XDS510CARDISRESET,HARDWAREVERION1”
表明连机正常:
现在就可使用了。
点击桌面SetupCCStudiov3.1配置CPU和驱动文件;
一下为要选择项以供参考:
F2406XDS510Emulator
在上述选项上点右键,选Properties进入;
Aut-Generateboarddatafilewithextraconfigur
\CCStudio_v3.1\drivers\Seedusb2.cfg
I/OPort0X240
若要烧芯片还要安装C2000-3.1-flash.exe插件程序,直接安装即可.
三、搭建调试平台
1.调试平台构思:
由于LF2406不像LF2407那样可以在外部扩充程序RAM,调试相对比较困难;
仅靠烧写芯片效率太低;
为了减少写片次数,提高工作效率,我们充分利用LF2406中的2K宝贵的SARAM资源:
将在有限的舞台上,将大的程序分成小块,分别调试,等调好了各个程序模块,再将它们组合成大系统整体调试。
2实现方法:
应当明白,
CCS3.1集成环境下
File-LoodFrogram只能将程序加载RAM上运行;
借助仿真器运行;
Tool-On-chipflashprogram只能将程序烧写到FLASHA上;
不用仿真器自行运行;
LF2406中存储区的安排是固定的;
<
程序存储器中
a.0000H~7FFFH为FLASH;
b.8000H~87FFH为SARAM;
(PON=1)
c.0000H~003FH为中断矢量;
d.FF00H~FFFFH为DRAM;
(CNF=1)
数据存储器中:
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为寄存器区;
由上面的分析可知
FLASH区最大32K;
接下来能用到程序上的只有2KSARAM,256字的DRAM的B0区一般不用。
因此,我们将程序代码分为两部分:
.基本固定部分-放入FLASH;
尽量多放:
调试通过的部分就放入;
.频繁变化部分-放入SARAM;
尽量少放;
为了便于相互连接,在每一部分的代码都要明确定位:
FLASH部分:
.中断向量表,这是固定的,用户不能随便定位:
常定义以为VECTORS段,地址:
0000H~003FH;
.外围模块中断向量表,用户可定位,常定义为PVECS段,地址:
44H~FFH;
.中断处理程序的公共代码-GISR,用户可自行定位,此处定义为PRGISR段,地址为:
200H~FFFH;
SARAM部分:
.主程序代码区,用户可自行定位,常定义为TEXT段,地址:
8000H~86FFH;
.二级中断处理程序代码区,因为不论是定时器中断,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、主要程序()
主程序-----------DSPINVER.ASM
.title"
DSPINVER.ASM"
DP_B2.set0;
page0ofdataspace
ST0REG.usect"
.usect"
1
ST1REG.usect"
AR0REG.usect"
AR1REG.usect"
AR2REG.usect"
AR3REG.usect"
AR4REG.usect"
AR5REG.usect"
AR6REG.usect"
AR7REG.usect"
TREG_TMP.usect"
PREG_TMP.usect"
================================
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;
xor#00010h
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
.text
_c_int0:
nop;
1000H/8000H
callInit_DSP
※※※※※※※※※※※※※※※※※※※※※※
loop:
nop
TEST_F
callDelay
bloop
※※※※※※※※※※※※※※※※※※※※※
Init_DSP.ASM"
----------------------------------------------------------
function:
Delay延时
input:
ar4
output:
---
usege:
ar4,
ar0
Delay:
larar4,#01h
dy_lp:
larar0,#0ffffh
dy_lp0:
nop
mar*,ar0
banzdy_lp0
mar*,ar4
banzdy_lp
ret
==========================================================
中断处理区域
--------------------通用中断程序入口----------------------
.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
saclTREG_TMP
-----保护现场程序结束----------------------
-------------中断检查----------------------
ldp#PIVR>
laccPIVR,1
add#PVECTORS
bacc
-----------------------假中断处理--------------------------
PHANTOM:
CLRCINTM
RET
.ramisr"
TEST_ISR:
8700h---SARAM
CPUgB_F
ldp#XINT1CR>
splk#8001h,XINT1CR
-----恢复现场程序开始----------------------
larAR0,AR0REG
larAR1,AR1REG
larAR2,AR2REG
larAR3,AR3REG
larAR4,AR4REG
larAR5,AR5REG
larAR6,AR6REG
larAR7,AR7REG
ltPREG_TMP
ltTREG_TMP
pop
lst#1,ST1REG
lst#0,ST0REG
-----恢复现场程序结束----------------------
clrcINTM
ret
==========================================================
====================
.endif
EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
.end
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"
---0044h;
定义子向量段
PVECTORSBPHANTOM;
偏移地址0000H
B8700h;
TEST_ISR;
PHANTOM;
偏移地址0001H
BPHANTOM;
偏移地址0002H
偏移地址0003H
偏移地址0004H
偏移地址0005H
偏移地址0006H
偏移地址0007H
偏移地址0008H
偏移地址0009H
----------------------------------------------------
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
FLASH.CMD文件()
/*---------SARAM.CMD----------*/
/*--------------------------------------------