王玲玲+丁學(xué)用
摘 要:本文給出了基于ARM體系結(jié)構(gòu)的音頻錄放系統(tǒng)總體設(shè)計(jì)方案。搭建硬件平臺、構(gòu)建交叉開發(fā)環(huán)境,對Linux操作系統(tǒng)內(nèi)核移植,根據(jù)Linux2.4內(nèi)核UDA1380音頻芯片結(jié)構(gòu),設(shè)計(jì)了符合系統(tǒng)要求的UDA1380音頻驅(qū)動、矩陣鍵盤驅(qū)動,基于音頻驅(qū)動系統(tǒng)調(diào)用函數(shù),設(shè)計(jì)與開發(fā)用戶應(yīng)用層程序,實(shí)現(xiàn)了音頻錄放系統(tǒng)的設(shè)計(jì)要求。
關(guān)鍵詞:Linux;S3C2410;UDA1380
中圖分類號:TP391 文獻(xiàn)識別碼:A
0.引言
當(dāng)今社會是一個數(shù)字化信息迅猛發(fā)展的社會,語音信息的數(shù)字化處理技術(shù)得到了全社會的普遍認(rèn)可和廣泛的應(yīng)用。因此生產(chǎn)的語音信息處理器的性能也隨著科學(xué)技術(shù)的快速發(fā)展而愈來愈好。數(shù)字語音錄放系統(tǒng)是指利用數(shù)字技術(shù)對語音信號進(jìn)行采集、處理,并且在一定的存儲設(shè)備中進(jìn)行存儲,而且可在需要時進(jìn)行輸出。與模擬設(shè)備相比較,數(shù)字設(shè)備更趨向于集成化、微型化,且成本低、穩(wěn)定性強(qiáng)、操作簡單方便。使得數(shù)字語音錄放系統(tǒng)廣泛地滲透到儀器儀表、人工智能、電話的錄放音、車輛的到站提示音、移動電話機(jī)以及其他便攜式電子產(chǎn)品、監(jiān)控環(huán)境中使用的語音采集系統(tǒng)、智能玩具等多種領(lǐng)域。
本文研究的意義在于它能用于實(shí)時監(jiān)聽、信息提示,會議記錄,站名廣播等,能夠省去聽眾現(xiàn)場記錄,節(jié)約筆墨紙張,可使聽眾專心聽講,可按設(shè)定時間功能自動播放提示預(yù)警信息等。
1.系統(tǒng)總體設(shè)計(jì)(圖1)
1.1 硬件整體結(jié)構(gòu)
本系統(tǒng)的硬件電路部分將由以下器件組成:微處理器S3C2410、內(nèi)存、24bit編解碼芯片UDA1380、時鐘、電源、矩陣鍵盤等。內(nèi)存包括16MB的NOR FLASH和32MB的SDRAM。S3C2410內(nèi)置了一個IIC控制器,控制器通過IIC總線控制音頻信號。FIFO(First In First Out)是先進(jìn)先出電路,在系統(tǒng)中引導(dǎo)數(shù)據(jù)先進(jìn)先出功能,作為一個臨時存儲數(shù)據(jù)的音頻數(shù)據(jù)緩沖區(qū),通過S3C2410內(nèi)置IIS控制器共同工作實(shí)現(xiàn)音頻數(shù)據(jù)傳輸。由于S3C2410有一個內(nèi)置DMA控制器,系統(tǒng)可以應(yīng)用DMA傳輸和緩存段來提高音頻數(shù)據(jù)實(shí)時性處理性能,系統(tǒng)硬件結(jié)構(gòu)如圖2所示。
1.2 音頻接口電路設(shè)計(jì)
UDA1380的L3總線接口用來作為混音器的控制接口,微處理器通過此接口來配置UDA1380中的數(shù)字音頻參數(shù)和系統(tǒng)控制參數(shù),以方便對輸入輸出音頻信號的音量大小、高低音和靜音等功能進(jìn)行控制。L3總線包括微處理器接口模式線(L3MODE)、微處理器接口時鐘線(L3CLOCK)以及微處理器接口數(shù)據(jù)線(L3DATA)三根接線。通過對L3模式的控制來選擇使用哪種方式傳輸數(shù)據(jù),當(dāng)L3選取模式0時,選擇IIC總線進(jìn)行傳輸數(shù)據(jù);當(dāng)L3選取模式1時,選擇L3進(jìn)行傳輸數(shù)據(jù)。在系統(tǒng)設(shè)計(jì)時選用IIC總線進(jìn)行傳輸數(shù)據(jù)和控制信號,因此把L3模式直接接地,即是使L3MODE=0。而關(guān)于L3的余下兩根接線,L3CLOCK與IIC的本身時鐘信號線鏈接,L3DATA與IIC的本身數(shù)據(jù)傳輸線鏈接。這里需要特別注意的是,為了保證電路可以安全使用,在連接UDA1380的兩個引腳時都要加一個上拉電阻,并且外接+3.3V的電源。
在本次系統(tǒng)設(shè)計(jì)中,UDA1380的音頻輸入設(shè)備選取為麥克風(fēng),輸出設(shè)備任選揚(yáng)聲器或者耳機(jī)。接線情況,麥克的左右聲道分別連接UDA1380TT的VINL、VINR;輸出設(shè)備的左右聲道需要接到UDA1380TT的VOUTL、VOUTR。
在進(jìn)行時鐘信號連線以及選擇字段時,其IIS總線的時鐘信號IIS_SCLK的兩端分別與UDA1380的BCK引腳和S3C2410的GPE1引腳相連接;而IIS_LRCK字段選擇的兩端分別與UDA1380的WSO/WSI引腳以及S3C2410的GPEO引腳相連接。S3C2410的GPE2引腳與UDA1380的SYSCLK相連激活系統(tǒng)時鐘。
1.3 鍵盤接口電路設(shè)計(jì)
控制端采用4×4矩陣鍵盤,將直接與處理器的I/O口互連,矩陣鍵盤4行分別連接GPC7、GPC8、GPC9、GPC104個引腳,其四列連接的則分別是GPD0、GPD1、GPD8、GPD9引腳。系統(tǒng)工作時將會采用輪循方式,這樣在滿足系統(tǒng)的實(shí)時性要求的同時,還能實(shí)現(xiàn)鍵盤的去抖動功能。
2.系統(tǒng)軟件設(shè)計(jì)
2.1 建立交叉編譯環(huán)境
在對Linux系統(tǒng)進(jìn)行移植之前,先要在PC機(jī)上建立一個交叉編譯環(huán)境,目的是使在PC機(jī)平臺(即宿主機(jī))上編譯的目標(biāo)文件能夠在ARM9平臺(即目標(biāo)機(jī)器)上順利執(zhí)行。大體流程如下:
(1)交叉編譯工具網(wǎng)絡(luò)下載:cross-2.95.3.tar.bz2;
(2)根目錄的建立,在宿主機(jī)上任意盤符下建立/usr/local/arm目錄,并將解壓后的交叉編譯工具置于此目錄下;
(3)設(shè)置環(huán)境變量,實(shí)現(xiàn)命令路徑尋找;
(4)為使環(huán)境變量能夠每次在登錄時自動生效,需在/etc/bashrc中添加相關(guān)路徑:PATH=$PATH:/usr/local/arm/2.95.3/bin。
2.2 內(nèi)核移植、編譯及燒寫
(1)在宿主機(jī)的終端下,輸入make menuconfig命令進(jìn)行內(nèi)核配置,除了一些基本功能模塊以外,將內(nèi)核中其余不必要的功能模塊全部去除。
(2)對于網(wǎng)絡(luò)配置、文件系統(tǒng)的配置、塊設(shè)備和可加載模塊等相關(guān)模塊的配置,由于與多數(shù)嵌入式開發(fā)相同,在此不再累述。
(3)在宿主機(jī)終端的my_project/kernel目錄下執(zhí)行:
[my_project//kernel]#make dep
[my_project/lkernel]#make zImage
運(yùn)行生成的映像文件zImage,自動保存在my_project/kernel/arch/arm/boot當(dāng)中。
(4)根據(jù)前文中的內(nèi)存地址空間分配,通過網(wǎng)口進(jìn)行新內(nèi)核的燒寫。0x1040000為內(nèi)核燒寫到FLASH的地址;0x30008000為內(nèi)核下載到內(nèi)存SDRAM中的地址,其燒寫空間大小為0x100000,內(nèi)核文件的大小不能超過燒寫空間大小。
2.3 初始化底層程序
DSP程序初始化過程主要有:設(shè)定工作頻率、配置存儲區(qū)域、McBSP的初始化、設(shè)定IIC控制器相關(guān)參數(shù)、通用IO口設(shè)定以及設(shè)置定時中斷等,使系統(tǒng)能夠在正常狀態(tài)運(yùn)行;
音頻編解碼初始化過程主要有:設(shè)定音頻采樣頻率、位數(shù)以及工作模式等,完成音頻錄放和編輯界面程序;
SD卡初始化過程主要有:GPIO模擬SPI控制器,用戶字節(jié)、塊讀寫的基本程序設(shè)計(jì),提供后續(xù)讀寫接口。
2.4 音頻錄制
(1)設(shè)定錄音參數(shù),用戶在錄音之前將錄音參數(shù)設(shè)定好。
(2)在上一步錄音參數(shù)設(shè)置好后,執(zhí)行打開音頻設(shè)備命令,取得訪問音頻芯片權(quán)利。在錄音過程中,文件標(biāo)識符將會通過返回的一個正整數(shù)產(chǎn)生。在后續(xù)錄音操作中,此文件標(biāo)識符將會在相關(guān)系統(tǒng)調(diào)用函數(shù)中使用。
(3)錄制音頻文件過程,緩沖區(qū)中輸入從設(shè)備文件中讀取的錄音數(shù)據(jù)。
2.5 DSP音頻設(shè)備驅(qū)動
(1)DSP設(shè)備驅(qū)動,在file_operations數(shù)據(jù)結(jié)構(gòu)中,選取實(shí)現(xiàn)驅(qū)動所需系統(tǒng)調(diào)用函數(shù):open,write,ioctl,poll,release等。
(2)由數(shù)據(jù)結(jié)構(gòu)中函數(shù)指針,設(shè)計(jì)相應(yīng)入口點(diǎn)函數(shù)。如:open函數(shù),音頻芯片訪問權(quán)通過系統(tǒng)調(diào)用它來實(shí)現(xiàn),并可檢查設(shè)備特定的錯誤;read函數(shù)接收音頻芯片數(shù)據(jù),進(jìn)行錄音操作;write函數(shù)向音頻芯片發(fā)送數(shù)據(jù),進(jìn)行放音操作。
2.6 放音程序設(shè)計(jì)
初始化中斷和串口,申請與音頻數(shù)據(jù)相同長度字節(jié)的內(nèi)存空間,并把flash存儲器中存放數(shù)據(jù)拷貝到相應(yīng)存儲空間中,最后直接播放存儲的音頻數(shù)據(jù)。
結(jié)語
本文研究了基于嵌入式平臺的音頻錄放系統(tǒng)。該系統(tǒng)是一種高實(shí)時性音頻處理系統(tǒng),它主要由S3C2410微處理器和UDA1380編解碼芯片構(gòu)成。系統(tǒng)設(shè)計(jì)包含硬件設(shè)計(jì)與軟件設(shè)計(jì)兩大塊。系統(tǒng)可用于人工智能、通信工具、語音識別系統(tǒng)、電子產(chǎn)品、監(jiān)控環(huán)境中等,具有重要的理論與現(xiàn)實(shí)意義。
參考文獻(xiàn)
[1]葛超,王嘉偉,陳磊. ARM體系結(jié)構(gòu)與編程[M].北京:清華大學(xué)出版社,2007:101-132.
[2]潘巨龍,等. ARM9嵌入式Linux系統(tǒng)構(gòu)建與應(yīng)用[M].北京:航空航天出版社,2006:42-77.