TMS320C2XX开发设计中应注意的问题
3.2 设置等待状态寄存器
对高速的DSP而言,它的读操作从地址稳定到数据有效仅需几十ns的时间,而DSP外设的速度则参差不齐。为了解决高速DSP与低速外设在速度上的冲突,在高速的DSP与存储器等外设的接口之间,等待状态的设计是一个关键的问题。若DSP不能与外设很好配合,则会导致程序执行结果出错。F206内置一个软件可编程等待状态寄存器(WSGR),通过设置WSGR,可分别为片外存储器和I/O端口设置CPU的等待时间。
在程序调试过程中,若程序随机运行,或仿真软件调试窗口出现“Time out waiting for device”红色告警字样时,而程序流程没有问题,则可是DSP与外部慢速器件配件不正常,此时应重新设置等待状态寄存器,增加CPU等待外设的时间。由于例程[2]中WSGR值均为0000h,容易产生误导,使初学者误以为在任何情况下WSGR值均为0000h。笔者在调试程序时,曾遇到这个问题,后来不断调整WSGR的设置,终于使程序能够正常执行。在具体应用中,程序设计者应根据实际用到的片外资源设置WSGR的值,切忌盲从。
3.3 保留区域
编程时应注意设计中程序、数据存储器配置的地址映射,切记不能向任何保留地址写数据,否则将造成处理器的不可预测操作。F206程序存储器地址FE00h~FEFFh(片外)为保留地址,数据存储器地址0000h~0005Fh、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进行读或写处理,而不能只是简单地清除其中断标志位和中断允许位后返回。笔者曾因这个问题耗时多日,程序调试总不能得到正确的结果,后编写入相应的中断服务程序后,再进行调试终于得到了正确结果。(凹丫丫范文网fanwen.oyaya.net收集整理)
NMI中断可用作软件复位,但因为中断矢量仅仅是一条转移指令,因而它既不中止存储器操作也不初始化状态位。如果要求DSP重新对外围器件设置,则利用NMI软件复位不能满足要求。根据实际,笔者设计了一个利用NMI中断硬件复位DSP的电路,如图1所示。
在NMI中断服务程序中,DSP给PO6口一个正永冲即可使DSP复位,但应注意新增电路中的RC时间常数应小于DSP原有复位电路的RC时间常数,以免影响DSP正常复位。
3.5 数据页DP
在所有程序中必须初始化DP。初始化DP非常重要,复位不能初始化DP,并且上电时,DP是不确定的。没有初始化DP的程序就不能正确执行。另外,在编程时应注意:①DSP对片内存储区的访问比片外存储区要快,因此应将经常使用的数据分配至片内存储空间,以提高数据处理速度。②尽可能采用直接寻址的寻址方式,这样可在提供大数据访问能力的同时,提高指令速度。这种寻址方式具有128字节的寻址能力,但寻址范围是指定DP下的128字。当程序复杂特别是在中断存在的情况下,改变DP的值很容量造成程序的混乱。基于此考虑一般将DP的值固定不变,尽可能合理地在各功能模块间分配这128个高效且使用方便的存储单元。应特别注意的是,DP的值置零,在操作完成后再将DP的值还原,这是因为IFR、IMR的地址都是DP为零的相对地址。另外,在中断程序入口如果使用直接寻址方式保存状态寄存器的值,那么在中断返
《TMS320C2XX开发设计中应注意的问题(第3页)》