當(dāng)前位置:首頁 > 嵌入式 > 嵌入式教程
[導(dǎo)讀]VxWorks下基于CS4281聲卡的VOIP設(shè)計(jì)與實(shí)現(xiàn)

    VOIP的基本原理:通過聲音的壓縮算法對(duì)聲音數(shù)據(jù)編碼進(jìn)行壓縮處理,然后把這些聲音數(shù)據(jù)進(jìn)行打包,經(jīng)過IP網(wǎng)絡(luò)把數(shù)據(jù)包送至接收地,再把這些聲音數(shù)據(jù)包重組,經(jīng)過解壓處理后,還原成原來的聲音信號(hào),從而達(dá)到由互聯(lián)網(wǎng)傳送聲音的目的。VxWorks是常用的嵌入式操作系統(tǒng),基于VxWorks的嵌入式開發(fā)應(yīng)用非常廣泛。本文試圖在小范圍的以太網(wǎng)環(huán)境實(shí)現(xiàn)VxWorks操作系統(tǒng)下基于聲卡VOIP的嘗試,為某些需要聲卡的嵌入式開發(fā)提供支持。

1 VxWorks及聲卡簡介

    VxWorks是由風(fēng)河(Wind River System Inc.)公司專門為實(shí)時(shí)嵌入式系統(tǒng)設(shè)計(jì)開發(fā)的一套具有微內(nèi)核、高性能、可伸縮的實(shí)時(shí)操作系統(tǒng),為程序員提供了高效的實(shí)時(shí)任務(wù)高度、中斷管理,實(shí)時(shí)的系統(tǒng)資源以及實(shí)時(shí)的任務(wù)間通信,并能夠根據(jù)用戶的需求進(jìn)行組合。應(yīng)用程序員可以將盡可能多的精力放在應(yīng)用程序本身,而不必再去關(guān)心系統(tǒng)資源的管理。VxWorks是一種功能強(qiáng)大而且比較復(fù)雜的操作系統(tǒng),VxWorks只占用了很小的存儲(chǔ)空間,并可高度裁減,保證了系統(tǒng)能以較高的效率運(yùn)行。VxWorks的優(yōu)秀特性為編寫應(yīng)用程序和設(shè)備驅(qū)動(dòng)程序提供了極大的便利。在VxWorks下,設(shè)備驅(qū)動(dòng)程序既可以嵌入到內(nèi)核中隨系統(tǒng)一起啟動(dòng),也可以作為可加載模塊在系統(tǒng)啟動(dòng)之后運(yùn)行。本文的聲卡驅(qū)動(dòng)程序采用后一種方式。

    本文選用的聲卡是Cirrus Logic公司的CS4281/AC′97。這是一款功能強(qiáng)大的聲卡,他主要由CS4281和C2S4297A芯片組成。CS4297A是符合AC′97(Audio Codec′97)規(guī)范的一個(gè)混合信號(hào)串行編解碼器。他負(fù)責(zé)對(duì)原始聲音信號(hào)的采樣混音處理,把接收的模擬聲音信號(hào)轉(zhuǎn)換成數(shù)字信號(hào);也將接收的數(shù)字音頻信號(hào)通過一種特殊的音頻算法轉(zhuǎn)換成模擬信號(hào)。CS4281是一個(gè)PCI-Ac′97數(shù)字控制器,他提供串行AC′97編解碼器(如CS4297A)與并行PCI總線之間的接口。

2 總體設(shè)計(jì)

    程序劃分為兩個(gè)模塊:(1) CS4281聲卡的VxWorksPCI驅(qū)動(dòng),實(shí)現(xiàn)聲音的錄音和播放;(2) 通信模塊,該模塊負(fù)責(zé)接收驅(qū)動(dòng)模塊的聲音數(shù)據(jù),并打包通過以太網(wǎng)發(fā)送;接收以太網(wǎng)的數(shù)據(jù),解包成聲音數(shù)據(jù)傳給驅(qū)動(dòng)模塊。

    低層是聲卡驅(qū)動(dòng):從麥克風(fēng)進(jìn)來的聲音在這里記錄,并發(fā)送PCM抽樣聲音數(shù)據(jù)到上層;同時(shí),聲音數(shù)據(jù)從上層傳來并發(fā)送到聲卡播放,通過耳機(jī)輸出。主要有以下幾個(gè)函數(shù):PCI配置空間的分配,完成聲卡的查找及內(nèi)存映射;CS428l及CS4297的初始化,進(jìn)行一系列的硬件初始化;DMA緩沖區(qū)的分配,用來緩存聲卡驅(qū)動(dòng)和通信模塊之間的聲音數(shù)據(jù);取樣率和格式的設(shè)置,選擇合適的取樣率及格式;聲音系統(tǒng)的打開及關(guān)閉,控制錄音及播放功能的開關(guān);中斷處理函數(shù),聲卡驅(qū)動(dòng)和通信模塊之間通過中斷來進(jìn)行數(shù)據(jù)的存取。

    上層是通信部分:聲音數(shù)據(jù)在這里打包成分組通過網(wǎng)卡發(fā)送出去,從網(wǎng)卡接收來的數(shù)據(jù)在此解包并交給聲卡驅(qū)動(dòng),數(shù)據(jù)經(jīng)過以太網(wǎng)的發(fā)送和接收通過調(diào)用Socket來實(shí)現(xiàn)。

