摘 要:通過使用IDT70261 雙端口RAM 實現(xiàn)了ARM 與TMS320C6211 DSP 之間的高速實時數(shù)據(jù)通信,給出了雙端口RAM 與TMS320C6211 和ARM 的硬件連接圖和ARM 驅(qū)動編寫細節(jié)。
后PC 時代,由于網(wǎng)絡技術(shù)和集成電路技術(shù)的迅速發(fā)展,利用嵌入式系統(tǒng)進行數(shù)字信號處理與傳輸成為可能。在ARM 和DSP 構(gòu)成的雙處理器系統(tǒng)中,嵌入式作為主設備,主要完成數(shù)據(jù)處理、存儲與網(wǎng)絡傳輸工作,而DSP 作為從設備需要負責復雜的算法實現(xiàn)。
在此高速數(shù)據(jù)采集和處理系統(tǒng)中,隨著采樣數(shù)據(jù)量的增大和處理任務的增加,對數(shù)據(jù)的傳送要求越來越高,如果在兩個系統(tǒng)端口之間沒有能夠高速傳送數(shù)據(jù)的接口,將會造成數(shù)據(jù)傳送的阻塞,嚴重影響系統(tǒng)的實時性與處理數(shù)據(jù)的能力,因此此系統(tǒng)設計的重點之一是主從設備之間的數(shù)據(jù)通信。本文介紹用雙端口RAMIDT70261 完成TMS320C6211DSP 與嵌入式ARM920T之間的數(shù)據(jù)通信。
1 IDT70261雙端口RAM功能簡介
IDT70261 是美國IDT 公司生產(chǎn)的高速16K&TImes;16 的雙端口SRAM,其典型功耗為750mW,它具有兩個等級的存取時間:商業(yè)級有 15/20/25/35/55 ns (max),工業(yè)級有20/25/35/55ns (max)。雙端口RAM 有兩個完全獨立的端口,它們各自有一套相應的數(shù)據(jù)總線、地址總線和控制總線,允許兩個控制器單獨或異步的讀寫其中任意一個存儲單元。兩個端口具有同樣的對雙端口RAM 的讀寫操作能力,但是當兩個端口同時對同一地址進行讀寫操作時,會因為數(shù)據(jù)的沖突而造成存儲或讀取的錯誤。對同一存儲單元的操作存在以下四種情況:
?。?) 兩個端口不同時對同一地址單元進行讀寫數(shù)據(jù)。
?。?) 兩個端口同時對同一地址單元進行讀出數(shù)據(jù)。
?。?) 兩個端口同時對同一地址單元進行寫入數(shù)據(jù)。
?。?) 兩個端口同時對一個地址單元,一個寫入數(shù)據(jù),另一個讀出數(shù)據(jù)。
前兩種情況不會造成對雙端口RAM的讀寫錯誤,第三種情況會造成寫入數(shù)據(jù)的錯誤,第四種情況會造成讀出錯誤。為了避免對雙端口RAM 造成讀寫錯誤,IDT70261 有以下幾種仲裁控制方法。
1.1 遇忙邏輯控制
當雙端口同時對同一地址單元進行控制時,IDT70261 提供一種/BUSY 控制機制。雙端口不對同一地址單元進行控制時,兩個端口的/BUSY 引腳都為高,左右兩個端口均可正常訪問存儲空間。當兩個端口對同一地址單元進行存取時,一個端口的/BUSY 引腳為高(允許對存儲空間的讀寫操作),另一個端口的引腳為低(禁止對存儲空間的讀寫操作),哪一個請求信號在前,其端口引腳為高,另一個為低。兩個端口請求讀寫的時間差最小為5ns,當時間小于5ns 時,系統(tǒng)會自動允許一個引腳讀寫,屏蔽另外一個引腳,防止出現(xiàn)對同一地址單元的讀寫錯誤。
1.2 中斷控制機制
IDT70261 具有中斷輸出功能,中斷工作時,雙端口RAM 的兩個最高地址單元3FFE、3FFF 作為“郵箱”來傳遞相應的命令。當中斷功能不使用時,3FFE、3FFF兩個單元作為正常的存儲單元使用。下面介紹中斷工作原理。
左端口寫地址單元3FFF,/INTR 變?yōu)橛行Вǖ碗娖剑?,向右端口發(fā)送中斷請求,右端口響應中斷請求后,可向3FFF 地址單元執(zhí)行一次讀操作,清除中斷標志(/INTR 變?yōu)楦唠娖剑M?,右端口寫地址單?FFE,/INTL 變?yōu)橛行Вǖ碗娖剑?,向左端口發(fā)送中斷請求,左端口響應中斷請求后,可向3FFE 地址單元執(zhí)行一次讀操作,清除中斷標志(/INTL 變?yōu)楦唠娖剑?/p>
1.3 令牌傳遞原理
IDT70261 內(nèi)部有8 個獨立于雙端口RAM 的邏輯鎖存單元,用來標明共享的雙端口RAM 是否正在使用。在此工作模式下,/SEM 用作鎖存器的“片選”信號,地址線A2~A0 用來尋址8 個標志鎖存器,數(shù)據(jù)線D0用來標志鎖存器的狀態(tài)。
端口向鎖存器寫入0 表示申請控制權(quán),寫入1 表示放棄使用權(quán)。當左端口要使用雙端口RAM 時,先寫入0 到標志鎖存器,然后讀出標志鎖存器的狀態(tài),若讀出的值為0,則左端口獲得該存儲單元的使用權(quán);若讀出的值為1,表明右端口正在使用該存儲單元。
此時,左端口要么循環(huán)檢測鎖存器狀態(tài),直到右端口使用結(jié)束,要么向鎖存器寫入1,撤銷請求。同理,若右端口使用雙端口RAM 時,仍按照上述步驟進行操作[1,2]。