dMAX及其結構
dMAX(Dual Data Movement Accelerator,雙向數(shù)據(jù)傳輸加速器)是TI公司的DSP芯片C6727B特有的一種片內(nèi)設備,。應用dMAX和EMIF(External Memory Interface,,外部存儲器接口)可以實現(xiàn)片內(nèi)RAM、片內(nèi)和片外設備以及兩個片外設備之間的數(shù)據(jù)傳輸。dMAX模塊的內(nèi)部結構如圖1所示,。
圖1 dMAX內(nèi)部結構圖
從圖中可以看出,,dMAX主要由事件和中斷處理模塊、事件編碼器,、傳輸事件模塊等組成,。事件模塊分成高優(yōu)先級和低優(yōu)先級兩個相互獨立的模塊,各自有獨立的事件入口和事件參數(shù)表,,和CPU有獨立的接口,。使得dMAX可以同時處理兩個不同的事件。當訪問CPU端口時,,MAX0的優(yōu)先級高,MAX1的優(yōu)先級低,。dMAX能夠通過執(zhí)行先進的一維,、二維與三維數(shù)據(jù)的存儲器傳輸工作,從而使DSP得以專注于信號處理任務,,顯著提高系統(tǒng)性能,。適合圖像的子幀提取或者語音信號的子信道提取。
DSP內(nèi)部的數(shù)據(jù)交換中心在dMAX的控制下,,可以實現(xiàn)片內(nèi)RAM,、EMIF以及HPI接口之間的數(shù)據(jù)交換。本文介紹在dMAX控制下,,實現(xiàn)片內(nèi)RAM和EMIF接口之間的數(shù)據(jù)交換,。如果DSP采用普通的異步接口方式,數(shù)據(jù)傳輸需要建立,、選通和保持3個階段,,最少需要5個EMIF時鐘(建立和保持各1個時鐘,選通3個時鐘),。為了保證通信的可靠性,,一般采用10個EMIF時鐘(建立3個時鐘,保持2個時鐘,,選通5個時鐘),。而EMIF時鐘最快為133MHz;這樣,,采用異步接口的通信速率一般為13.3M×32b/s(采用32位數(shù)據(jù)總線寬度),。此外,異步接口數(shù)據(jù)傳輸必須在CPU的參與下,,使用指令實現(xiàn)數(shù)據(jù)搬移,。將占用大量的CPU開銷,在很多高速的數(shù)據(jù)采集和處理中,將降低系統(tǒng)的整體性能,。為此,,采用dMAX實現(xiàn)嵌入式FIFO數(shù)據(jù)傳輸克服異步傳輸?shù)娜秉c,其傳輸采用突發(fā)讀寫方式進行,,可以連續(xù)突發(fā)讀寫8個數(shù)據(jù),,一共只需要20個時鐘,通信速率提高為53.2M×32b/s,,提高4倍讀寫速率,。還可以采用和DMA后臺運行,這樣將大大降低整個系統(tǒng)數(shù)據(jù)讀寫的開銷,,從而可以實現(xiàn)更加復雜和可靠的算法處理,。
嵌入式FIFO設計
嵌入式FIFO的設計主要就是控制FIFO的7個參數(shù)。這7個參數(shù)分別為基地址,、空間大小,、空標志、滿標志,、錯誤標志,、讀指針和寫指針。它們之間的關系如圖2所示,。
圖2 FIFO結構示意圖
基地址和空間大小用于規(guī)劃出一段內(nèi)存空間,,該內(nèi)存空間用于FIFO設備,并被FIFO設備保護起來,,使得其他設備和程序不能訪問該空間,。為了便于操作方便,空間大小一般為2的整數(shù)次冪,,但不做要求,。具體到C6727B型號的DSP,空間大小最大為1M個元素,,元素大小可以是8位,、16位或者32位數(shù)據(jù),不能為其他類型的數(shù)據(jù),?;刂房梢詾閮?nèi)存空間的任何一個地址,同樣為了操作方便,,一般為空間大小的邊界點,。例如,8個元素的FIFO,,其基地址一般為XXXXX000b,,也就是地址的低3位為0,,基地址就肯定為8的整數(shù)次。同樣,,64個元素的FIFO,,其低6位為0?;刂泛涂臻g大小的特殊要求避免訪問時的地址跨越多頁問題,,可以提高FIFO的訪問速度。
空標志和滿標志用于表示FIFO的存儲狀態(tài),。讀指針和寫指針用于表示讀寫的當前地址,。錯誤標志表示對FIFO的錯誤操作。當FIFO處于滿標志情況下仍然寫FIFO,,或者FIFO處于空標志情況下仍然讀FIFO,,F(xiàn)IFO都將終止當前操作,并將錯誤標志置位,。
FIFO的寫操作只有一種工作方式,,即每次寫一個新的數(shù)據(jù),寫指針加1,,直到寫滿。而FIFO讀操作有兩種工作方式,,分別為標準操作和多階延遲(Multi-tap Delay Transfer)操作,。標準操作和寫操作一樣。多階延遲操作一般用于濾波處理,,當需要對輸入信號進行濾波處理時候,,每次希望從FIFO讀取一段窗口的數(shù)據(jù),進行濾波處理,,數(shù)據(jù)窗口仍然只移動一個數(shù)據(jù),。在標準操作情況下,如果讀取一段窗口的數(shù)據(jù),,F(xiàn)IFO則將該段窗口的數(shù)據(jù)全部彈出,。多階延遲操作則只彈出一個數(shù)據(jù)。該操作方法對語音或者AD采樣數(shù)據(jù)的平滑,、FIR等濾波非常適用,。需要注意的是,多階延遲操作的數(shù)據(jù)窗大小需要設置,,如果FIFO存儲的數(shù)據(jù)個數(shù)小于數(shù)據(jù)窗,,F(xiàn)IFO則終止當前操作,并給出錯誤標志,。
系統(tǒng)硬件結構
C6727B和其他DSP有一個較大的區(qū)別,,就是C6727B不再提供專門的外部中斷引腳,,而是采用GPIO引腳和dMAX配合使用,通過寄存器的設置將GPIO引腳配置成外部中斷引腳,。本文為了實現(xiàn)FIFO的實時操作,,一旦外設向FIFO寫入數(shù)據(jù),即發(fā)出中斷信號到DSP的CPU,,通知CPU讀取數(shù)據(jù),。為此,需要使用1個外部中斷引腳,,將C6727B的音頻串口的AXR[8]配置成通用的GPIO引腳,,并在dMAX中設置成中斷引腳。此時需要將音頻串口的CONFIGMACSP0寄存器設置為0x0001,,如圖3所示,。此時音頻串口不能再作為普通的音頻口使用,而是配置成IO接口,。
圖3 中斷功能設置框圖
從圖3中可以看出,,配置好音頻串口后,一旦AXR[8]引腳有上升沿到,,則McASP0激活dMAX的事件26,,向CPU發(fā)送內(nèi)部中斷13。McASP的與中斷相關的寄存器配置是實現(xiàn)以上方案的重點,。使用PFUNC寄存器將其配置成通用IO引腳,;PDIR寄存器控制IO引腳的方向;如果是輸出引腳則由POUT引腳輸出高低電平,,如果是輸入引腳,,則由PDIN寄存器讀出該引腳的狀態(tài);此外,,可以使用PDCLR和PSET寄存器清除或者設置輸出引腳的狀態(tài),。
系統(tǒng)軟件設計
系統(tǒng)軟件設計主要包括McASP的初始化、dMAX的初始化,、FIFO的初始化,、中斷使能等。系統(tǒng)主程序只需要等待中斷進行相應的處理,,主要的數(shù)據(jù)傳輸工作都是dMAX按照軟件配置自動完成,,不需要CPU參與。圖4是實現(xiàn)由外設寫FIFO,,DSP讀取FIFO數(shù)據(jù)的流程,。圖中虛線部分表示由dMAX獨立完成的工作,實線部分表示由CPU完成的工作,。兩者之間通過內(nèi)部中斷方式實現(xiàn)狀態(tài)的交流,。
圖4 系統(tǒng)軟件流程
為了提高FIFO的讀寫速率,,一般采用突發(fā)方式進行讀寫。突發(fā)方式的讀時序如圖5所示,。寫時序和讀時序類似,。突發(fā)方式一次最多只能讀寫8個數(shù)據(jù),也可以一次突發(fā)讀寫4個或者2個數(shù)據(jù),。突發(fā)讀寫時數(shù)據(jù)的建立和保持時間最少可以設置成1個時鐘周期,,如圖中所示。但為了通信可靠,,一般采用2個時鐘周期,。突發(fā)方式最大的節(jié)省時間是連續(xù)的其他數(shù)據(jù)將不再需要建立和保持周期,而是直接進行讀寫,,一般只需要兩個時鐘周期就可以完成一個數(shù)據(jù)的讀寫,。最快情況下,突發(fā)讀寫8個數(shù)據(jù)只需要20個時鐘周期,,讀寫速率達到53.2M×32b/s,,滿足大部分設備的要求。
圖5 突發(fā)讀時序圖
總結
dMAX的特有結構使得其可以實現(xiàn)嵌入式FIFO,。本文介紹了基于C6727B的dMAX的基本結構以及基于dMAX的嵌入式FIFO軟硬件設計,,設置通用GPIO引腳作為中斷,為了加快FIFO的傳輸速率,,使用突發(fā)讀寫方式進行數(shù)據(jù)傳輸,。