分享

DSP存储器双映射

 heroshishiran 2012-03-24
三 TMS320C2X/C5X 软件应用
这里介绍 TMS320C2X/C5X 若干软件编程技巧问题及一些典型的应用程序。
3.1软件编程技巧:
A.充分利用片内RAM
TMS320C2X大部分指令的执行时间是一个指令周期,但是在实际实现时由于采用的程序存储器和数据存储器是片内还是片外,实际执行的时间是不相同的。按照指令在内部存储器和外部存储器以及数据在内部存储器和外部存储器,可以分为四种情况,即:(1)指令在内部存器、数据在内部存储器(PU/DI);(2)指令在内部存储器、数据在外部存储器(PI/DE);(3)指令在外部存储器、数据在内部存储器(PE/DI);(4)指令在外部存储器、数据在外部存储器(PE/DE)。设P表示外部程序存储器所需的等待状态数,d表示外部数据存榜器所需的等待状态数,则执行LAC指令在四种情况下所需的周期数如表2.1所示。

表2.1 LAC指令周期数
PI/DI PI/DE PE/DI PE/DE
1 2+d 1+p 2+P+d
显然,即使外部的存储器是高速存储器不需要等待态,在PI/DE和PE/DE两种情况下,执行LAC所需的时间是两个指令周期,而不是一个指令周期。PI/DI和PE/DI两种情况是一个指令周期。因此,在程序在外部存储器中运行的情况下,应尽量使用片内RAM存储器存储数据。虽然一条指令只相差一个周期,但当指令在多级嵌套循环内部时就相当可观了。
B,利用单指令重复指令。
TMS320C2x提供了重复指令RPT和RPTK,这两条指令可以使下一条指令重复执行指定的次数而不增加额外的执行时间。TMS320C2X的重复计数器为8位,因此最大值为255,即最多可以便下一条指令执行256次。 RPT和RPTK与TBLR/TBLW、BLKD/BLKP、IN/OUT及MAC、MACD等指令结合使用可以提高程序运行的效率。例如下面的一段程序将存放在外部数据存储器地址400H开始的256个数据搬移至片内的Bl块。
LARP AR1
LRLK AR1,300H
RPTK 255
BLKD 400H,* +
C.利用高效指令和特殊寻址方式、
TMS320C2X的指令集中提供了一些高效的指令。如乘累加并移位的MACD指令、平方并累加或减指令SQRS以及LACT、LTA、LTD、SPAC、APAC等。除了常用的寻址方式外,还提供了用于FFT的比特反转寻址方式。灵活使用这些指令和寻址方式可以提高程序的效率。
3.2提高TMS320C5x软件效率
TMSS320C5X是TMS320C2X的增强型DSP芯片,其增强的并行结构使得TMS320C5X的速度是TMS320C25的二倍以上。TMS320C2X的汇编语言在源代码级与TMS320C5X向上兼容, TMS320C2X的汇编程序稍作修改并用TMS320C5X的汇编器重新汇编后就可以在TMS320C5X 上运行。TMS320C5X的指令集是TMSS320C25指令集的超集,它在TMS320C2X的基础上作了改进并增加了一些功能更强的指令,充分利用这些增强特性可大大提高TMS320C5X的程序效率。
A.利用片内存储器的双映射特性
TMS320C5X具有1O56字的片内双存取存储器,比TMS320C25多5l2字。虽然使用这种类型存储器的效率很高,但同时成本也较高。TMS320C5X内部另一种存储器是单存取存储器,TMS320C53和C5l分别具有3K和IK字的单存取存储器,而C50具有8K字。这种存储器块的一个特点是同时可以映射至程序和数据空间。这种双映射的特点对于实现诸如自适应FIR滤波器(如横向滤波器)非常有用。乘/加循环要求F1R滤波器的系数在程序空间中,但同时相同的系数表需在数据空间中被更新。将这个系数表存放于片内的单存取存储器中并利用其双映射特点可使横向滤波器实现的效率更高。’
B.利用无开销循环。
在TMS320C25中,只提供了用于单指令重复的RPR/RPTK指令,要实现多于一条指令的循环必须来用寄存器不为零跳转的BANZ指令,这样每次循环实际上增加了3个指令周期。 TMS320C5X不仅提供了单指令重复指令RPT,而且提供了块指令重复指令RPTB,因此, TMS320C5X可以实现块指令的无开销循环。例如。
LACL #99
SAMM BRCR ;循环100次
RPTB LOOP-1
LAC *,16,AR1
MPYA *,+AR2
SACH *0-
LOOP:
C.嵌套循环的商效编程
在许多DSP应用程序中需要用到嵌套循环。如求10阶自相关需要用到二级嵌套循环,内循环计算每个自相关系数,外循环进行计数。如果内循环可以用RPT实现,则外循环可以用RPTB指令实现。如果内循环不能用一个RPT实现循环,也可以用延迟跳转循环来实现(如AR不为零延迟跳转BANZD)。最多可以有8个这佯的BANZD循环嵌套,每个循环用一个辅助寄存器作循环计数器。
D.使用CRGT和CRLT搜索最大/最小值
TMS320C5X提供了用于高效搜索最大和最小值的特殊指令CRGT和CRLT,这两个指令比较累加器ACC和累加器缓冲器ACCB之间的大小,比较之后将最大或最小值存放于ACCB中。例如下面一段程序用于在300H至309H存储单元中搜浆最大值并得到其地址。
MAXADR .set 60H
MAXVAL .set 61Hu
.TEXT
LDP #0 ;DP=0
LAR AR0,0300H
SETC SXM
LACC #0800H ;装人-个是小值
;(如果找最小值则装入7FFFH)
SACB ;送至ACCB
SPLK #9,BRCR ;重复10次。。
RPTB endb-1
LACC * ;取数至ACC
CRGT ;比较(如果找到最小值CRGT指令)
SACL MAXVAL ;保存具大值
XC #1.c
SAR AR0,MAXADR ;保存地址
MAR *+
Endb: RET。
E.利用循环寻址方式
TMS320C5X提供了循环寻址方式,这种寻址方式在实现F1R滤波器时非常有用。一般实现自适应FIR滤波器采用具有数据移动操作的乘/加指令MACD,在C5X中,可以用循环寻址方式代替数据移动操作来更新滤波器的铀头系数。如果滤波器的抽头在片内的单存取存储器,则这种方式的运行速度更快。
F.利用延迟跳转和条件运行
TMS320C2x具有3级深度的流水线,而C5X具有4级深度的流水线。C5X 4级深度的流水线使芯片的并行性能更强。然而,流水线越深,清空流水线的周期越长。正常眺转时,由于需要清空流水线,因此需要4个周期才能实现。相比而言,C2X仅需3个周期。但是,对C5X而言,所有需要清空流水线的指令都支持延迟执行功能,使运行开销降低至2个周期。此外果是仅跳转一个或两个指令这种特殊情况,可以使用速度更快的条件运行指令XC,此时仅一个周期。
G.并行进辑单元
TMS320C5X的比特操作单元与算术逻辑单元是独立运行的。这可使C5X在没有ACC或
ACCB参与的倩说下对片内或片外存储器单元(包括存储器陕射的寄存器)进行进辑操作。例如:
SMMR DRR, #DRR_DATA
LMMR DXR, #DXR_DATA
0PL #RXDATA, SP_FLG
APL #TXDATA, SP_FLG
H,增强的移位功能
TMS320C2X具有较强的移位功能,如取操作数至ACC时带0--16位左移、存ACC时带0--
7位左移、根据TREG1寄存器进行左移的取数指令LACT、ACC左移一位ROL和ACC右移一位ROR等。TMS320C5X在此基础上增加了ACC右移1--16位的指令BSAR和根据TREGl寄存
器值进行16位右移指令SATH及0--15位右移指令SATL。例如:
BASR 7 ;ACC=ACC >> 7
LMMR TREG1,1BH
SATH ;ACC=ACC >> 16,因为TREG1.4=1
SATL ;ACCC=ACCD >> ll
此外,C5X还具有对ACC、ACCB和进位位组成的65位数据进行移位的指令。
I.存储器映射寄存器
TMS320C5X提供了累加器与寄存器之间的直接通路,这是将寄存器映射至数据存储器而实现的。同时,TMS320C5X也支持存储器和寄存器之间的直接数据交换。例如:
SPLK #l6, INDX
SAMM PRD
L.系数表的动态寻址
在用乘/加指令实现F1R滤波器时,TMS320C2X/C5X从数据存储器取输入样值,而从程序空间取滤波器系数。由于同时从存储器中取两个操作数,使乘/加操作得以在一个周期内完成。在C25中,系数表的地址只能用直接寻址方式指定,这可满足大部分的应用。但是如果系数表的地址事先不能确定,而需在程序运行过程中确定时,C25实现就比较困难。对这种情况,C5X提供了一个称为块移动地址寄存器(BMAR)的专用寄存器,使乘/加操作可以用间接方式寻址,BMAR指向程序存储器中的系数表地址。例如
LACL table_add
SAMM BMAR ;更新系数表的地址
LAC ONE, 14
ZPR REG=0
RPT num_a-1 ;重复
MADD * - ;乘/加
APAC ;加最后一个乘积
SACH result,1 ;保存结果
3.3 软件应用
A.压缩与扩张程序。
与PCM Codec接口时,由于Codec输出和输入的数据均采用8位压缩格式,因此DSP处理前和处理后的数据均需进行变换。从Cedec来的压缩数据先要进行扩张变换为线性数据才能进行处理,同样,在送给Cedec前也需将线性数据变换为压缩数据。下面我们分别给出相应的应用程序。
(1)扩张程序
由于8位数据只有256个数值,因此扩张变换一般可以采用查表法实现,表的大小为256, 根据给出的V律扩张的数据表。TMs320c25的查表程序如下。
ULOT: LAC IN
ANDK #OFFH
ADLK _ulawtab
TBLR OUT
RET
上述程序中,待扩张的数据在IN中,扩张后的数据在OUT中,,ulawtab为256点数据表的起始地址。
(2)压缩程序
线性到压缩数据的变换一般采用程序计算实现,下面是线性数据到(律压缩数据的TMSC25程序。
;初始化
LDPK 0
LALK 132
SACL BIAS2
LALK -7
SACL NEG7
LARP ARO
;压缩子程序
LTOU: ZALH IN
SFL
SFL
BLZ NEGCMP
ADDH BIAS2
LAR AR0,NEG7
RBTK 6
NORM
ANDK OF000H,14
SACH Q
SAR AR0,S
ZALH S
ABS
ADD Q,2
XORK 0FF00H,4
B SATCH。
NEGCMP: ABS
ADDH BIAS2
LAR AR0,NEG7
RBTK 6
NORM
ANDK 0F000H,14
SACH Q
SAR AR0,S
ZALH S
ABS
ADD Q,2
XORK 07F00H,4
SACH OUT,4
RET
上述程序中,待压缩的数据在IN中,压缩后的数据在OUT中。数据存储单元都定义在第 0页中。需要注意的是,应保证待压缩数据的数值范围在一7774”+7774之间。
B.内部定时器的应用
TMS320C2X内部具有一个定时器,可产生周期中断,可以用来设置诸如A/D的采佯频率,在外部标志引脚XF上产生周期脉冲等。TMS320C2X的定时器由一个16位的定时器寄存器和一个16位的周期寄存器组成。在每个CLKOUT1周期,定时器寄存器的值减1,当该寄存器的值为0时,产生一个定时器中断(TINT)。在下一个CLKOUT1周期,周期寄存器的内容(PRD)装入至定时器寄存器。因此,定时器中断的周期是PRD+l个CLKOUT1周期,即中断频率为 CLKOUTl/(PRD+1)。设晶体的时钟为40MHz,要产生一个10KHz的定时器中断,则周期寄存器的值为:
f = CLKOUT1/(PRD+1)
PRD = (CLKOUT1/f)-1 =(10MHz/10KHz)-1 = 999
下面是一个在XF引脚上产生一个10KHz正脉冲的TMS320C2x程序。
PRD .set 3
IMR .set 4。
.text
LDPK 0
LALK #999
SACL PRD ;置定时器周期寄存器 = 999
LACL #8
0R IMR
SACL IMR ;开放定时器中断
RXF ;XF 置低
EINT :开中断
LO0P: B LOOP
;定时器中断服务程序
TINT_ISR:
SXF ;XF置高
SXF ;XF置低
EINT ;开中断
RET ;中断返回。
TMS320C5X的定时器在TMS320C2X的基础上增加了一些控制功能,通过设置定时器控制寄存器TCR可以启动、停止定时器,也可以设定定时器分频比。定时器的中断频苹为
f = CLKOUT1/[(TDDR+1)(PRD+1)]
式中,TDDR为分颇比,PRD为周期寄存器的值。
C.中断的保护和恢复
中断程序的状态保护和恢复只要根据中断程序中寄存器的使用情况进行保护和恢复即可。但是在保护两个状态寄存器ST0和STl时必须特别注意恢复时的先后顺序。TMS320C2X
保护ST0和STl寄存器时使用专门的指令SST0和SST1,恢复时使用LST0和LST1,如果采用间接寻址进行保护,则保护和恢复的顺序无关紧要。但是如果采用直接寻址,则必须注意恢复时的先后顺序。下面是采用直接寻址方式时TMS320C2x中断保护和恢复的正确方法,程序中TST0、TST1等都是定义在数据空间第O页的存储单元。
ISR_SUB:
SST0 TST0 ;保存ST0至TST0单元(强制DP = 0)
SST1 TST1 ;保存ST1至TST1单元(强制DP = 0)
LDPK 0 ;DP = 0
SACL TACCL ;保存ACC的高16位
SACH TACCH ;保存ACC的低16位,“
ZAIS TACCL ;恢复ACC的低16位
ADDH TACCH :恢复ACC的高16位
LST1 TST1 ; 恢复 ST1
LST0 TST0 ;恢复ST0
EINT :中断使能。
RETI ; 中断返回
如果将恢复的顺序颠倒过来,即首先执行LST0指令然后执行LST1指令,则数据页指针DP就不能正确地加以恢复。因为,数据页指针DP在状态寄存器ST0中,执行了LST0实际上就将当前数据页改为ST0中的DP值,再执行LSTl时,由于不像SST1那样强迫将DP置为0。因此数据页不对,恢复的ST1内容就不正确了。
D.TMS320C5X矢量表的重定位
TMS320C2x中断矢量表的地址固定在程序空间o地址开始的一段位置,固定中断矢量表地址在某些情况下会带来一定的麻烦。例如.当系统采用低速EPROM加高速RAM的存储器配置时,虽然程序可以在系统加电运行时从EPROM搬移至高速RAM运行,但由于中断矢量的地址是固定的,因此系统产生中断时,在中断矢量地址的跳转指令将不得不多运行几个指令周期。TMS320C5x作了改进,使中断矢量表的地址可以通过程序进行重定位,可以将矢量地址重新定位至程序空间中任何2K字页面的开始,如800H。重定位的方法是在PMST寄存器的IPTR域中设置对应的值,复位时,IPTR =0,中断矢量表的首地址为0H,若IPTR=1则首地址为800H。复位后执行下面的指令将矢量表地址重定位在800H:
OPL #800H,PMST
执行上述指令后,后面产生的中断将从新的矢量表中获取中断矢量,例如复位后定时器中断的矢量地址为BH,而新的矢量地址为808H。
E.TMS320C5X等待状态产生的软件实现
为了与低速的存储器或I/O设备接口, TMS320C2x需要采用硬件等待状态产生器实现,这使硬件设计复杂化。TMS320C5X支持硬件等待状态产生,也可采用软件控制等待状态的产生,从而使硬件设计简单化,节省了系统体积。软件可编程等待状态产生器是由两个16位等待状态寄存器PDWSR和IOWSR及一个5位控制寄存器CWSR控制的.
F.TMS320C2x至TMS320C5X的软件移植
TMS320C2x的指令集在源代码级是向上兼容的。因此,原则上说,TMS320C2X的程序经
过TMS320C5X的汇编器重新汇编后就可以在TMS320C5x上运行。但是,由于TMS32l0C5x在
串行口、定时器和全局控制等方面与TMS320C2x不同, 因此在TMS320C2x至TMS320C5X的软件移植时,还必须作-些迎要的修改,例如表2.2列出了有关串行口设置的一些指令的侈改。此外,还必须注意有些寄存器的地址也不相同。

表2.2 串行口指令的修改
TMS320C25 TMS320C50
RFSM APL #0FFF7H,SPC
SFSM OPL #8,SPC
RTXM APL #0FFDFH,SPC
STXM OPL #020H,SPC
FORT0 APL #0FFFBH,PC
FORT1 OPL #4,SPC
四 代码调试工具
开发DSP芯片,调试工具是必不可少的。TMS320系列DSP芯片的系统集成和调试工具主要有:
(1)C/汇编语言源码调试器。
(2)初学者工具DSK
(3)软件模拟器(Simulator)。
(4)评价模块EVM。
(5)软件开发系统SWDS
(6)仿真器XDS
下面我们分别介绍这几种调试工具。
4.1 C/汇编源码调试器
c/汇编源码调试器是一种工作在PC机上的先进的软件揍口,它与调试工具(如软件模拟器、评价模块、软件开发系统、仿真器)配合使用。调试器可以完全控制用C或汇编语言编写的程序。用户程序既可用C语言调试,也可用汇编语言调试,还可以进行C和汇编的混合调试。调试器提供了非常友好的用户界面,面向窗口、支持鼠标和莱单式的接口使用户不必记忆复杂的命令,使用十分方便。
A 调试器的主要特征
调试器的主要特征包括:
(1)提供完善的控制程序运行的特征,如:条件执行,单步执行,断点设置和清除,批文件执行命令。
(2)多操作支持:增强了并行处理能力以支持TMS320C40的多处埋器的调试。
(3)多级调试:可同时调试C和汇编语言“,调试C语言时,用户可同时观察C源码及由C源码产生的目标代码的反汇编,调试器也可用作汇编语言调试器。
(4)可灵活配置的界面:由于调试器的显示界面是可配置的,因此用户可根据需要设置不同的界面。显示的颜色、窗口的边界、尺寸和位置等都可以改变。
(5)灵活的命令输人:输入命令的方式灵活多样,可用键人命令法。鼠标、功能键或下拉莱单输入。调试器具有命令记忆功能,不必重新输人即可执行以前输人的命令。
(6)全屏幕编辑:任何窗口中显示的数据值可很容易地更改。
(7)连续更新:调试器可连续更新屏幕上的信息,并高亮显示更改的数据。
(8)综合数据显示:用户可方便地在屏幕上建立窗口以显示和编辑变量、数组、结构及指针等数据类型。
(9)功能强大的命令集:调试器提供了一个充分利用C表达式的命令集。
B 调试器的调试模式
调试器提供三种调试模式:自动模式,汇编模式,混合模式。
(1)自动模式:在自动模式中,调试器自动显示当前正在运行的代码,或者是汇编语言,或者是C语言。这也是缺省的调试模式。
(2)汇编模式:在这种模式下,显示的是汇编语言,不管运行的是C语言还是汇编语言。
(3)混合模式:在这种模式下,可以同时显示C语言程序和汇编程序。
C 调试器窗口
调试器能显示多种不同类型的窗口。窗口的名称显示在窗口的顶行。调试器共有八种类型的窗口,可以分为三大类。
1.命令显示窗:命令窗口提供一个可以键入各种命令的区域,并显示各种信息,如进程信息、错误信息或命令输出。
2.代码显示窗:显示汇编语言代码或C语言代码。有三种代码显示窗口:
(1)反汇编囱口——显示内存的反汇编码。
(2)文件窗口——显示任何文本文件,主要是C语言源程序。
(3)进程调用窗口——运行C代码时显示当前跟踪运行的函数进程。
3.数据显示窗:观察和修改各种类型的数据。有四种数据显示窗口:
(1)内存显示窗口——显示一定范围的内存内容。
(2)CPU窗口——显示处理器各个寄存器的内容。
(3)数据显示窗口——显示一个集合的数据类型,如数组、结构等。
(4)观察窗口一显示已选定的数据,如变量、寄存器或内存的某个单元。
调试器的窗口可任意移动或改变大小,在数据显示窗口中可以编辑其中的任一个值,当然,在作这些工作之前,必须首先选择好窗口并使之成为活动窗口。
D 调试器的命令输入
调试器提供了非常灵活方便的命令输人方法。调试器提供的命令输入方法主要有以下几种:
1.命令行输入
命令行输入就是在调试器的命令窗口中键人命令。如:
go main ;执行到程序的main处
win CPU :激活CPU窗口
利用调试器的记忆功能可以用简便的方法输入以前键人过的命令。如用TAB键可以向后逐条移动执行过的命令,用TAB加SHIFT键可以向前逐条移动执行过的命令,选择好以后按回车键即可。
2.菜单输入
菜单输入是一种常用的输入方法。选择菜单可以来用三种不同的方法:鼠标输入、按键输入和热键输入。热键输入主要用于没有下拉菜单的主莱单,如RUN、STEP和NEXT。鼠标输入比较方便,用鼠标左键点中相应的主菜单和下拉菜单即可。按键输入时首先同时按下ALT键和代表主莱单的高亮字母以选择主菜单,然后按下代表下拉莱单的高亮字母即可,当然也可以用方向键选择好下拉菜单再按回车键。
3.批文件输人
调试器提供的take命令可以使调试器执行一个批处理文件。设有一个批处理文件
batcom.fil的内容为:
reset
load sample.out
go main
则在调试器的命令行中键入take batcom.fil就使调试器在复位系统之后,装人sample.out 并执行至程序的main处。
E 调试器使用方法简介
使用调试器调试程序主要有以下几个步骤:调试器配置;装人程序;运行程序;观察运行结果;编辑更改数据。
1.调试器配置
在使用调试器之前,首先必须根据需要配置调试器。调试器配置包括内存配置和显示配置,其中内存配置尤为重要。内存配置用于告诉凋试器哪些内存有效,哪些内存不能进行存取。因此提供给调试器的内存映象应与实际目标系统的内存配置相一致,当然内存映象也应与链接命令文件中的 MEMORY定义相匹配。当内存映象配置好以后,启动调试器运行程序时,如果访问一个没有定义的存储区,则调试器将显示一个错误信息。一般地,配置内存可在启动调试器之前进行。方法就是在调试器能够自动读到的批文件 init.cmd中放入内存映象命令。启动调试器,在初始化过程中读入init.cmd的命令,从而完成内存配置。需要注意的是,对于不同的调试环境,init.cmd的文件名有所不同,如模拟器中的文件名为siminit.cmd,仿真器中的文件名为emuinit.cmd等。图4.1示出了TMS320C50的init.cmd的一个例子。
;TMS320C50存储映象配置
MR ;重设内存映象
MA 0,0,0x0FFFF,RAM ;程序存储器0-0x0FFFF
MA 0,1,0x7F,RAM :数据存储器 0-0x7F
MA 0x100,1,0x400,RAM ;程序存储器 0x100-0x4FF
MA 0x800,1,0,0x0FFFF,RAM ; 数据存储器 0x800-0x0FFFF
MAP ON ;启动内存映象
图4.1 TMS320C50 的内存映象例子
其中,MA(Map Add)命令定义了有效的内存范围,并标识这些范围的读写特征。对TMS320C5X而言,MA的命令格式为:MA地址,页,长度,类型
其中,地址表示一段存储器的起始地址,长度表示该段存储器的长度,类型表示这段存储器的读写特征。其中,ROM表示只读,RAM表示可读可写,WOM表示只写,PROTECT表示不可存取。IPORT表示输入口,OPORT表示输出口,IOPORT表示输入/输出口。在MA命令格式中,注意TMS320C5X有一个域“页”,分别用0,1,2表示程序存储器空间、数据存储器空间和I/O空间。MAP ON命令用于启动内存映象。
Init.cmd是在启动调试器时自动装人的。如果在启动后不想用init.cmd中的内存配置,则也可以调人另一个存储器配置。方法是可以创建另外一个内存配置文件。文件内容的格式如下:
MR :重设内存映象
MA命令 ;定义新的内存映象
MAP ON ;启动内存映象
设文件名为mem.new,则在启动调试器后,用下列命令读入即可对内存重新配置为mem.new的内容:
take mem.new
在调试过程中也可以修改内存映象。如用MA命令可增加一段内存,用MD命令可删除一段内存,用MR命令则删除内存映象中的所有内存段,还可以用ML命令列出已经定义的内存及其读写特征。除了可对内存进行配置外,其它如屏幕颜色、窗口位置、窗口大小和边框类型等也可以进行配置。缺省情况下,启动调试器自动调入init.clr文件中的配置。如果要修改配置,则在修改后将当前配置存人一个文件,下次启动调试器后再装入这个配置文件即可,也可将修改后的配直存入init.clr中,则启动调试器自动装入修改的配置,不必重新装入。
2.装人程序
调试器装入运行调试的程序是编译汇编链接后生成的 .out文件。装入的方法是在主菜单的FILE命令下选择LOAD命令,然后键入文件名即可。如果是由C程序得到的文件,则同时在FILE窗口中显示相应的C语言程序。
3.运行程序
运行程序的方法主要有:run,runb,go,单步运行等,使用方法如下:
run是最基本的运行命令,执行run命令后,程序开始运行直至遇到断点或按了ESC键或鼠标左键。
runb用来运行并计算一段程序的时钟周期数。若要计算某一段程序执行的周期数,首先在这段程序的开始和结束处各设置一个断点,然后运行run至第一个断点,再运行runb至第二个断点,在命令窗口输入? clk命令就可以得到该段程序的执行周期数。
go命令用来执行至程序的某一点,如go main就使程序执行至main标号处。
单步运行分step和next两种。用:step命令调试C语言时,每执行一次执行一条C语句,调试汇编语言时,则每执行一次执行一条汇编语句。 next命令与:step命令类似,所不同的是在遇到函数调用时,不进入函数内部,而直接执行到调用语句的下一条语句。 运行程序时,还可以有条件的运行。如,
run i< 100 即只要i< l00,调试器就一直运行。
Step 50 即step单步运行50次。
next 100 即next单步运行100次。
4.观察运行结果。
调试程序时,观察运行结果是检验程序运行正确与否的重要一步。调试器提供了灵活的观察运行结果的手段。观察数据一般有下列三种方法:
(1)直接在已有的显示窗口中观察。如在CPU窗口中可以观察到处理器的寄存器值,在存储器窗口中可以观察到一段内存的内容,首先在命令窗口中键入要观察的内存的首地址,如要观察TMS320C50从OX809800开始的一段内存,则键入
mem 0x809800
(2)在命令窗口中用?命令观察。这种方法比较适合于观察一些临时的变量。如
?I 观察变皇i的内容
?AR0 观察寄存器AR0
?Ox809800,x 以16进制观察Ox809800内存的内容
(3)增加显示窗口跟踪变量。这类显示窗口又有两种。一种是WA1CH窗,可以观察单个变量、寄存器或指定的存储单元。如
wa I 观察变量i;
wa sp 观察堆栈指针;
wa Ox809800 观察Ox809800内存的内容。
另一种是DISP窗,可以观察集合数据类型,如数组、结构等。例如
disp indata 观察数组indata;
5.编辑和更改数据。
编辑更改数据的方法主要有两种,一是直接在数据显示窗口中更改。如在CPU窗口中可以更改寄存器值,在存储器窗口中可以更改内存的内容,也可在DISP窗口和WATCH窗口中更改数据内容,另一种方法是利用表达式的附加作用更改数据。如
?AR3 + + AR3内容加l”
?AR0 = 8 AR0等于8
4.2 初学者工具 DSK
初学者工具DSK(DSP Starter Kit)是TI公司提供给初学者进行DSP编程练习的一套廉价的实时软件调试工具,每套售价仅99美元。DSK板上除了有一片DSP芯片之外,还提供了可用于声音输入和输出接口的模数模接口芯片(一般为一片TLC32044),它可以与PC机进行通信,在PC上汇编后的程序可以通过串行或并行接口下载到DSP芯片的内部RAM执行。此外,DSK板上还将DSP芯片的地址和数据总线引出,便于用户对DSK板进行存储器等硬件资源的扩充,并在DSK硬件的基础上形成用户独立的DSP系统。以下是TMS320C5X DSK所提供的软硬件资源。
TMS320C5X的DSK提供了如下软硬件资源:
40MHZ的TMS320C50(内部具有10K字的RAM);
32K字节的BOOT EPROM;
A/D和D/A转换芯片TLC32044;
与PC的RS-232C接口
汇编器;
调试器软件接口。
4.3 软件模拟器
软件模拟器是一种模拟DSP芯片各种功能并在非实时条件下进行软件调试的调试工具,它不需要目标硬件支持,只需在计算机(如PC)上运行,是一种廉价方便的调试工具。当然,由于DSP芯片用软件模拟实现,运行速度慢是软件模拟器的一个突出的缺点。软件模拟器模拟DSP芯片的I/O 口时采用与文件关联的方法来实现,因而调试中所需的I/O值可从文件中读取,输出到I/O口的值也可存储在文件中。
软件模拟器的主要特征有。
(1)在计算机上执行用户DSP程序;
(2)可修改和查看寄存器;。
(3)可修改和显示数据和程序存储器:任何时候都可进行存储器的修改,也可在程序装人前进行存储器初始化;
(4)可模拟外设、高速缓存(cache)及流水线、定时等功能;
(5)可计算指令周期数;
(6)可编程的断点设置:可在取指令、读写存储器及错误条件满足时设置断点;
(7)可进行累加器、程序计数器、辅助寄存器的跟踪;
(8)指令的单步执行;
(9)用户可设定中断产生间隔;
(10)在遇到非法操作码和无效数据访问时提示错误信息;
(ll)从文件中执行命令。
在用模拟器调试程序前,首先必须对源文件进行汇编,如果程序由多个模块组成,还迎须进行链接。链接后的绝对代码可以装人模拟器进行调试。
TI 提供的软件模拟器有:
·TMs320CIX软件模拟器
·TMs320C2X软件模拟器
·TMs320C2XX软件模拟器。
·wi320C3X软件模拟器
·TMS320C4X软件模拟器
·TMs320C5X软件模拟器
·TMs320C54X软件模拟器
在上述软件模拟器中,新版本的模拟器都采用了C和汇编源码调试器接口,允许用户用C语言或汇编语言进行调试,也可进行两种语言的混合调试,用户接口界面非常友好。其程序执行的方式有下列几种方式:单条指令/多条指令、单周期/多周期、执行到条件满足,如果条件满足一直执行、执行设置的循环次数、无条件执行至键输入等。
用软件模拟器模拟I/O口时,首先用与存储器配置相同的方法将I/O口增加到存储器映象中,然后用关联命令MC将I/O口与一个文件相关联,MC命令的格式为:
MC 口地址,页,文件名,{READ/WRITE}
其中的“页”分别用1和2表示,“1’’表示串行口,“2”表示并行口。
下面我们以TMS320C50为例说明软件模拟器模拟I/O口时的使用方法。
在TMS320C5X中,若要将50H口配置为输入口,并与in.dat文件关联,命令如下:
MC 0x50,1,0xl,IPORT ;口地址50H配置为输人口
MC 0x50,1,in.dat,READ ;口地址50H与文件in.dat关联
TMs320C50具有两个串行口,一个是标准的同步串行口,一个是TDM串行口。两个串行口的配置方法如下。
MA 0x20,1,1,IPORT ;配置DRR(0x20)为输入口
MA OX21,1,1,0PORT ;配置DXR(Ox2l)为输出口
MA 0x30,1,1,IPORT ;配置TRCV(0X30)为输入口
MA Ox31,1,1,OPORT ;配置TDXR(Ox31)为往出口
MC 0x20,1,RECV.DAT,READ ;将DRR与RECV.DAT文件关联
MC Ox2l,1,XMIT.DAT,WRITE ;将DXR与XMIT.DAT文件关联
MC 0x30,1,TRCV.DAT,READ ;将TRCV与TRCV.DAT文件关联
MC OX31,1,TXMT.DAT,WRITE ;将TDXR与TXMT.DAT文件关联
上述配置可以放人Simlator的初始配置命令文件simlaor.cmd中,则每次启动simlator调试器自动进行配置,当然在调试过程中也可以重新进行配置。
关联文件具有特定的格式,对一般的I/O口和标准的同步串行口,文件格式为每行一个16进制数,如:
OxO123
0x4567
Ox89ab
对TDM串行口,输入和输出文件格式需要三个区域:地址、数据和通道号,每个区域都是16进制格式,中间用空格分开,如:
0x80 OxO123 0
0x40 0x4567 1
0x20 Ox89ab 2
0x10 0xcdef 3
0x01 0x0123 4
Simlator模拟串行口中断和外部中断是通过设置伪寄存器的方法实现的。每一个中断设置两个伪寄存器,一个是中断周期寄存器,另一个是中断定时器寄存器。中断周期寄存器内设置的是两个中断间隔的机器周期数。中断定时器寄存器内包含的是当前至下一个中断之间的机器周期数,中断定时器寄存器以机器周期的速率进行递减,若中断使能,则递减至0时就产生一个中断,同时将中断周期寄存器中的值装人。表4.2列出了TMS320C5X串行口的伪寄存器


表4.2 串行口伪寄存器
伪寄存器 作 用 缺省值
XIRP 发送中断周期寄存器 64
XIRT 发送中断定时器寄存器 从XIRP装入
RIRP 接收中断周期寄存器 64
RIRT 接收中断定时器寄存器 从XIRT装入
TXIRP 独立方式TDM发送中断周期寄存器 64
TXIRT 独立方式TDM发送中断定时器寄存器 从TXIRP装入
TRIRP 独立方式TDM接收中断周期寄存器 64
TRIRT 独立方式TDM接收中断定时器寄存器 从TRIRP装入
TDMP TDM串行口周期寄存器 64
TDMT TDM串行口定时器寄存器 从TDMP装入

MS320C50的四个外部中断INTl、IN12、IN13和INT4的模拟也用同样的方法实现。每个中断用两个伪寄存器,一个是外部中断周期寄存器,寄存器名分别为TIC1P,TIC2P,TIC3P和TIC4P,另一个是外部中断走时器寄存器,寄存器名分别为TICIT、TIC2T、TIC3T和TIC4T。调试过程中可以用下列方法设置中断产生的间隔:
?RIRP=100 ;设置串行口接收中断间隔为100
?XIRP=100 ; 设直串行口发送中断间隔为100
?TDMP=1000 ;设置TDM串行口间隔为1000
?TIC1P=128 ;设置INT1中断间隔为128
4.4 评价模块 (EVM)
评价模块是一种低成本的开发板,在EVM板上一般配置了一定数量的硬件资源,可用来进行DSP芯片评价、性能坪估和有限的系统调试。调试接口也采用上述的C/汇编源码调试器。
4.5 软件开发系统 (SWDS)
软件开发系统是一块PC插卡,可提供低成本的评价和实时软件开发。可用来进行实时的软件调试,程序在DSP芯片上实时运行。与仿真器不同的是软件开发系统不提供实时硬件调试功能,因此涉及目标I/O操作一般用文件I/O代替。TI提供了TMS320C2X和TMS320C5X
等软件开发系统
4.6 仿真器 (XDS)
仿真器,也即扩展开发系统(XDS),可用来进行系统级的集成调试,是进行DSP芯片软硬件开发的最佳工具。目前主要有两种类型的仿真器:一种是传统的电路仿真器,主要用于早期的TMS320CIX和TMS320C2X两代DSP芯片的仿真,这两代DSP芯片没有仿真信号线;另一种是先进的扫描仿真器,主要用于TMS320C3X、TMS320C4X、TMS320C5X、TMS320C54X。
TMS320C2XX和TMS320C8X等DSP芯片的仿真,在这些DSP芯片上提供了用于仿真的一些信号线。
采用传统的电路仿真器对用户板进行硬件仿真时,仿真器的电缆插头必须插入到用户硬件电路中DSP芯片的相应位置,也就是说,仿真电缆的插头引脚必须与DSP芯片的引脚一一对应。TI的XDS/22仿真器就属于这一类,主要用于TMS320CIX和TMS20C2X等芯片的仿真。
扫描仿真器不采用插入仿真的方法,而是通过DSP芯片上提供的几个仿真引脚实现仿真功能。这种方法为TI公司所开发,可用来解决高速DSP芯片的仿真。由于高速DSP芯片具有高度并行的结构、快速的指令周期、高密度的封装等特点,采用传统的电路仿真方法很难实现可靠的仿真。扫描仿真消除了传统的电路仿真存在的问题,例如,仿真电缆过长会引起信号失真,仿真插头会引起可靠性差等问题。用户程序可在目标系统的片内或片外存储器实时运行,而不会因仿真器引入额外的等待状态。
DSP芯片内部是通过移位寄存器扫描链实现扫描仿真,这个扫描链被外部的串行口访问。采用扫描仿真,即使芯片已经焊在电路板上,也可进行仿真调试,这对于在生产过程中调试DSP系统也带来极大的方便。
TI为TMS320C3X、TMS320C4X、TMS320C5X、TMS320C2XX、TMS320C54X和TMs320C8X等
DSP芯片都提供了相应的仿真器。其中,TMS320C3X的仿真器采用了12线的仿真头,仿真器通过这个仿真头与目标系统的TMS320C3X相接进行仿真。其12线仿真头如图4.1所示。其中,EMU0-EMU3为四根仿真线,H3为时钟线,由TMS320C3X提供,第7脚的PD为存在检测线,用于指示仿真头与目标系统的连接,在目标系统中,此脚接至+5V。第8脚为空脚,其余均为地线。
除TMS320C3X之外,其它仿真器的仿真信号线都采用JTAG标准IEEE ll49.1。如TMS320C4X和TMS320C5X的仿真头均采用14根信号线,14线仿真头如图4.3所示,表4.3是仿真信号的定义。其中TDO信号与TCK时钟的下降沿对齐,TMS和TDI在TCK时钟的上升沿取样。扫描仿真器的用户界面均采用上面介绍的C/汇编源码调试器界面,与软件模拟器的用户界面完全相同。目标代码可通过扫描接口从PC机下载到目标系统的存储器中,一般下载1K字节的代码约需100mS的时间。


EMU1 1 2 GND TMS 1 2 TRSTEMU0 3 4 GND TDI 3 4 GND
WMU2 5 6 GND PD(+5V) 5 6 空
PD(+5v) 7 8 空 GND TDO 7 8 GND
EMU3 9 10 GND TCK_RET 9 10 GND
H3 11 12 GND TCK 11 12 GND
EMU0 13 14 EMU1

(a)TMS320C3X (b)TMX320C5X

图4.3 仿真器的仿真头

表4.3 JTAG仿真信号定义
仿真头信号 仿真头状态 DSP芯片状态 信号说明
TMS 输出 输入 JTAG测试方式选择。
TDI 输出 输入 JTAG测试数据输入。
TDO 输入 输出 JTAG测试数据输出。
TCK 输出 输入 JTAG测试时钟。TCK是仿真电缆头输出的10MHz时钟源。这个信号可以用来驱动系统测试时钟。
TRST\ 输出 输入 JTAG测试复位。
EMU0 输入 输入/输出 仿真脚0。
EMU1 输入 输入/输出 仿真脚1。
PD 输入 输出 存在检测。此信号用来指示仿真电缆连接正确,目标系统已加电。PD在目标系统中应接至+5V。
TCK_RET 输入 输出 JTAG测试时钟返回。测试时钟输入至仿真头,此信号是缓冲或非缓冲的TCK信号。

以上介绍了TMS320系列DSP的代码生成和代码调试两类开发工具。在代码生成工具中,介绍了C编译器、汇编器和链接器及使用方法,在代码调试工具中,介绍了C/源码调试器、初学者工具DSK、软件模拟器、评价模块EVM、软件开发相同SWDS和仿真器,并介绍了源码调试器的使用方法。了解并熟练掌握这些开发工具对于加快开发的速度提高开发效率十分重要。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多