2.1 確定取樣率

    結(jié)合實(shí)際的實(shí)驗(yàn)環(huán)境,從諸多的取樣率和格式中,選擇11025 Hz取樣頻率、8 b單聲道。計(jì)算最低的數(shù)據(jù)傳輸率:

2.2 設(shè)置緩沖區(qū)

    如果網(wǎng)絡(luò)中通信量變化較大,將產(chǎn)生時(shí)延抖動(dòng)。需要設(shè)置兩個(gè)緩沖區(qū)用來在發(fā)送數(shù)據(jù)和接收數(shù)據(jù)時(shí)進(jìn)行緩存,以減輕時(shí)延抖動(dòng)的影響,保證通信質(zhì)量。緩沖區(qū)大小應(yīng)適當(dāng),如果太小,將會(huì)造成數(shù)據(jù)丟失;如果太大,抖動(dòng)時(shí)延將增長。

    在x86結(jié)構(gòu)中,頁面大小是4 kB。這對(duì)DMA緩沖大小是個(gè)限制,因?yàn)镈MA需要位于一個(gè)內(nèi)存頁面中來保持緩沖區(qū)的連續(xù)性,且要適應(yīng)基于UDP的Socket通信,我們確定播放DMA緩沖和錄音DMA緩沖大小都為2 kB,并且用“乒乓”技術(shù)在這兩個(gè)緩沖區(qū)間傳輸,那么每1 kB,將有一個(gè)播放中斷和錄音中斷。1 s中的中斷次數(shù)為:1×11k/1k△11。

3 聲卡驅(qū)動(dòng)程序

3.1 PCI局部總線

    本文所選用的聲卡是Cirrus Logic公司的CS4281/AC′97 PCI聲卡,作為一個(gè)PCI設(shè)備,在設(shè)備的初始化階段,他和一般的PCI設(shè)備的步驟相同。

    每一個(gè)PCI總線設(shè)備都有一個(gè)配置寄存器空間,他使目標(biāo)設(shè)備的配置簡單易行。配置空間是一個(gè)容量為256 B并具有特定結(jié)構(gòu)的地址空間。配置寄存器是PCI設(shè)備的硬件與PCI設(shè)備的初始化軟件及錯(cuò)誤處理軟件之間的信息交換區(qū),以便軟件對(duì)PCI設(shè)備進(jìn)行識(shí)別和控制以及PCI設(shè)備向軟件反映設(shè)備狀態(tài)和要求。該空間分為頭標(biāo)區(qū)和設(shè)備關(guān)聯(lián)區(qū)兩部分。一個(gè)設(shè)備的配置空間不僅在系統(tǒng)自舉時(shí)可以訪問,而且在其他時(shí)間內(nèi)也可以訪問。

3.2 聲卡的驅(qū)動(dòng)結(jié)構(gòu)及流程

(1) 聲卡的探測(cè)以及入口

    VxWorks BSP在syslib.c中探測(cè)并初始化系統(tǒng)中的PCI設(shè)備,檢測(cè)設(shè)備的I/O映射地址,內(nèi)存映射地址以及中斷向量和級(jí)別,這些硬件參數(shù)對(duì)于主芯片的讀寫和掛接中斷起到至關(guān)重要的作用。因此,在這里加入聲卡的探測(cè)模塊。然后將探測(cè)到的參數(shù)傳遞給驅(qū)動(dòng)程序入口函數(shù)。

    在聲卡的探測(cè)模塊中,利用的是CS4281/AC′97的廠商標(biāo)識(shí)和設(shè)備標(biāo)識(shí),得到他的功能號(hào)、總線號(hào)和設(shè)備號(hào).然后配置他的PCI配置空間,將聲卡的寄存器映射。最后得到聲卡內(nèi)存映射基地址以及中斷向量和級(jí)別。

