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