基于A(yíng)RM的嵌入式語(yǔ)音存儲系統設計
3.3 IDE硬盤(pán)控制模塊
IDE接口是硬盤(pán)和光驅普遍使用的外部接口,接口采用16位數據總線(xiàn)并行傳送,體積小、速度快,兼容性強。IDE接口主要有可編程輸入輸出(Programming Input Output,PIO)和直接內存訪(fǎng)問(wèn)(Direct Mcmory Access,DMA)兩種傳輸模式。PIO模式占用大量的系統資源,數據傳輸速率較低;DMA模式需要額外的驅動(dòng)程序或設置,系統資源占用少、執行效率較高。本設計選擇DMA模式。
S3C2440A與硬盤(pán)接口如圖5所示。其接口信號分為片選信號、數據信號和控制信號3個(gè)部分。硬盤(pán)上寄存器分為兩組,分別由/CS0和/ CS1選中其中的一組,A0~A2引腳用于組內寄存器尋址,包括數據寄存器、錯誤寄存器、扇區計數器、扇區號寄存器、低柱面號寄存器、高柱面寄存器、狀態(tài)寄存器和命令寄存器。數據線(xiàn)D0~D15用于數據的雙向傳輸。/DIOR、/DIOW是讀寫(xiě)控制信號;/Reset是硬盤(pán)復位信號;DMARQ(DMA請求信號)和/DMACK(DMA應答信號)是專(zhuān)用于DMA模式的信號。
4 系統軟件實(shí)現
4.1 語(yǔ)音數據的采集
語(yǔ)音采集部分主要是完成UDA1341TS驅動(dòng)程序的編寫(xiě),其初始化相關(guān)代碼如下:
端口初始化包括L3總線(xiàn)接口和I2S接口的設置,首先將與L3接口相連的通用I/O口GPB2、GPB3、GPB4設置為輸出模式,然后設置與I2S控制器輸出信號相關(guān)的GPIO引腳,將GPE0~GPE4這5個(gè)引腳設置為I2S接口的信號模式。UDA1341TS芯片初始化部分包括L3接口時(shí)序和協(xié)議的模擬,完成采樣速率、數據格式等參數的設置。系統采樣速率為8 kHz,使用時(shí)鐘為384 fs,數據輸入格式設置為MSB-Justifled模式。接下來(lái)通過(guò)“audio_init_dma()”申請DMA通道,輸出音頻緩沖區的DMA通道設為通道2,輸入音頻緩沖區的DMA通道設為通道1。若初始化失敗會(huì )返網(wǎng)相應的錯誤標志,初始化成功后方可進(jìn)行后續操作。
4,2 IDE接口函數
硬盤(pán)驅動(dòng)程序實(shí)現分為設備初始化、打開(kāi)設備、設備I/O操作和釋放設備等幾部分。要完成硬盤(pán)數據交換的工作,就需要對寄存器進(jìn)行頻繁的讀寫(xiě)操作,為了方便在程序中的調用,把這些和硬件操作密切相關(guān)的操作都寫(xiě)成了接口函數,其函數說(shuō)明略——編者注。
4.3 系統主程序流程
主進(jìn)程開(kāi)始后首先初始化采樣參數,包括采樣速率、采樣點(diǎn)數、數據存儲格式及采樣通道,若初始化不成功會(huì )返回相應的錯誤標志,并作出相應的出錯處理,成功后可繼續下一步操作。然后通過(guò)鍵值判斷數據的存儲區是選擇Flash還是選擇硬盤(pán),并初始化相應的存儲區,這是保證系統在沒(méi)有外擴硬盤(pán)的情況下也能正常運行,只不過(guò)是數據存儲量較小而已;若選擇操作硬盤(pán),但硬盤(pán)未連接,仍然會(huì )返回相應的錯誤標志,并進(jìn)入出錯處理函數繼續執行。接下來(lái)根據鍵值判斷是否進(jìn)行壓縮處理,若進(jìn)行壓縮處理,則相應的編解碼標志置位;根據該標志確定是否啟動(dòng)編解碼進(jìn)程,即系統能存儲未壓縮的數據,也能存儲壓縮后的數據,可以根據需要進(jìn)行適當的選擇。啟動(dòng)A/D轉換進(jìn)程并進(jìn)行語(yǔ)音數據的存儲,相當于錄音的過(guò)程;數據存儲完成后,即錄音結束后,啟動(dòng)D/A轉換進(jìn)程進(jìn)行語(yǔ)音播放。錄音和播放可以同時(shí)進(jìn)行,為了測試方便,這里把這兩個(gè)過(guò)程分離開(kāi)來(lái)。
總的來(lái)說(shuō),系統主進(jìn)程創(chuàng )建了A/D、D/A轉換進(jìn)程和編解碼進(jìn)程,結合Linux的共享機制和進(jìn)程間通信等手段,實(shí)現了語(yǔ)音信號的采集、壓縮、存儲、回放等環(huán)節。
系統主程序流程圖略——編者注。
linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)
評論