<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 基于DSP的嵌入式 FIFO 數據傳輸系統設計

基于DSP的嵌入式 FIFO 數據傳輸系統設計

作者: 時(shí)間:2012-03-19 來(lái)源:網(wǎng)絡(luò ) 收藏

嵌入式設備由于具有硬件可在線(xiàn)配置,實(shí)現靈活等特點(diǎn),使得其應用越來(lái)越廣泛。尤其在基于FPGA的硬件系統中應用較多,目前在許多產(chǎn)品中實(shí)現了嵌入式網(wǎng)口、嵌入式PCI/PCI-E、嵌入式USB等各種模塊。但在中實(shí)現嵌入式設備還比較少,一般都直接集成這些設備模塊,用戶(hù)選擇不同型號的芯片以滿(mǎn)足產(chǎn)品應用要求。但對于一些較為特殊的嵌入式設備,DSP也可以實(shí)現該功能。

本文引用地址:http://dyxdggzs.com/article/257636.htm

TI公司的DSP芯片C6727B,由于其片內集成dMAX模塊,使得實(shí)現嵌入式成為可能。其實(shí)現嵌入式的本質(zhì)就是將DSP的片內一段RAM空間設置成空間,FIFO和外部設備的數據交換由EMIF接口完成。該FIFO的數據讀寫(xiě)不需要DSP的CPU參與,從而提高整個(gè)系統性能,實(shí)現數據交換和數據處理的同時(shí)進(jìn)行。本文以dMAX和EMIF接口的為例,介紹嵌入式FIFO的設計、配置及其使用。

dMAX及其結構

dMAX(Dual Data Movement Accelerator,雙向加速器)是TI公司的DSP芯片C6727B特有的一種片內設備。應用dMAX和EMIF(External Memory Interface,外部存儲器接口)可以實(shí)現片內RAM、片內和片外設備以及兩個(gè)片外設備之間的。dMAX模塊的內部結構如圖1所示。

圖1 dMAX內部結構圖

從圖中可以看出,dMAX主要由事件和中斷處理模塊、事件編碼器、傳輸事件模塊等組成。事件模塊分成高優(yōu)先級和低優(yōu)先級兩個(gè)相互獨立的模塊,各自有獨立的事件入口和事件參數表,和CPU有獨立的接口。使得dMAX可以同時(shí)處理兩個(gè)不同的事件。當訪(fǎng)問(wèn)CPU端口時(shí),MAX0的優(yōu)先級高,MAX1的優(yōu)先級低。dMAX能夠通過(guò)執行先進(jìn)的一維、二維與三維數據的存儲器傳輸工作,從而使DSP得以專(zhuān)注于信號處理任務(wù),顯著(zhù)提高系統性能。適合圖像的子幀提取或者語(yǔ)音信號的子信道提取。

DSP內部的數據交換中心在dMAX的控制下,可以實(shí)現片內RAM、EMIF以及HPI接口之間的數據交換。本文介紹在dMAX控制下,實(shí)現片內RAM和EMIF接口之間的數據交換。如果DSP采用普通的異步接口方式,數據傳輸需要建立、選通和保持3個(gè)階段,最少需要5個(gè)EMIF時(shí)鐘(建立和保持各1個(gè)時(shí)鐘,選通3個(gè)時(shí)鐘)。為了保證通信的可靠性,一般采用10個(gè)EMIF時(shí)鐘(建立3個(gè)時(shí)鐘,保持2個(gè)時(shí)鐘,選通5個(gè)時(shí)鐘)。而EMIF時(shí)鐘最快為133MHz;這樣,采用異步接口的通信速率一般為13.3M×32b/s(采用32位數據總線(xiàn)寬度)。此外,異步接口數據傳輸必須在CPU的參與下,使用指令實(shí)現數據搬移。將占用大量的CPU開(kāi)銷(xiāo),在很多高速的數據采集和處理中,將降低系統的整體性能。為此,采用dMAX實(shí)現嵌入式FIFO數據傳輸克服異步傳輸的缺點(diǎn),其傳輸采用突發(fā)讀寫(xiě)方式進(jìn)行,可以連續突發(fā)讀寫(xiě)8個(gè)數據,一共只需要20個(gè)時(shí)鐘,通信速率提高為53.2M×32b/s,提高4倍讀寫(xiě)速率。還可以采用和DMA后臺運行,這樣將大大降低整個(gè)系統數據讀寫(xiě)的開(kāi)銷(xiāo),從而可以實(shí)現更加復雜和可靠的算法處理。

嵌入式FIFO設計

嵌入式FIFO的設計主要就是控制FIFO的7個(gè)參數。這7個(gè)參數分別為基地址、空間大小、空標志、滿(mǎn)標志、錯誤標志、讀指針和寫(xiě)指針。它們之間的關(guān)系如圖2所示。

圖2 FIFO結構示意圖

基地址和空間大小用于規劃出一段內存空間,該內存空間用于FIFO設備,并被FIFO設備保護起來(lái),使得其他設備和程序不能訪(fǎng)問(wèn)該空間。為了便于操作方便,空間大小一般為2的整數次冪,但不做要求。具體到C6727B型號的DSP,空間大小最大為1M個(gè)元素,元素大小可以是8位、16位或者32位數據,不能為其他類(lèi)型的數據?;刂房梢詾閮却婵臻g的任何一個(gè)地址,同樣為了操作方便,一般為空間大小的邊界點(diǎn)。例如,8個(gè)元素的FIFO,其基地址一般為XXXXX000b,也就是地址的低3位為0,基地址就肯定為8的整數次。同樣,64個(gè)元素的FIFO,其低6位為0?;刂泛涂臻g大小的特殊要求避免訪(fǎng)問(wèn)時(shí)的地址跨越多頁(yè)問(wèn)題,可以提高FIFO的訪(fǎng)問(wèn)速度。

