高速數字信號處理器是當前信息產業的熱點技術之一,采用最先進的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)片內具有16位的閃速存儲器和16位的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仿真器即具有編程功能),進一步減少了開發成本,便于開發設計和產品的軟件升級。 2 硬件設計與調試 2.1 硬件設計時應注意的問題 F206硬件設計時,應重點注意以下幾點: (1)時鐘電路。DSP時鐘可由外部提供,也可由板上的振蕩器提供。但一般DSP系統中經常使用外部時鐘輸入,因為使用外部時鐘時,時鐘的精度高、穩定性好、使用方便。由于DSP工作是由時鐘為基準,如果時鐘質量不高,那么系統的可靠性、穩定性就很難保證。因此,若采用外部時鐘,選擇晶振時應對其穩定性、毛刺做全面的檢驗,以便DSP系統可靠地工作。 (2)復位電路。應同時設計上電復位電路和人工復位電路,在系統運行中出現故障時可方便地人工復位。對于復位電路,一方面應確保復位低電平時間足夠長,保證DSP可靠復位;另一方面應保證穩定性良好,防止DSP誤復位。 (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芯片的電阻。正常的DSP芯片的電阻為MΩ級,若被測芯片電阻明顯低于該值,則可斷定DSP芯片已被燒壞。 如果軟件調試窗口可調入程序,但調入的程序局部出錯,如對片外程序存儲器或數據存儲器操作的代碼變成了.word xxxx,此時可能是片外程序存儲器或數據存儲器出現故障。應仔細檢查器是否存在短路或虛焊,若不存在則應進一步判斷存儲器是否受損。本人曾遇到上述現象,后經仔細檢查,發現存儲器有引腳虛焊。 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~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進行讀或寫處理,而不能只是簡單地清除其中斷標志位和中斷允許位后返回。筆者曾因這個問題耗時多日,程序調試總不能得到正確的結果,后編寫入相應的中斷服務程序后,再進行調試終于得到了正確結果。 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為零的相對地址。另外,在中斷程序入口如果使用直接尋址方式保存狀態寄存器的值,那么在中斷返回之間裝載所保存的值時,也應先將DP的值設成零,否則程序將無法正常運行。 3.6 內置閃速存儲器(Flash) F206的一個顯著優勢是具備32K 16位的片內閃速存儲器,它具有可擦除、可編程和非易失電源等特點。在復位期間,通過將MP/MC置為低電平可選擇閃存。利用JTAG接口向目標系統下載程序包括:Flash的清零(clear,所有位清零)、擦除(erase,所有位置1)及編程。其片內Flash,由兩塊相對獨立的16KB Flash組成,因而每次清零、擦除需對兩塊16KB Flash分別進行。F206運算速度有20、28.5和40MIPS,但程序代碼成功燒錄進片Flash的前提條件是其工作于20MIPS,否則程序無法燒尋進DSP。另外應將NMI中斷相應引腳拉高,否則由JTAG將程序代碼燒錄進Flash時會出現錯誤提示,使燒錄無法完成。 筆者在調試程序時曾遇到這樣的情況,程序在仿真時可以正常運行,燒錄到Flash后卻無法運行了。原因是上電時DSP外圍芯片復位時間長于DSP的啟動時間,后來嘗試著在程序初始化之前插入一段延時(約為幾十ms),重新燒錄后程序執行正常。 DSP技術的發展越來越成熟,DSP的應用也日益廣泛。了解和掌握DSP技術,并應用DSP技術開發新一代高科技產品十分必要。本文介紹的DSP開發中應注意的幾個問題,可以大大縮短開發時間,僅供讀者參考。 |