日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

WINCE6.0下的 IMX51 AC97驱动 简述

發布時間:2024/3/24 编程问答 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 WINCE6.0下的 IMX51 AC97驱动 简述 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

AC97驅動接說明

本驅動使用IMX51的 SSI接口支持的AC97接口,對外接支持AC97 2.0協議的UCB1400芯片。

本驅動能夠實現全雙工的PCM碼率的播放、錄制,同時支持多種采樣率的PCM數據,包括44.1 --8Khz。此外,對于單、雙聲道也同時給予支持。

?

?? 1、WINCE6.0的聲音驅動模型

?

?

圖1:WINDOWS CE驅動模型

WINCE提供了WAVEAPI給用戶使用,包括:WaveOutOpen,WaveOutMessage、WaveInOpen、AddinBuffer等。

WINCE提供了一個豐富的中間層,來幫助應用和驅動之間的銜接,其中包括AudioCompression(語音編碼變換)、Software Mixer(提供不同碼率數據的自由轉換)。

對于驅動層,WINCE目前提供三種AUDIO模型,分層的AUDIO MDD-PDD模型、Unified Audio Model和 WaveDev2 Audio Model。

我們目前使用WaveDev2 Audio Model來完成聲音的驅動,該模型提供了一個結構清晰的類體系完成對設備的抽象和操作,包括:DEVICE、STREAM等。

?

2、AC97接口原理

AC972.1的標準基本幀結構如下圖2。

?

AC97接口一般采用12.288MHZ的外部時鐘,每256個CLK產生一個SYNC時鐘信號,即12.288MHZ/256 = 48KHZ。數據在每個CLK的上升沿進行數據傳輸。

AC97的幀結構,由13個Slot組成,包括 1個16bit Slot,12個20bit Slot:

??? 編號??? 代稱????????? 數據寬度????? 說明

Slot 0?? TAG??????????? 16bits???????? 本幀的數據組織定義

Slot 1?? cmdAddr??????? 20bits???????? 命令地址

Slot 2?? cmdData??????? 20bits???????? 命令數據

Slot 3?? Pcm Left??????? 20bits???????? PCM左聲道數據

Slot 4?? Pcm Right?????? 20bits???????? PCM右聲道數據

(其他SLOT見相關協議)

AC97采用雙向數據通道,SDATA_OUT代表Playback方向,SDATA_IN代表Record數據。實際使用中,各個時隙都是要全部傳送的,即使沒有數據。如果要控制AC97設備,就直接通過Slot1-slot2進行命令發送,與此同時還可以痛過Slot3-slot4進行聲音回放。對于RECORD則是在SLOT3-SLOT4進行數據接收。

?

對于TAG的定義如下:

// MSB FIRST

?BIT16:幀有效標志1代表整個后面的幀有效

?BIT15-BIT3:SLOT1 - SLOT12 時隙是否有效(代表有效)

?BIT2-BIT0 : 表示Codec選擇,Primary Codec時鐘使用 00代表

?

?

3、硬件采樣和軟件采樣

?????? 硬件采樣頻率由硬件特性決定,比如:48KHZ,16BIT,雙聲道等。這一旦設定后基本就不做調整。

?????? 軟件采樣頻率主要由應用決定,比如:44.1KHZ,8BIT,單聲道等。

?????? 所有,這樣就存在一些差異.WAVEDEV2的驅動模型完全支持應用采樣需求和硬件標準之間進行碼率匹配、聲道匹配等。

?????? 軟件匹配的例子如下圖:

?????? (將硬件的44.1KHZ,16BIT采樣變換成軟件要求的22KHZ,16BIT? 采樣)

?

?

4、IMX51平臺聲音接口實現模型

IMX51的聲音接口硬件配置較復雜,需要經過:

IOMUX接口進行 GPIO配置

AUDMUX接口

SSI接口

DMA數據搬運

等幾個標準環節,只有各個環節都配置正確,系統才能正常運轉。

?

??????? 4.1 IMX51的 AUDMUX接口

IMX51的AUDMUX支持將內部的SSI接口和外部的AC97接口連接起來。AUDMUX的定義包括:

?

?

實際應用中要注意選擇好對應關系。

AUDMUX的模式設置:

NORMAL MODE? --點對點模式

????????????????? MODE0 = 0?

RXDSEL[2:0](配置要點)

???????????????????????????????????????

配置AUDMUX寄存器的時候要根據IMX51rm.pdf PAGE 502頁進行。

?

?

4.2 IMX51的 SSI接口

IMX51??? 的SSI 可以配置為AC97模式。

當SSI接口被配置為AC97模式的時候,內部會自動配置一些寄存器(這些寄存器無需也不可能再更改),用戶只需要關心如下寄存器即可:

1)STCCR[WL]

2)STCCR[DC]

在AC97模式下,主要對:

SACNT、SACADD、SACDAT、SATAG進行操控。

詳細情況請仔細閱讀IMX51手冊。

?

4.3 IMX51的 DMA接口

DMA接口使用原理主要如下圖。在AUDIO驅動中一般使用雙BUFFER接口進行輪替操作。以便讓聲音聽起來不卡。

在回放的時候DMA就是從BUFFER1中向SSI FIFO中發送數據,SSI FIFO在設定的中斷WATERMARK(中斷觸發閾值)達到后就會自動向DMA進行請求。當BUFFER1數據發送完畢后,CPU會得到DMA的中斷請求,CPU檢查后命令DMA切換到BUFFER2進行自動數據發送,同時CPU完成BUFFER1數據重填充的工作。

?

?

?

當然,值得注意的事情是一般CPU的DMA通道有很多,但只有1個DMA中斷,不同的設備使用DMA 通道的話,就需要做一個基礎設施,我們稱作 Dma Engine,大家都向他申請DMA資源,并掛入自己的處理事件。

?

?

5、驅動實現中數據流

?

?

?

?

總結

以上是生活随笔為你收集整理的WINCE6.0下的 IMX51 AC97驱动 简述的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。