(2) 入口函數(shù)

    入口函數(shù)主要完成CS4281控制芯片和CS4297編解碼芯片的初始化,DMA緩沖區(qū)內(nèi)存分配,設(shè)置采樣率和格式及掛接中斷等任務(wù)。

    CS4281芯片的初始化要嚴(yán)格按照文獻(xiàn)[4]的說明順序進(jìn)行。CS4297編解碼芯片的初始化主要完成耳機(jī)和麥克風(fēng)的選擇、打開,音量設(shè)置等任務(wù),涉及到的寄存器有PCM_OUT_VOLUME,MASTER_VOLUME,HEAD-PHONE_VOLUME,GENERAL_PURPOSF,MICRO-PHONE_VOLUME,INPUT_MUX_SELECT,RE-CORD_GAIN,GENERAL_PURPOSE。為DMA播放和錄音緩沖區(qū)分配連續(xù)的2 kB內(nèi)存空間,把分配的內(nèi)存空間基地址寫入DMA基地址寄存器。在本文中,我們選擇的是8 b單聲道格式和11 025 Hz取樣頻率,經(jīng)過計(jì)算,把相應(yīng)的值寫入DMA引擎模式寄存器,把采樣率寫人DACSR和ADCSR。最后利用探測(cè)模塊中取得的中斷向量和中斷級(jí)把中斷號(hào)和中斷處理函數(shù)掛接在一起。

(3) 聲音系統(tǒng)的啟動(dòng)和關(guān)閉

    該模塊主要完成錄音的開啟和關(guān)閉、播放的開啟和關(guān)閉。錄音的開啟即把0寫入DMA引擎控制寄存器1中的MSK位,且使能中斷;錄音的關(guān)閉即把1寫入DMA引擎控制寄存器1中的。MSK位。播放的開啟即把0寫人DMA引擎控制寄存器0中的MSK位,且使能中斷;播放的關(guān)閉即把1寫入DMA引擎控制寄存器0中的MSK位。

(4) 中斷處理程序

    CS4281有一個(gè)中斷狀態(tài)寄存器和一個(gè)中斷屏蔽寄存器,他們對(duì)應(yīng)位意義相同。中斷狀態(tài)寄存器反映了聲卡能產(chǎn)生的幾種中斷。一旦有中斷發(fā)生,分析中斷狀態(tài)寄存器,判斷中斷類型,再做相應(yīng)的處理。根據(jù)我們的設(shè)計(jì),如果是播放中斷則釋放播放信號(hào)量,促使上層軟件拷貝聲音數(shù)據(jù)至下層軟件;如果是錄音中斷則釋放錄音信號(hào)量,促使上層軟件從下層軟件取走已到達(dá)的聲音數(shù)據(jù)。最后設(shè)置中斷結(jié)束標(biāo)志。

(5) 播放和發(fā)送時(shí)的數(shù)據(jù)流

    播放時(shí)的數(shù)據(jù)流。聲卡中的播放緩沖(上文中所設(shè)的DMA緩沖)和FIFO0(從格式化器formatter接收聲音數(shù)據(jù),按先入先出方式存儲(chǔ),供CS4297芯片播放)之間數(shù)據(jù)傳輸由DMA0控制。DMA0引擎盡量保持FIFO0滿。播放緩沖是個(gè)2 kB的內(nèi)存,他的起始地址被寫進(jìn)DMA0基地址寄存器(DBA0)。2 047 B(計(jì)數(shù)應(yīng)比所分配的字節(jié)數(shù)小1,因?yàn)橹袛喟l(fā)生于roll-unders模式下)寫入DMA0基本計(jì)數(shù)寄存器(DBC0),DMA0引擎控制從播放緩沖中讀入的字節(jié)數(shù)。當(dāng)播放緩沖半空或空,將產(chǎn)生一個(gè)中斷,促使從上層軟件取數(shù)據(jù)。

    錄音時(shí)的數(shù)據(jù)流。聲卡中的錄音緩沖和FIFO1(從CS4297芯片接收聲音數(shù)據(jù),按先入先出方式存儲(chǔ),傳給格式化器formatter)之間數(shù)據(jù)傳送受控于DMA1。DMA1引擎盡量保持FIFO1為空,他同樣也計(jì)算寫進(jìn)錄音緩沖的字節(jié)數(shù)。當(dāng)錄音緩沖半滿或滿,將產(chǎn)生一個(gè)中斷,促使上層軟件把數(shù)據(jù)取走。

