新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 基于SoC的AC97技術硬件設計

基于SoC的AC97技術硬件設計

作者: 時間:2011-09-21 來源:網絡 收藏

符合Audio Codec'97協(xié)議(簡稱AC'97,是由Intel公司提出的數字音頻處理協(xié)議)的音頻控制器不但廣泛應用于個人電腦聲卡,并且為個人信息終端設備的SOC(如Intel的PXA250)提供音頻解決方案。本文的音頻控制器可為DSP內核提供數字音頻接口。全文在介紹音頻控制器結構的同時,著重強調其與內核之間數據的協(xié)調傳輸,并給出FPGA實現內核仿真環(huán)境對音頻控制器進行功能測試的方法。

音頻控制器的結構和原理

AC'97系統(tǒng)由音頻編解碼器(Codec)和音頻控制器(Controller)兩個部分組成。其中音頻編解碼器實現A/D、D/A轉換、音效處理等功能,而音頻控制器則是內核與音頻編解碼器之間的數字接口,負責控制數據和音頻數據的串/并、并/串轉換以及傳輸。


性能指標

的音頻控制器符合AC'97規(guī)范V2.3,其主要指標如下:支持雙聲道錄放音;支持定采樣率(48kHz)和變采樣率錄放音;20位寬16層深PCM音頻數據FIFO;支持省電模式;支持中斷、DMA和輪詢3種方式實現與內核或內存的數據交換。

組成結構音頻控制器的主結構如圖1所示。內核/內存和音頻控制器接口(CORE/MEMORY,CTRL INTERFACE)連接音頻控制器與內核或內存。CS是片選信號,WR和RD分別是讀寫使能,ADDR(16位寬)是音頻控制器的端口地址,DIN和DOUT(都是32位寬)分別是總線上的輸入輸出數據,IRQ和DMA REQ分別是中斷和DMA請求。主模塊(AC'97 CTRL MASTER)負責音頻控制器(AC'97 CONTROLLER)與內核或內存(DMA模式下)之間PCM音頻數據、控制和狀態(tài)寄存器組(CONTROLSTATUS REGS)數據以及音頻編解碼器(AC'97 CODEC)內部寄存器數據各并行數據的傳輸,由主時鐘CLK同步。電源控制模塊(POWER CTRL)可以啟動省電模式,也由主時鐘CLK同步。

本文引用地址:http://butianyuan.cn/article/150187.htm

圖1 音頻控制器的主結構

4組FIFO用于存放PCM音頻數據,都是20位寬16層深,因此可以支持最高20位寬分辨率。當FIFO滿或者空時,可以發(fā)出中斷或DMA請求。音頻編解碼器內部寄存器讀寫緩存器(CODEC REG WRITE/READ BUF,簡稱CRBUF)是2個32位寄存器。寫緩沖器可以緩存準備寫入音頻編解碼器內部寄存器的控制字,其空時可以發(fā)出中斷請求;讀緩沖器可以緩存已經從音頻編解碼器內部寄存器中讀出的狀態(tài)字,其滿時可以發(fā)出中斷請求??刂坪蜖顟B(tài)寄存器組包含8個32位寄存器,其中,通用控制寄存器的主要功能是系統(tǒng)冷啟動、熱啟動;通用狀態(tài)寄存器反映音頻編解碼器狀態(tài);其他寄存器的功能包括配置PCM輸入輸出聲道、配置和產生中斷或DMA請求。輔模塊(AC'97 CTRL SLAVE)實現音頻控制器與音頻編解碼器之間(AC-LINK)數據幀的串行發(fā)送和接收。輸出數據(SDATA_OUT)由輔時鐘BIT_CLK上跳沿同步,輸入數據(SDATA_IN)由BIT_CLK下跳沿同步。

工作原理

DSP內核通過讀寫音頻控制器CSRS分別來獲得音頻編解碼器狀態(tài)和設置音頻編解碼器工作模式;通過讀寫FIFO來緩沖音頻錄制和播放過程中的PCM音頻數據;通過讀寫CRBUF來獲得音頻編解碼器內部寄存器狀態(tài)和設置音頻編解碼器內部寄存器參數。下面以音頻播放中的主要步驟為例,介紹音頻控制器的工作原理。

(1)寫滿PCM左聲道輸出FIFO;

(2)寫滿PCM右聲道輸出FIFO;

(3)輪詢音頻編解碼器準備好(Codec ready)信號是否有效;

(4)讀音頻編解碼器的26H寄存器,判斷D/A轉換器是否準備好;

(5)允許CRBUF產生中斷請求;

(6)寫0到音頻編解碼器的02H寄存器,使主音量衰減最小;

(7)等待CRBUF產生中斷,響應中斷并寫0到音頻編解碼器的18H寄存器,使PCM輸出音量衰減最??;

(8)等待CRBUF產生中斷,響應中斷并寫1到音頻編解碼器的2AH寄存器,即以變采樣率播放音頻;

(9)等待CRBUF產生中斷,響應中斷并寫5622(十六進制)到音頻編解碼器的2CH寄存器,即以22.05kHz采樣率播放音頻;

(10)允許PCM左右聲道FIFO產生滿中斷;

(11)設置PCM左右聲道定速率或者變速率傳輸,并開始播放音頻;

(12)等待FIFO中的PCM碼傳送掉16層并發(fā)出中斷請求;

(13)判斷是否是PCM左聲道FIFO發(fā)出中斷請求,如果是,則寫16層PCM左聲道數據;

(14)判斷是否是PCM右聲道FIFO發(fā)出中斷請求,如果是,則寫16層PCM右聲道FIFO數據;

(15)如果內存中PCM數據被讀完,則放音結束,否則返回第12步繼續(xù)放音。


上一頁 1 2 下一頁

評論


相關推薦

技術專區(qū)

關閉