eDMA是enhanced Direct Memory Access的簡稱,即增強型直接內(nèi)存存取。它是用于快速數(shù)據(jù)交換的重要技術(shù),具有獨立于CPU的后臺批量數(shù)據(jù)傳輸能力,能夠滿足實時處理中高速數(shù)據(jù)傳輸?shù)囊。在ColdFire系列MCU中的MCF5329EVB平臺上實現(xiàn)的音頻系統(tǒng),為了滿足系統(tǒng)的實時性要求,采用eDMA來完成音頻數(shù)據(jù)的傳輸。MCF5329EVB提供了一個eDMA控制器,可以滿足大量數(shù)據(jù)的實時傳送需求。
1 eDMA介紹
1.1 eDMA的結(jié)構(gòu)
eDMA模塊框圖如圖1所示。
從eDMA的模塊結(jié)構(gòu)圖可以看出,eDMA模塊包括兩個主要模塊:eDMA引擎和傳輸控制描述符TCD單元。其中,eDMA引擎的功能主要包括源地址和目的地址的計算和實際的數(shù)據(jù)搬移操作;TCD單元的功能是為每個通道定義傳輸?shù)脑吹刂泛湍康牡刂、次循環(huán)的大小、單次傳輸?shù)淖止?jié)量及傳輸方式等信息。
eDMA引擎由如下4個子模塊組成:
①地址路徑模塊。執(zhí)行傳輸控制描述符的2個通道(通道X和通道Y)的注冊,并處理所有的總線地址計算。被注冊的通道用于裝載從傳輸控制描述符區(qū)域讀取的傳輸控制描述符內(nèi)容。
②數(shù)據(jù)路徑模塊。執(zhí)行數(shù)據(jù)的讀寫,包括16字節(jié)的寄存器存儲區(qū)域,并支持多種數(shù)據(jù)排列方式。
③編程模型/通道仲裁模塊。執(zhí)行eDMA編程模型和通道仲裁。eDMA外部請求輸入和中斷輸出都連接到該模塊。
④控制模塊。提供所有針對eDMA引擎的控制功能,包括對數(shù)據(jù)讀和寫的匹配。如需要讀取的源數(shù)據(jù)大小為16位,而目標數(shù)據(jù)大小為32位,則每2次讀取只需要1次寫入。
傳輸控制描述符區(qū)域由如下兩部分組成:
①內(nèi)存控制器。該邏輯執(zhí)行必需的雙向端口控制,處理eDMA引擎和內(nèi)部外圍總線的通道。
②內(nèi)存陣列。TCD存儲區(qū)是一個單端口同步的RAM陣列。每個通道都有1個TCD單元,每個TCD有32字節(jié),由11個寄存器組成。
1.2 eDMA的操作
MCF5329的eDMA有16個數(shù)據(jù)傳輸通道,每一個通道由一個傳輸控制描述符TCD進行描述。TCD不僅記錄了數(shù)據(jù)傳輸?shù)脑春湍康牡刂,還記錄了當前傳輸?shù)刂废鄬τ谄鹗嫉刂返钠啤T撈朴梢粋主循環(huán)(maior loop)和一個次循環(huán)(minor loop)來表示。當一個通道在傳輸時,次循環(huán)中的數(shù)據(jù)傳輸完成之后,eDMA引擎中的當前源地址、目的地址和外循環(huán)的大小會被寫回TCD存儲區(qū)域,并執(zhí)行通道連接的其他通道傳輸。每一個次循環(huán)執(zhí)行完,當前外循環(huán)計數(shù)器就會減1;當外循環(huán)計數(shù)器減為O時,eDMA會向處理器發(fā)起一次中斷請求,請求下一次eDMA傳輸?shù)脑春湍康牡刂。一次主循環(huán)所能傳送的最大字節(jié)數(shù)由用戶所分配的eDMA緩沖區(qū)大小決定。
1.3 eDMA基本數(shù)據(jù)流
eDMA基本數(shù)據(jù)流可被劃分為三段。
第一段是通道激活。以外圍硬件請求激活通道為例,eDMA請求輸入信號首先經(jīng)由控制子模塊進入編程模型和通道仲裁模塊,確定采用固定優(yōu)先級還是聯(lián)合通道仲裁(固定優(yōu)先級仲裁是先給具有最高優(yōu)先級的通道服務,聯(lián)合通道優(yōu)先級是先給通道編號最大的通道服務);確定通道后,被確定的通道號通過地址路徑模塊發(fā)送并轉(zhuǎn)換成需要的地址,用于在當?shù)卮鎯^(qū)域中存取傳輸控制描述符TCD;相應的描述符讀取出來后被裝載到地址路徑模塊中的通道X或通道Y寄存器中。
第二段是真正的數(shù)據(jù)傳輸。源數(shù)據(jù)被讀取出來臨時,存儲在數(shù)據(jù)路徑塊中,然后在時鐘的驅(qū)動下將數(shù)據(jù)寫入到目標地址。整個讀寫過程持續(xù)到次循環(huán)數(shù)據(jù)結(jié)束。
第三段是TCD的更新和中斷請求的發(fā)生。一旦一個次循環(huán)數(shù)據(jù)傳輸完畢,數(shù)據(jù)流就進入第三段。在該段中,地址路徑邏輯會更新相應TCD中的特定區(qū)域,如源地址、目標地址和外循環(huán)計數(shù)。如果外循環(huán)計數(shù)減為O,則要進行額外的設置,包括最終地址調(diào)節(jié)。如果在此時有中斷請求發(fā)生,需要重新讀取一個新的TCD。
2 TLV320DAC23介紹
TLV320DAC23是TI公司推出的一顆高性能立體聲音頻編解碼(CODEC)芯片,采樣率可以從8 kHz到96kHz,傳輸字長可自由選擇為16位、20位、24位或32位;最大輸出信噪比可達到100 db;控制端口可兼容SPI、2一wire等協(xié)議;回放模式下功率為18 mw,省電模式下小于15μW。該芯片適用于便攜式設備的數(shù)字音頻處理。
(1)控制接口
控制接口用于對器件TLV320DAC23的寄存器編程,以及設置音頻芯片的工作參數(shù)。它兼容兩種模式:SPI三線模式、2一wire模式。
MODE:模式選擇。MODE為0時采用2一wire模式,為1時采用SPI模式。
SCLK:控制端口串行數(shù)據(jù)時鐘。
SDIN:控制端口串行數(shù)據(jù)輸入。
CS:控制端口輸入鎖存/地址選擇。SPI模式下,CS用于數(shù)據(jù)鎖存控制,2一wire模式下,CS定義器件地址域的第7位。SPI模式下,1個控制字為1 6位:高7位為控制地址,低9位為控制字。16位的控制字由MSB位開始傳輸,每位在SCLK的上升沿被鎖存,整個16位的控制字在最低位被CS鎖存進TLV320DAC23。
(2)數(shù)字音頻接口
數(shù)字音頻接口用于輸入TLV320DAC23的D/A數(shù)據(jù)。
BCLK:I2S串行比特時鐘。主模式時BCLK為輸出,從模式時BCLK為輸入。
DIN:I2S串行數(shù)據(jù)輸入。
DOUT:I2S串行數(shù)據(jù)輸出。
LRCIN/LRCOUT:字時鐘輸入/輸出信號,兩個信號共有的幀信號。在主模式中由DAC23產(chǎn)生該信號,在從模式中由主設備(如DSP或MCU)產(chǎn)生該信號。
TLV320DAC23支持4種音頻接口模式:右對齊模式、左對齊模式、I2S模式、DSP模式。這4種模式都是最高有效位MSB在前,字長16~32位(右對齊除外,它不支持32位)。
(3)時鐘接口
MCLK:芯片主時鐘信號。當TLV320DAC23作為主設備時,該信號由芯片自身產(chǎn)生;當TLV320DAC23作為從設備時,該信號由外部產(chǎn)生。
CLKOUT:時鐘輸出信號?梢詾镸CLK或MCLK/2。
作者:成都電子科技大學 薛煒 李廣軍 郭志勇 來源:單片機與嵌入式系統(tǒng)