4 UDP通信

4.1 UDP協(xié)議

    在以太網(wǎng)設(shè)施基礎(chǔ)上,VxWorks使用因特網(wǎng)組件TCP/IP提供的端到端的傳輸能力在位于不同的主機(jī)上的任務(wù)間傳輸用戶數(shù)據(jù)。在VxWorks中,使用Socket作為應(yīng)用程序和TCP/IP協(xié)議的接口。Socket有2種基本類型:可靠的數(shù)據(jù)流SOCK_STREAM,使用TCP協(xié)議;數(shù)據(jù)報(bào)SOCK_DGRAM,使用UDP協(xié)議。

    UDP相對(duì)于TCP有以下一些優(yōu)點(diǎn)[2]:

(1) UDP的報(bào)文短,利于減小傳輸時(shí)延;

(2) UDP是無連接協(xié)議,發(fā)送數(shù)據(jù)前不需要建立連接,適合于聲音數(shù)據(jù)這種實(shí)時(shí)性要求高的應(yīng)用;

(3) UDP沒有擁塞控制,因此網(wǎng)絡(luò)出現(xiàn)的擁塞不會(huì)使源主機(jī)的發(fā)送速率降低。

    UDP的這些優(yōu)點(diǎn)對(duì)于聲音數(shù)據(jù)的實(shí)時(shí)傳輸非常重要,這些優(yōu)點(diǎn)將保證傳輸盡可能有一個(gè)短時(shí)延、恒定的速度,因此選擇UDP。

    在無連接的Socket中,在通信的兩端分別創(chuàng)建客戶機(jī)端和服務(wù)器端,通信雙方在整個(gè)過程中是平等的,雙方直接通過Socket調(diào)用來發(fā)送或接收數(shù)據(jù)報(bào)。

    UdpClient模塊:創(chuàng)建客戶端Socket;初始化服務(wù)器端地址;FOREVER{調(diào)用UDP發(fā)送模塊;發(fā)送數(shù)據(jù)到服務(wù)器}。

   UdpServer模塊:創(chuàng)建本地地址;創(chuàng)建服務(wù)器端Sock-et;把Socket和本地地址綁定起來;FOREVER{接收數(shù)據(jù);調(diào)用UDP接收模塊)。

4.2 UDP發(fā)送

    發(fā)送模塊等待錄音信號(hào)量。如果獲得,表示一些新的數(shù)據(jù)在錄音緩沖中已有效。將把新數(shù)據(jù)從錄音緩沖拷入上層軟件存儲(chǔ)區(qū),然后通過Socket把他發(fā)送到另一端主機(jī)。如果上層軟件中的存儲(chǔ)區(qū)滿,丟棄舊分組存入新分組。

4.3 UDP接收

    接收模塊等待從Socket來的數(shù)據(jù)。如果獲得播放信號(hào)量,表示播放緩沖區(qū)中的數(shù)據(jù)已被播放,將把上層軟件存儲(chǔ)區(qū)中的數(shù)據(jù)拷入播放緩沖;否則,任務(wù)將被掛起。如果上層軟件中的存儲(chǔ)區(qū)滿,丟棄舊分組存入新分組。

5 遇到的主要問題

    在本文所搭建的環(huán)境中,能較好地實(shí)現(xiàn)兩塊聲卡之間的通話。開發(fā)過程中,主要遇到兩個(gè)問題:

    (1) 聲卡中沒有聲音數(shù)據(jù)。聲卡的FIFO緩沖區(qū)及DMA緩沖區(qū)中均沒有數(shù)據(jù)。經(jīng)分析查出:CS4297芯片中關(guān)于耳機(jī)和麥克風(fēng)的寄存器沒有打開和選中,耳機(jī)和麥克風(fēng)一直處于“mute”狀態(tài)。關(guān)掉"mute'’后,問題解決。

    (2) 不能產(chǎn)生中斷。DMA緩沖區(qū)中已有數(shù)據(jù),根據(jù)程序設(shè)計(jì),此時(shí)應(yīng)產(chǎn)生中斷,由上層通信模塊取走聲音數(shù)據(jù),但中斷一直不能產(chǎn)生。經(jīng)分析原因?yàn)椋涸?strong>聲卡探測(cè)程序段獲得的中斷級(jí)直接用作中繼號(hào)來掛接中斷。解決方法:通過中斷級(jí)來獲取中斷向量,再獲取中斷號(hào),用來掛接中斷處理程序。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競爭優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡稱"軟通動(dòng)力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