基于 DSP-dMAX 的嵌入式 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)。
評論