空標志和滿(mǎn)標志用于表示FIFO的存儲狀態(tài)。讀指針和寫(xiě)指針用于表示讀寫(xiě)的當前地址。錯誤標志表示對FIFO的錯誤操作。當FIFO處于滿(mǎn)標志情況下仍然寫(xiě)FIFO,或者FIFO處于空標志情況下仍然讀FIFO,FIFO都將終止當前操作,并將錯誤標志置位。

FIFO的寫(xiě)操作只有一種工作方式,即每次寫(xiě)一個(gè)新的數據,寫(xiě)指針加1,直到寫(xiě)滿(mǎn)。而FIFO讀操作有兩種工作方式,分別為標準操作和多階延遲(Multi-tap Delay Transfer)操作。標準操作和寫(xiě)操作一樣。多階延遲操作一般用于濾波處理,當需要對輸入信號進(jìn)行濾波處理時(shí)候,每次希望從FIFO讀取一段窗口的數據,進(jìn)行濾波處理,數據窗口仍然只移動(dòng)一個(gè)數據。在標準操作情況下,如果讀取一段窗口的數據,FIFO則將該段窗口的數據全部彈出。多階延遲操作則只彈出一個(gè)數據。該操作方法對語(yǔ)音或者AD采樣數據的平滑、FIR等濾波非常適用。需要注意的是,多階延遲操作的數據窗大小需要設置,如果FIFO存儲的數據個(gè)數小于數據窗,FIFO則終止當前操作,并給出錯誤標志。

系統硬件結構

C6727B和其他DSP有一個(gè)較大的區別,就是C6727B不再提供專(zhuān)門(mén)的外部中斷引腳,而是采用GPIO引腳和dMAX配合使用,通過(guò)寄存器的設置將GPIO引腳配置成外部中斷引腳。本文為了實(shí)現FIFO的實(shí)時(shí)操作,一旦外設向FIFO寫(xiě)入數據,即發(fā)出中斷信號到DSP的CPU,通知CPU讀取數據。為此,需要使用1個(gè)外部中斷引腳,將C6727B的音頻串口的AXR[8]配置成通用的GPIO引腳,并在dMAX中設置成中斷引腳。此時(shí)需要將音頻串口的CONFIGMACSP0寄存器設置為0x0001,如圖3所示。此時(shí)音頻串口不能再作為普通的音頻口使用,而是配置成IO接口。

圖3 中斷功能設置框圖

從圖3中可以看出,配置好音頻串口后,一旦AXR[8]引腳有上升沿到,則McASP0激活dMAX的事件26,向CPU發(fā)送內部中斷13。McASP的與中斷相關(guān)的寄存器配置是實(shí)現以上方案的重點(diǎn)。使用PFUNC寄存器將其配置成通用IO引腳;PDIR寄存器控制IO引腳的方向;如果是輸出引腳則由POUT引腳輸出高低電平,如果是輸入引腳,則由PDIN寄存器讀出該引腳的狀態(tài);此外,可以使用PDCLR和PSET寄存器清除或者設置輸出引腳的狀態(tài)。

系統軟件設計

系統軟件設計主要包括McASP的初始化、dMAX的初始化、FIFO的初始化、中斷使能等。系統主程序只需要等待中斷進(jìn)行相應的處理,主要的數據傳輸工作都是dMAX按照軟件配置自動(dòng)完成,不需要CPU參與。圖4是實(shí)現由外設寫(xiě)FIFO,DSP讀取FIFO數據的流程。圖中虛線(xiàn)部分表示由dMAX獨立完成的工作,實(shí)線(xiàn)部分表示由CPU完成的工作。兩者之間通過(guò)內部中斷方式實(shí)現狀態(tài)的交流。

圖4 系統軟件流程

為了提高FIFO的讀寫(xiě)速率,一般采用突發(fā)方式進(jìn)行讀寫(xiě)。突發(fā)方式的讀時(shí)序如圖5所示。寫(xiě)時(shí)序和讀時(shí)序類(lèi)似。突發(fā)方式一次最多只能讀寫(xiě)8個(gè)數據,也可以一次突發(fā)讀寫(xiě)4個(gè)或者2個(gè)數據。突發(fā)讀寫(xiě)時(shí)數據的建立和保持時(shí)間最少可以設置成1個(gè)時(shí)鐘周期,如圖中所示。但為了通信可靠,一般采用2個(gè)時(shí)鐘周期。突發(fā)方式最大的節省時(shí)間是連續的其他數據將不再需要建立和保持周期,而是直接進(jìn)行讀寫(xiě),一般只需要兩個(gè)時(shí)鐘周期就可以完成一個(gè)數據的讀寫(xiě)。最快情況下,突發(fā)讀寫(xiě)8個(gè)數據只需要20個(gè)時(shí)鐘周期,讀寫(xiě)速率達到53.2M×32b/s,滿(mǎn)足大部分設備的要求。

圖5 突發(fā)讀時(shí)序圖

總結

dMAX的特有結構使得其可以實(shí)現嵌入式FIFO。本文介紹了基于C6727B的dMAX的基本結構以及基于dMAX的嵌入式FIFO軟硬件設計,設置通用GPIO引腳作為中斷,為了加快FIFO的傳輸速率,使用突發(fā)讀寫(xiě)方式進(jìn)行數據傳輸。嵌入式FIFO的實(shí)現,使得DSP和外部設備的通信更加方便和快捷,而且不需要CPU的參與,減輕了CPU的負擔,CPU可以專(zhuān)注于復雜的算法處理。




關(guān)鍵詞: DSP FIFO 數據傳輸

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>