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