SylixOS下IIS驅動編程
目錄
1. IIS簡介 1
2. 數字聲音簡介 1
2.1 采樣頻率 1
2.2 量化位數 1
2.3 聲道數 1
3. WAV音頻文件格式簡介 2
3.1 文件格式 2
3.2 原始聲音數據的組織方式 2
4. Mini2440聲卡的連接方式 3
4.1 相關連線說明 3
5. SylixOS下的OSS音頻驅動接口 3
6. 播放聲音流程 4
7. 錄音流程 5
IIS簡介
IIS是飛利浦公司開發的一種用於數字音頻設備之間進行數據傳輸的總線,IIS只負責音頻數據的傳輸,對音頻的控制需要另外的芯片來控制,一般聲卡都會有IIS接口和控制接口,兩者共同協作來完成聲音數據的傳輸和控制。如圖 11所示:
圖 11 聲音傳輸示意圖
數字聲音簡介
主要介紹數字聲音的幾個指標:
采樣頻率
采樣頻率fs就是錄音時每秒對聲音信號的采樣次數,播放時最好也以采樣頻率播放,否則聲音聽起來會變音。常見的采樣頻率有22.050kHz、44.100kHz、48.000kHz等。
量化位數
量化位數指對聲音采樣結果用幾位數據保存,這和聲卡中的ADC的位數相關,常見的有8位、16位等。
聲道數
分為單聲道和雙聲道,雙聲道就是左右兩個聲道,又稱為立體聲,另外更高級的有5聲道和7聲道。
單聲道聲音采樣如圖 21所示,橫軸表示時間,縱軸表示采樣結果,藍色線條表示聲音的原始波形。
圖 21 聲音采樣示意圖
WAV音頻文件格式簡介
文件格式
如圖 31所示,WAV音頻文件由3部分組成:頭部區域、格式描述區域和數據區域。其中格式區域記錄了音頻的聲道數、采樣頻率、和量化位數等信息,數據區域記錄了聲音的數據,這些數據是原始數據,沒有經過壓縮的。像mp3等格式的音頻文件中的數據都是經過壓縮的數據。
圖 31 WAV文件格式
原始聲音數據的組織方式
如圖 32所示,為4種情況下WAV文件中音頻數據的組織方式。
圖 32 WAV聲音數據組織方式
Mini2440聲卡的連接方式
如圖 41所示,在mini2440中,聲卡的型號為UDA1341TS,和IIS接口相關的有5根線,還有另外3條線用於音頻控制。
圖 41 聲卡連接圖
相關連線說明
CDCLK:聲卡工作時鐘,一般為采樣頻率的256、384、512倍,即256fs、384fs、512fs
I2SSCLK:數據串行時鐘,數值為量化位數*聲道數*采樣頻率。如果量化位數為16,聲道數為2,則I2SSCLK=32fs
I2SLRCLK:左右聲道切換頻率,該數值應等於采樣頻率
I2SSDI:音頻數據輸入,即由聲卡傳輸數據給2440,錄音狀態
I2SSDO:音頻數據輸出,即由2440傳輸數據給聲卡,播放狀態
控制接口:根據聲卡的不同,接口也不同,比如有的是I2C接口,有的是L3接口,具體看聲卡手冊。控制接口主要控制聲音的音量,是否靜音,增益等。
播放和錄音時,三個時鐘頻率要設置正確,否則沒有聲音或者聲音失真。
SylixOS下的OSS音頻驅動接口
SylixOS下的OSS音頻驅動接口可以在SylixOS\system\device\sound\soundcard.h中查看,主要有幾點需要註意:
播放和錄音是通過讀寫/dev/dsp設備來實現的
音量、增益等控制是通過讀寫/dev/mixer設備來實現的
應用程序通過ioctl來進行參數設置、控制等操作,並且具體操作對應ioctl中的命令都在soundcard.h定義好了,比如:
設置量化位數是用"SNDCTL_DSP_SETFMT",設置采樣頻率是"SNDCTL_DSP_SPEED",設置音量是用"SOUND_MIXER_WRITE_VOLUME"等等。
播放聲音流程
1. CPU從上層拷貝音頻數據到緩沖區,拷貝完成一個緩沖區後發送一個DMA傳輸請求,這時DMA開始傳送剛剛拷貝好的緩沖區數據,同時CPU繼續從上層拷貝音頻數據到下一個緩沖區,如圖 61所示。
圖 61 CPU拷貝,DMA傳輸
2. CPU拷貝數據的速度是比DMA傳送數據速度快的,所以當發生CPU要拷貝到的緩沖區和DMA當前正在處理的緩沖區重疊時,需要阻塞線程,這是通過信號量實現的,如圖 62所示。
圖 62 阻塞線程
3. 當DMA傳送完成後產生中斷,在中斷處理程序中喚醒剛才阻塞的線程,CPU就可以繼續拷貝數據到剛才DMA處理的緩沖區裏了,如圖 63所示。
圖 63 喚醒線程
錄音流程
錄音的流程和播放流程大體相似,只是先由DMA傳送數據到緩沖區,然後由CPU拷貝緩沖區內容給上層應用程序。當CPU處理的緩沖區和DMA當前處理的緩沖區重合時,同樣阻塞線程,直到DMA處理完後在中斷中喚醒。
SylixOS下IIS驅動編程