<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 用FIFO實現(xiàn)DSP間的雙向并行異步數(shù)字通信

          用FIFO實現(xiàn)DSP間的雙向并行異步數(shù)字通信

          作者: 時間:2013-02-01 來源:網(wǎng)絡(luò) 收藏

          在多CPU的分布式信號處理系統(tǒng)中,往往涉及CPU間的通訊與數(shù)據(jù)交換,大數(shù)據(jù)量的數(shù)據(jù)傳輸一般采用DMA方式,而小數(shù)據(jù)量的數(shù)據(jù)交換采用接口則比較快速靈活。因此,對于傳輸速度要求較高的間的小數(shù)據(jù)量的數(shù)據(jù)交換及通訊來說,要提高的工作效率,不僅要求接口的響應(yīng)快,而且必須采用方式以免相互等待。本文介紹了采用CYPRESS公司的芯片CY7C419來間的通訊接口。該方法不僅比用TTL鎖存器的方式速度快,而且譯碼邏輯簡單,另外,由于芯片有一定的深度(256個),因此,在少于256個數(shù)據(jù)傳輸時,可零等待時間。

          本文引用地址:http://www.ex-cimer.com/article/148110.htm

          1 芯片簡介

          全滿(FF)和全空(EF)標志用以防止數(shù)據(jù)溢出或不足;

          擴展輸入(XI)、擴展輸出(X0)、首次裝載(FL):用以無限的寬度及深度擴展,深度擴展技術(shù)可使操縱控制信號從一個元件并行傳至另一個元件,因而消除了傳輸延遲的串行附加,其最高讀、寫速度可達50MHz,讀寫信號低電平有效;

          當(dāng)CY7C419獨立使用或多片實現(xiàn)寬度擴展結(jié)構(gòu)時,半空標志(HF)輸出有效,在深度擴展結(jié)構(gòu)中,該此腳輸出擴展輸出信息(XO)并告知下一個FIFO;

          D0~D8為數(shù)據(jù)輸入,Q0~Q8為數(shù)據(jù)輸出。

          R、W及MR分別為讀、寫及復(fù)位信號的輸入端,它們均為低電平有效。

          2 硬件結(jié)構(gòu)與通訊流程

          2.1 硬件結(jié)構(gòu)

          利用FIFO實現(xiàn)DSP間并行通訊的結(jié)構(gòu)原理如圖2所示。DSP56001和ADSP21020分別樹熊美國Motorola和ADI公司的DSP芯片。兩個CY7C419芯片U1、U2分別用于DSP56001和ADSP21020間并行接口的一個方向,其中U1用于完成DSP56001向ADSP21020的數(shù)據(jù)傳送,U2則用于完成ADSP21020向DSP56001的數(shù)據(jù)傳送。U1的全滿標志(FF)與U2的全空標志(EF)通過緩沖器74LS245與DSP56001的數(shù)據(jù)總線相連,該緩沖器被映射為DSP56001數(shù)據(jù)區(qū)的一個地址單元(0x600),因此,DSP56001通過對該地址單元的讀操作便可獲知U1是否已寫滿以及U2是否有數(shù)所要讀。同理,U2的全志(FF)與U1的全空標志(EF)通過一緩沖器74LS245連于ADSP21020的數(shù)據(jù)總線,該片74LS245補映射為ADSP21020數(shù)據(jù)區(qū)的一個地址單元(身份地址+0x100000),這樣ADSP21020通過對該地址單元的讀操作也可獲知U2是否已寫滿以及U1是否有數(shù)據(jù)要讀。另外,DSP56001對U1的寫操作、對U2的讀操作映射為對其數(shù)據(jù)存儲區(qū)一個地址單元(0x200)的寫、讀操作;而ADSP21020對U2的寫操作和對U1的讀操作則被映射為對其數(shù)據(jù)存儲區(qū)地址單元(身份地址+0x180000)的寫、讀操作。兩個DSP芯睡均可同時對U1、U2進行復(fù)位操作。

          DSP56001對雙向口的讀56FIFOR、寫56FIFOW、復(fù)位56FIFORST及對標志口狀態(tài)56FLGR的讀信號可由DSP56001的地址線與讀寫信號譯碼獲得;ADSP21020對雙向口的讀21FIFOR、寫21FIFOW、復(fù)位56FIFORST及對標志口狀態(tài)56FLGR的讀信號則可由ADSP21020的地址線與讀寫信號譯碼獲得。各譯碼輸出的邏輯表達式如下:

          56FIFOR=AdEn+Ma10+Ma9+MRD

          (映射地址為:0x200)

          56FIFOW=AdEn+Ma10+Ma9+MWR

          (映射地址為:0x200)

          56FIFOORST=AdEn+Ma10+Ma9+MWR

          (映射地址為:0x400)

          56FLGR=AdEn+Ma10+Ma9+MRD

          (映射地址為:0x600)

          AdEn=DS+Ma15+Ma14+Ma13+Ma12+Ma11

          21FIFOR=IDMAT+A21+A20+A19+RD

          (映射地址為:身份地址+0x180000)

          21FIFOW=IDMAT+A21+A20+A19+WR

          (映射地址為:身份地址+0x180000)

          FIFORST=(IDMAT+A21+A20+A19+WR)56FIFORST

          (映射地址為:身份地址+0x200000)

          21FLGR=IDMAT+A21+A20+A19+RD

          (映射地址為:身份地址+0x100000)

          為區(qū)分兩個DSP的讀、寫信號,在邏輯表達式中用MRD和MWR分別表示DSP56001的讀、寫信號RD和WR。ADSP21020作為主芯片同時與多個DSP56001(圖2僅畫出其中一個)相連,因此每一個DSP56001均有一個不同的身份地址,表示該身份地址的地址線(A25~A22)的譯碼結(jié)果為IDNAT。為簡化硬件電路,譯碼邏輯均采用PAL器件實現(xiàn)。

          2.2 軟件流程

          圖3所示為DSP56001對并口進行讀、寫數(shù)據(jù)的軟件流程。ADSP21020向DSP56001傳送數(shù)據(jù)及從并行口讀取由DSP56001傳送過來的數(shù)據(jù)步驟與上述流程相同。對DSP56001和ADSP21020來說,并行接口均為異步雙向口。當(dāng)DSP56001要向ADSP21020傳送數(shù)據(jù)時,首先讀狀態(tài)標志口(口地址0x600),若標志第0位為0(全滿),則重復(fù)讀狀態(tài)標志口,直至標志第0位為1(數(shù)據(jù)未滿,已被ADSP21020全部或部分讀出)時,DSP56001才向接口(地址0x200)寫入數(shù)據(jù);當(dāng)DSP56001要讀取由ADSP21020傳送過來的數(shù)據(jù)時,首先讀狀態(tài)標志口(口地址0x600),若標志第1位為0(全空),則重復(fù)讀狀態(tài)口,直至標志第1位為1時(不空,已郵ADSP21020寫入數(shù)據(jù)),DSP56001讀接口(地址0x200)即可獲得所需數(shù)據(jù)。

          該方法已成功應(yīng)用于一臺自動研制的基于DSP的實時模擬及被頻信號采集與處理系統(tǒng)。實際運行結(jié)果表明,該方法不僅速度較高,而且譯碼邏輯也十分簡單。

          數(shù)字通信相關(guān)文章:數(shù)字通信原理




          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();