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