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