1 引言
數(shù)字信號處理器(DSP)是一種適合于實現(xiàn)各種數(shù)字信號處理運算的微處理器,具有下列主要結(jié)構(gòu)特點:(1)采用改進型哈佛(Harvard)結(jié)構(gòu),具有獨立的程序總線和數(shù)據(jù)總線,可同時訪問指令和數(shù)據(jù)空間,允許實際在程序存儲器和數(shù)據(jù)存儲器之間進行傳輸;(2)支持流水線處理,處理器對每條指令的操作分為取指、譯碼、執(zhí)行等幾個階段,在某一時刻同時對若干條指令進行不同階段的處理;(3)片內(nèi)含有專門的硬件乘法器,使乘法可以在單周期內(nèi)完成;(4)特殊的指令結(jié)構(gòu)和尋址方式,滿足數(shù)字信號處理FFT、卷積等運算要求;(5)快速的指令周期,能夠在每秒鐘內(nèi)處理數(shù)以千萬次乃至數(shù)億次定點或浮點運算;(6)大多設(shè)置了單獨的DMA總線及其控制器,可以在基本不影響數(shù)字信號處理速度的情況下進行高速的并行數(shù)據(jù)傳送。
由一片DSP加上存儲器、模/數(shù)轉(zhuǎn)換單元和外設(shè)接口就可以構(gòu)成一個完整的控制系統(tǒng),但這種方案要達到高速實時控制是不可行的。因為一個實時控制系統(tǒng)一般需要完成數(shù)據(jù)采集、模/數(shù)轉(zhuǎn)換、分析計算、數(shù)/模轉(zhuǎn)換、實時過程控制以及顯示等任務(wù),單靠一片DSP來完成這些工作勢必會大大延長系統(tǒng)對控制對象的控制周期,從而影響整個系統(tǒng)的性能。所以我們添加一個CPU,負責(zé)數(shù)據(jù)采集、模/數(shù)轉(zhuǎn)換、過程控制以及人機接口等任務(wù),使DSP專注于系統(tǒng)控制算法的實現(xiàn),充分利用它的高速數(shù)據(jù)處理能力。從性能價格比的角度出發(fā),這個CPU采用8位的51系列單片機。這時,兩個CPU之間的數(shù)據(jù)共享就成了一個重要的問題。
采用雙口RAM(簡稱DRAM)是解決CPU之間的數(shù)據(jù)共享的有效辦法。與串行通信相比,采用雙口RAM不僅數(shù)據(jù)傳輸速度高,而且抗干擾性能好。在筆者實驗室研制的電力有源濾波器中,選用了TI公司的第三代DSP芯片TMS320C32和51系列單片機89C52作為控制系統(tǒng)的CPU。兩個CPU之間通過雙口RAM CY7C133完成數(shù)據(jù)交換。但在實際使用過程中遇到了89C52 與雙口RAM總線寬度不匹配的問題,需要進行接口電路的設(shè)計。
2 雙口RAM CY7C133的內(nèi)部結(jié)構(gòu)和功能
CY7C133是CYPRESS公司研制的高速2K×16CMOS雙端口靜態(tài)RAM,具有兩套相互獨立、完全對稱的地址總線、數(shù)據(jù)總線和控制總線,采用68腳 PLCC封裝形式,最大訪問時間可以為25/35/55 ns。采用主從模式可以方便地將數(shù)據(jù)總線擴展成32位或更寬。各引腳的功能如表1所示,內(nèi)部功能框圖如圖1所示。
CY7C133允許兩個CPU同時讀取任何存儲單元(包括同時讀同一地址單元),但不允許同時寫或一讀一寫同一地址單元,否則就會發(fā)生錯誤。雙口RAM中引入了仲裁邏輯(忙邏輯)電路來解決這個問題:當(dāng)左右兩端口同時寫入或一讀一寫同一地址單元時,先穩(wěn)定的地址端口通過仲裁邏輯電路優(yōu)先讀寫,同時內(nèi)部電路使另一個端口的信號有效,并在內(nèi)部禁止對方訪問,直到本端口操作結(jié)束。BUSY信號可以作為中斷源指明本次操作非法。在主從模式中,主芯片的信號接上拉電阻作為輸出,從芯片的信號作為寫禁止輸入。
3 DSP、單片機與雙口RAM之間的接口電路
89C52的地址總線寬度為16位,數(shù)據(jù)總線為8位;TMS320C32的數(shù)據(jù)總線寬度為32位,地址總線寬度為24位。而CY7C133的數(shù)據(jù)總線寬度為16位,地址總線寬度為11位,所以TMS320C32與雙口RAM的接口并無特別之處,但是89C52與雙口RAM之間的接口電路中就需要對89C52進行總線擴展了。具體做法是利用鎖存器74HC373的鎖存功能,通過對其使能信號的控制,進行分時讀寫,實現(xiàn)數(shù)據(jù)總線的擴展,即利用鎖存器作為虛擬總線。具體的讀寫過程、讀寫信號及鎖存器使能信號的產(chǎn)生將在下面詳細說明。DSP、單片機與雙口RAM之間的接口電路如圖2所示。[!--empirenews.page--]
TMS320C32分配給雙口RAM的地址空間為0x800000h~0x8007FFh。通過三八譯碼器74HC138對A20~A23和STRB進行譯碼,給出雙口RAM的片選信號CER。89C52分配給雙口RAM的地址空間為0x1000h~0x1FFFh。通過二四譯碼器74HC139對A13~A15進行譯碼產(chǎn)生雙口RAM的片選信號CEL。雙口RAM每邊都有兩個讀/寫控制信號,分別控制高位字節(jié)和低位字節(jié)的讀/寫,在使用時可以根據(jù)需要分別對數(shù)據(jù)的高位和低位進行寫入操作。在圖2所示接口電路中,兩邊的兩個讀/寫控制信號分別被連接在一起,也就是說此時雙口RAM的讀寫都是同時讀寫16位數(shù)據(jù)。
圖2中雙口RAM CY7C133的讀寫信號以及鎖存器74HC373的使能信號的產(chǎn)生如圖3所示。其中,WR是89C52的寫控制信號,RD是89C52的讀控制信號,A0是89C52的地址最低位,A15是地址最高位,R/W是TMS320C32的讀寫控制信號,BUSYL接89C52的P1口的一個引腳(具體可根據(jù)系統(tǒng)實際情形自行選擇,圖中未畫出),BUSYR接TMS320C32的READY信號。
下面討論一下89C52對雙口RAM的讀寫過程。當(dāng)89C52對雙口RAM進行讀數(shù)據(jù)時,由圖3可知此時A0應(yīng)為低電平,不妨假設(shè)地址為0x1000h,則存儲在雙口RAM中該地址處的16位數(shù)據(jù)同時被讀出,由于高8位數(shù)據(jù)線與89C52的8位數(shù)據(jù)線直接相連,所以高8位數(shù)據(jù)被立即讀入89C52中。同時,根據(jù)圖3中各信號的相互邏輯關(guān)系不難判斷,U3的使能信號LE有效(高電平),OE無效(低電平),因而低8位數(shù)據(jù)被送入U3 中鎖存起來。接著89C52再進行一次讀操作,這時地址變?yōu)?x1001h,由于A0變成高電平,雙口RAM的讀使能信號變成無效電平,所以此次讀操作對雙口RAM不產(chǎn)生影響。再來看U3的使能信號LE和OE的變化情況,顯然LE變成了無效電平,而OE變成了有效電平,上次被鎖存的數(shù)據(jù)(即雙口RAM的低8位數(shù)據(jù))被送入89C52。當(dāng)89C52對雙口RAM進行寫入操作時,注意此時A0應(yīng)為高電平,不妨假設(shè)地址為0x100Ch,同樣可根據(jù)圖3判斷U2的使能信號LE和OE均為有效電平,因而數(shù)據(jù)被同時寫入雙口RAM中(即此時雙口RAM的高8位數(shù)據(jù)和低8位相同);接著89C52再進行一次寫操作,此時地址變?yōu)?x100Dh,由于A0變成低電平,U2的片選為無效電平,U2被封鎖,數(shù)據(jù)寫入雙口RAM的高8位。從上面的分析可知,利用最低地址位A0的不同電平,89C52通過兩次連續(xù)的讀或?qū)懖僮?,成功地實現(xiàn)了對雙口RAM中數(shù)據(jù)的讀或?qū)?,只不過是讀入時是先讀入高8位,后讀入低8位;而寫入則是先寫入低8位,后寫入高8位。
4 軟件實現(xiàn)方案
雙口RAM必須采用一定的機制來協(xié)調(diào)左右兩邊CPU對它的讀寫操作,否則會出現(xiàn)讀寫數(shù)據(jù)的錯誤。通??梢杂弥袛唷⒂布⒘钆坪蛙浖@四種方式來協(xié)調(diào)雙方,本文采用的是軟件方式。從上面的分析中我們可以得知,在接口電路中實際上已經(jīng)利用89C52的最低地址位A0把雙口RAM的存儲空間分為奇、偶地址兩個空間。其中,奇地址空間專供89C52寫,偶地址空間專供89C52讀。那么我們只需對TMS320C32的軟件作相應(yīng)處理即可,也就是說,TMS320C32對雙口RAM的奇地址空間只讀,對偶地址空間只寫。這樣就避免了TMS320C32和89C52對雙口RAM同一地址單元的寫入操作。另外,在對雙口RAM進行訪問之前,CPU首先對本端的BUSY信號進行查詢,只有本端/BUSY信號無效時才進行讀寫操作,進一步保證了數(shù)據(jù)讀寫的可靠性。
5 結(jié)束語
通過雙口RAM實現(xiàn)雙CPU之間的數(shù)據(jù)通信,極大地提高了數(shù)據(jù)傳輸速度和可靠性,滿足了控制系統(tǒng)的實時、高速的控制要求。本文所設(shè)計的89C52與雙口RAM之間的接口電路簡單實用,成功解決了它們總線匹配的問題,對其他類似需要總線擴展的系統(tǒng)也有一定的參考價值。