TMS320C2XX开发设计中应注意的问题[转帖]
- UID
- 13997
- 性别
- 男
|
TMS320C2XX开发设计中应注意的问题[转帖]
高速数字信号处理器是当前信息产业的热点技术之一,采用最先进的DSP无疑会使所开发的产品具有更强的市场竞争力。与普通的MCU相比,DSP芯片放弃了冯.诺依曼结构,采用程序存储器总线和数据存储器总线分开的改进的哈佛结构,独立的程序和数据存储器空间允许同时存取程序指令和数据,因而大大提高了处理速度。在改进的哈佛结构的基础上,DSP芯片广泛采用流水线操作以减少指令执行时间,从而进一步增强了处理器的数据处理能力,非常适合于实时数字信号处理,但同时也给设计者带来了高频干扰和流水线冲突等诸多问题。
TMS320C2XX系列DSP芯片结构资源相似,开发工具相同,因而其开发设计具有很高的可比性。TMS320F206(以下简称F206)是TI公司TMS320C2XX系列的一款高性价比定点DSP,目前已广泛应用于图形图像处理、语音处理、通信及仪器仪表等领域。由于DSP的开发、应用方式与普通的MCU差异很大,因此探讨其开发设计很有必要。笔者在进行以DSP为核心的产品开发中,遇到了很多意想不到的麻烦。本文总结了笔者开发F206时的几点心得,希望对正在和即将进行TMS320C2XX系列DSP开发的同仁们有所帮助。
1 TMS320F206简介
F206是100引脚的TQFP(正方扁平)封装,它主要具有如下特点:
(1)处理能力强。若时钟采用20MHz晶振,则指令周期为50ns,运算能力高达20MIPS。DSP芯片采用静态CMOS集成工艺制作,采用四级流水线操作,其先进的哈佛结构允许对数据与指令的操作同时进行,因而大大提高了数据的吞吐率和指令的执行速度,特殊的DSP指令系统提供了强大的数字信号处理操作。
(2)片内具有32K x 16位的闪存存储器和4.5Kx16位的RAM。利用闪速存储器存储程序,不仅降低了成本、减小了体积,同时系统软件升级也非常方便;大容量的片内RAM可满足大多数设计要求,无需扩展片外存储器,既降低了成本又使硬件设计十分简洁。
(3)地址映射分为4个可独立寻址的空间:
*64K字程序存储器,包含程序执行所用的指令和数据。
*字本地数据存储器,保存指令所用的数据。
*32K字全局数据存储器,保存与其它处理器共用的数据,或者用作额外数据空间。本地数据存储器的上端32K字(8000h-FFFFh)地址空间可用作全局数据存储器。
*64K字的输入/输出(I/O)空间,与外部外围接口,并且包含片内外围寄存器。
(4)资源丰富。F206具有1个同步串行口SSP、1个异步串行口ASP、1个软件可编程定时器(TIMER)以及大量中断资源和独特的JTAG接口等。
由于与目标系统之间采用了JTAG逻辑扫描电路接口(基于IEEE1149.1标准),在仿真时不占用硬件资源,且可随时终止仿真察看CPU内部及外设的工作情况,使得程序的调试和查错十分方便。通过JTAG端口可向片内Flash串行下载程序,无需专门的编程器 (XDS510 仿真器即具有编程功能),进一步减少了开发成本,便于开发设计和产品的软件升级。 |
|
|
|
|
|
- UID
- 13997
- 性别
- 男
|
2 硬件设计与调试
2.1 硬件设计时应注意的问题
F206硬件设计时,应重点注意以下几点:
(1)时钟电路。DSP时钟可由外部提供,也可由板上的振荡器提供。但一般DSP系统中经常使用外部时钟输入,因为使用外部时钟时,时钟的精度高、稳定性好、使用方便。由于DSP工作是以时钟为基准,如果时钟质量不高,那么系统的可靠性、稳定性就很难保证。因此,若采用外部时钟,选择晶振时应对其稳定性、毛刺做全面的检验,以便DSP系统可靠地工作。
(2)复位电路。应同时设计上电复位电路和人工复位电路,在系统运行中出现故障时可方便地人工复位。对于复位电路,一方面应确保复位低电平时间足够长,保证DSP可靠复位;另一方面应保证稳定性良好,防止DSP误复位。
|
|
|
|
|
|
- UID
- 13997
- 性别
- 男
|
(3)在DSP电路中,对所有的输入信号必须有明确的处理,不能悬浮或置之不理。尤其要注意的是:若设计中没用到不可屏蔽硬件中断NMI,则硬件设计时应确保将其相应引脚拉高,否则程序运行时会出现不可预料的结果;若设计中用到NMI,也应在程序正常执行阶段置其相应引脚为高电平。
(4)模拟电路与数字电路应分开布置,独立布线后应单点连接电源和地,避免相互干扰。
(5)DSP、片外程序存储器和数据存储器接入电源前, 应加滤波电容并使其尽量靠近芯片电源引脚,以滤除电源噪声。另外,在DSP与片外程序存储器和数据存储器等关键部分周围建议布上电网,可减少外界干扰。
(6)片外程序存储器和数据存储器应尽量靠近DSP芯片放置,同时要合理布局, 使数据线和地址线长短基本保持一致。对于DSP系统而言,应选择存取速度与DSP相仿的外部存储器,不然DSP的高速处理能力将不能充分发挥。DSP指令周期为ns级,因而DSP硬件系统中最易出现的问题是高频干扰,因此在制作DSP硬件系统的印制电路板(PCB)时,应特别注意对地址线和数据线等重要信号线的布线要做到正确合理。布线时尽量使高频线短而粗,且远离易受干扰的信号线,如模拟信号线等。
当DSP周围电路较复杂时,建议将DSP及其时钟电路、复位电路、片外程序存储器、数据存储器制作成最小系统,以减少干扰。笔者曾在这个问题上花费大量时间和精力,由于干扰严重,DSP根本无法正常工作。后将DSP及其时钟电路、复位电路、片外程序存储器和数据存储器制成最小系统,主要信号线通过金手指与其它相应电路相连,结果DSP系统运行正常。
2.2 硬件调试时应注意的问题
在硬件调试前,应先对电路板进行细致的检查,观察有无短路或断路情况(由于DSP的PCB板布线一般较密、较细,这种情况发生的概率还是比较高的)。加电后,应用手感觉是否有些芯片特别热。如果发现有些芯片烫得厉害,需立即掉电重新检查电路。排除故障后,接着就应检查晶体是否振荡,复位是否正确可靠。然后用示波器检查DSP的CLK-OUT1和CLK-OUT2引脚的信号是否正常,若正常则表明DSP本身工作基本正常。
2.2.1 保证电源的稳定可靠
在DSP硬件系统调试前,应确保给实验板供电的电源有良好的恒压恒流特性。尤其要注意的是,DSP的入口电压应保持在5.0+/-0.05V。
电压过低,则通过JTAG接口向Flash写入程序时,会出现错误提示;电压过高,则会损坏DSP芯片。由于电源电压过高,笔者曾有过一个上午烧坏3块DSP的惨痛经历。另外,由于在调试时要频繁对实验板接电和断电,若电源质量不好,则很可能在突然上电时因电压陡升而烧坏DSP 芯片。这样既会造成经济损失,又将影响开发进度。因此,在调试前应高度重视电源的选择,同时在调试过程中应经常检查电源是否正常。
2.2.2 利用仿真软件排除硬件故障
在完成对电路板的检查后,就可通过仿真软件来调试程序。由于仿真时,程序代码下载到目标系统中的片外程序存储器,因而通过仿真软件可以比较容易地检查出一些硬件故障。
在上电后,若仿真软件调试窗口始终无法调入程序,则有两种可能:(1)DSP芯片引脚存在断路或短路现象;(2)DSP 芯片损坏。倘若是第一次利用仿真软件调试程序,此时应对实验板断电,仔细检查DSP芯片各引脚的焊接情况。如果软件调试窗口曾正确调入程序,则可能是DSP芯片损坏。此时,可通过检测实验板的整板阻抗进一步判断DSP芯片是否受损。若整板阻抗急剧下降,可将给DSP芯片供电的电源线割断,检测DSP芯片的电阻。
如果软件调试窗口可调入程序,但调入的程序局部出错,如对片外程序存储器或数据存储器操作的代码变成.word xxxx,此时可能是片外程序存储器或数据存储器出现故障。应仔细检查存储器是否存在短路或虚焊,若不存在则应进一步判断存储器是否受损。本人曾遇到上述现象,后经仔细检查,发现存储器有引脚虚焊。
|
|
|
|
|
|
- UID
- 13997
- 性别
- 男
|
3 软件设计与调试
哈佛结构、流水线操作再加上集成电路的优化设计,使得DSP芯片的指令周期为ns级,快速的指令周期可使DSP芯片能够实时实现许多应用。但在实际的程序设计中,DSP芯片的这些特点却给程序设计者带来许多意想不到的麻烦。下面笔者将根据自身的实际经验介绍编程与调试时应注意的一些问题。
3.1流水线冲突
F206采用四级流水线操作,指令流水线由一系列总线操作组成,它具有4个独立的操作阶段:取指、译码、取操作数和执行。由于4个操作阶段是独立的,因此这些操作可以交叠地进行;在任意的指定周期内,1到4个不同的指令均可有效,各条指令均处于一个不同的完成阶段。因此,流水线冲突是不可避免的。通常情况下,发生流水线冲突时,编程者可通过调整程序语句的次序或在相应位置插入一定数量的NOP来解决。
3.2 设置等待状态寄存器
对高速的DSP而言,它的读操作从地址稳定到数据有效仅需几十ns的时间,而DSP外设的速度则参差不齐。为了解决高速DSP与低速外设在速度上的冲突, 在高速的DSP与存储器等外设的接口之间,等待状态的设计是一个关键的问题。若DSP不能与外设很好配合,则会导致程序执行结果出错。F206内置一个软件可编程等待状态寄存器(WSGR),通过设置WSGR,可分别为片外存储器和I/O端口设置CPU的等待时间。
在程序调试过程中,若程序随机运行,或仿真软件调试窗口出现 "Time out waiting for device"红色告警字样时,而程序流程没有问题,则可能是DSP与外部慢速器件配合不正常,此时应重新设置等待状态寄存器,增加CPU等待外设的时间。由于例程中WSGR值均为0000h, 容易产生误导,使初学者误以为在任何情况下WSGR值均为0000h。笔者在调试程序时,曾遇到这个问题,后来不断调整WSGR的设置,终于使程序能够正常执行。在具体应用中,程序设计者应根据实际用到的片外资源设置WSGR的值,切忌盲从。
3.3 保留区域
编程时应注意设计中程序、数据存储器配置的地址映射,切记不能向任何保留地址写数据,否则将造成处理器的不可预测操作。F206程序存储器地址 FE00h~FEFFh(片外)为保留地址,数据存储器地址 0000h~005Fh、0080h~01FFH、0200h~02FFh(CNF=1时)和0400h~07FFh 均为保留地址。
3.4 中断资源
F206中断资源丰富,其0000h~003fh地址单元对应中断向量空间,每个中断矢量均为一条转移指令,该指令要求4个8bit字,因而中断向量空间可容纳32个中断矢量。对于程序设计中没有用到的向量空间,应填零以防意外。F206不支持中断嵌套,当它响应了某个硬件中断时,会自动将其中断标志位和中断允许位INTM置1(INTM为1,禁止所有中断),但在中断服务程序结束后不会自动将二者清零。因此,在中断服务程序结束前,应先将这两个标志位清零,否则DSP将无法正常响应中断。注意,DSP中向标志位写入1才能对标志位清零,并且应先清 除中断标志位,然后再对中断允许位INTM清零。
若某一中断客观存在,而程序中又无相应的中断服务程序,则会导致程序紊乱。如在中断屏蔽寄存器(IMR)中将异步串行口的传送/接收中断打开,此时若异步串行口控制寄存器(ASPCR)把传送或接收中断屏蔽,此时仍会产生中断,只是写入异步数据发送和接收寄存器(ADTR)或读ADTR的值为零,因而编程时还要对ADTR进行读或写处理,而不能只是简单地清除其中断标志位和中断允许位后返回。笔者曾因这个问题耗时多日,程序调试总不能得到正确的结果,后编写了相应的中断服务程序后,再进行调试终于得到了正确结果。
NMI中断可用作软件复位,但因为中断矢量仅仅是一条转移指令,因而它既不中止存储器操作也不初始化状态位。如果要求DSP重新对 外围器件设置,则利用NMI软件复位不能满足要求。根据实际,笔者设计了一个利用NMI中断硬件复位DSP的电路。
|
|
|
|
|
|
- UID
- 13997
- 性别
- 男
|
在NMI中断服务程序中,DSP给PO6口一个正脉冲即可使DSP复位,但应注意新增电路中的RC时间常数应小于DSP原有复位电路的RC时间常数,以免影响DSP正常复位。
3.5 数据页DP
在所有程序中必须初始化DP。初始化DP非常重要,复位不能初始化DP,DP是不确定的。没有初始化DP的程序就不能正确执行。另外,在编程时应注意:(1)DSP对片内存储区的访问比片外存储器要快,因此应将经常使用的数据分配至片内存储空间,以提高数据处理速度。
(2)尽可能采用直接寻址方式,这样可在提供较大数据访问能力的同时,提高指令速度,这种寻址方式具有128字的寻址能力,但寻址范围是指定DP下的128字。当程序复杂特别是有中断存在的情况下,改变DP的值很容易造成程序的混乱。基于此考虑一般将DP的值固定不变,尽可能合理地在各功能模块间分配这128个高效且使用方便的存储单元。应特别注意的是,如果DP的值不为零, 在对IFR、IMR等操作时,应先将DP的值置零,在操作完成后再将DP的值还原,这是因为IFR、IMR的地址都是DP为零的相对地址。另外,在中断程序入口如果使用直接寻址方式保存状态寄存器的值,那么在中断返回之前装载所保存的值时,也应先将DP的值设为零,否则程序将无法正常运行。
3.6 内置闪速存储器(Flash)
F206的一个显著优势是具备32K x 16位的片内闪速存储器,它具有可擦除、可编程和非易失电源等特点。在复位期间,通过将MP/MC置为低电平可选择闪存。利用JTAG接口向目标系统下载程序包括:Flash的清零(clear,所有位清零)、擦除(erase,所有位置1)及编程。其片内Flash由两块相对独立的16KB Flash分别进行。F206运算速度有20、28.5和40MIPS,但程序代码成功烧录进片内Flash的前提条件是其工作于20MIPS,否则程序无法烧录进DSP。另外应将NMI中断相应引脚拉高,否则由JTAG将程序代码烧录进Flash时会出现错误提示,使烧录无法完成。
笔者在调试程序时曾遇到这样的情况,程序在仿真时可以正常运行,烧录到Flash后却无法运行了。原因是上电时DSP外围芯片复位时间长于DSP的启动时间,后来尝试着在程序初始化之前插入一段延时(约为几十ms),重新烧录后程序执行正常。
DSP技术的发展越来越成熟,DSP的应用也日益广泛。了解和掌握DSP技术,并应用DSP技术开发新一代高科技产品十分必要。本文介绍的DSP开发中应注意的几个问题,可以大大缩短开发时间,仅供读者参考。
|
|
|
|
|
|
- UID
- 149046
- 性别
- 男
|
|
|
|
|
|