當(dāng)前位置:首頁 > 單片機(jī) > 單片機(jī)
[導(dǎo)讀]在消費(fèi)電子產(chǎn)品中,往往都會用到音頻系統(tǒng)來播放音樂、進(jìn)行通話等多媒體應(yīng)用,此外,對于一些需語音提示的產(chǎn)品,音頻部分都是不可或缺的功能。筆者此處就s3c2416的音頻驅(qū)動實(shí)現(xiàn)作一個簡單的介紹。1. IIS音頻總線s3c24

在消費(fèi)電子產(chǎn)品中,往往都會用到音頻系統(tǒng)來播放音樂、進(jìn)行通話等多媒體應(yīng)用,此外,對于一些需語音提示的產(chǎn)品,音頻部分都是不可或缺的功能。筆者此處就s3c2416的音頻驅(qū)動實(shí)現(xiàn)作一個簡單的介紹。

1. IIS音頻總線

s3c2416支持IIS、PCM、AC97這三種音頻接口,此處只分析IIS音頻接口。IIS接口(Inter-IC Sound)在20世紀(jì)80年代首先被飛利浦公司用于消費(fèi)音頻,為數(shù)字音頻設(shè)備之間的音頻數(shù)據(jù)傳輸而制定的一種總線標(biāo)準(zhǔn)。IIS有以下三個主要的信號:

1) 串行時鐘SCLK,也叫做位時鐘(BCLK)。數(shù)字音頻的每一位均需對應(yīng)一個SCLK脈沖,因此位時鐘頻率應(yīng)大于等于2*采樣頻率*采樣位數(shù)。乘以2表示每個采樣會產(chǎn)生左聲道和右聲道的數(shù)據(jù)。

2) 幀時鐘LRCK,也叫做左右聲道切換時鐘(WS)。LRCK為1時表示傳輸?shù)氖怯衣暤赖臄?shù)據(jù),為0時表示傳輸?shù)氖亲舐暤赖臄?shù)據(jù),因此IIS是非常適合于立體聲系統(tǒng)的。LRCK是一個占空比約50%的方波,這個頻率是需要盡可能與采樣頻率一致的,不然無法體現(xiàn)原來的音頻本質(zhì)。

3) 串行數(shù)據(jù)SDATA,用二進(jìn)制補(bǔ)碼表示音頻數(shù)據(jù)。在串行時鐘SCLK脈沖下,數(shù)據(jù)一位一位出現(xiàn)在SDATA線上。對于具體的IIS主機(jī)或設(shè)備,為支持全雙工(例如通話時需同時支持放音與錄音),串行數(shù)據(jù)線分串行輸入SDI和串行輸出SDO這兩根。SDI用來傳輸采樣設(shè)備數(shù)字化后的錄音數(shù)據(jù),SDO用來傳輸需播放的音頻數(shù)據(jù)。

有時為了IIS主控制與IIS設(shè)備能夠更好的同步,還需要傳輸一路時鐘信號MCLK,也叫做主時鐘。主要用于IIS設(shè)備A/D、D/A采樣時的采樣時鐘,一般是采樣頻率的256倍、384倍、512倍、768倍。在滿足要求的條件下,應(yīng)盡可能選用較低的主時鐘。

2. WM8960音頻編解碼器

WM8960是歐勝微電子推出的一款低功耗、高質(zhì)量的立體編碼解碼器。該芯片內(nèi)置有麥克風(fēng)接口、立體聲耳機(jī)驅(qū)動器以及D類立體聲揚(yáng)聲器驅(qū)動,24比特模數(shù)轉(zhuǎn)換器(ADC)和數(shù)模轉(zhuǎn)換器(DAC)。

WM8960具有三對左右聲道的模擬輸入,其中INPUT1專用于Mic輸入,支持單端或差分的Mic信號接入。這個輸入具有一個程控放大器(PGA),并且可用自動電平控制(ALC)對Mic信號進(jìn)行增益放大。其它的INPUT2、3可做為Mic差分接入的同相輸入或線輸入。

WM8960具有一對左右聲道的耳機(jī)輸出,16歐負(fù)載時,輸出40mW。一對D類左右聲道揚(yáng)聲器輸出,每聲道8歐負(fù)載,在1W輸出功率時,具有87%的效率。一路左右聲道混合輸出。

3. WM8960驅(qū)動編寫

聲音是模擬信號,cpu是不能處理模擬信號的,并且認(rèn)為模擬信號也是不具有傳輸性的。因此音頻編解碼器至少具有三個主要功能部分:模數(shù)轉(zhuǎn)換器(ADC)、數(shù)模轉(zhuǎn)換器(DAC)、程控放大器(PGA)。ADC用來采樣外部的模擬聲音信號(如Mic錄音),進(jìn)行離散化后,轉(zhuǎn)換成數(shù)字音頻,通過音頻總線(如IIS)傳輸給cpu,cpu再對數(shù)字音頻進(jìn)行處理,如調(diào)頻、混合、存儲等。DAC用來把從cpu過來的數(shù)字音頻信號還原成原來的模擬聲音信號,DAC轉(zhuǎn)換后的離散化PCM調(diào)制信號再通過濾波器真實(shí)還原出原來的模擬聲音。PGA可在各個階段對音頻信號進(jìn)行可編程的增益放大,例如音量的控制(可參考WM8960_HeadphoneVolume()函數(shù)),Mic靈敏度的調(diào)節(jié)(可參考WM8960_RecorderVolume()函數(shù))等。

WM8960在使用前必須進(jìn)行初始化,即需配置音頻接口IIS的參數(shù)(可參考WM8960_Init()的實(shí)現(xiàn)),若進(jìn)行錄音,需配置錄音路徑的上電、接通,并進(jìn)行增益的設(shè)定(具體見WM8960_RecorderStart()函數(shù)的實(shí)現(xiàn))。若進(jìn)行放音,需配置是耳機(jī)、揚(yáng)聲器等的話音路徑,進(jìn)行增益設(shè)定(可參考WM8960_HeadphoneStart()函數(shù)的實(shí)現(xiàn))。IIS是音頻接口,只能傳輸音頻信號,因此WM8960還需另外的IIC接口,通過IIC總線寫寄存器對這些配置進(jìn)行設(shè)定。IIC驅(qū)動編寫在前面的章節(jié)有詳細(xì)的介紹,此處不再細(xì)說,WM8960模塊驅(qū)動WM8960.c如下:

#include "IIC.h"

#include "WM8960.h"

#define VolumeLevel 7

static int RecorderVolume;

static int HeadphoneVolume;

// WM8960寄存器不能通過IIC讀,開辟緩存記錄寄存器的變化

static unsigned short WM8960_Reg[56] = {

0x0097, 0x0097, 0x0000, 0x0000,

0x0000, 0x0008, 0x0000, 0x000a,

0x01c0, 0x0000, 0x00ff, 0x00ff,

0x0000, 0x0000, 0x0000, 0x0000,

0x0000, 0x007b, 0x0100, 0x0032,

0x0000, 0x00c3, 0x00c3, 0x01c0,

0x0000, 0x0000, 0x0000, 0x0000,

0x0000, 0x0000, 0x0000, 0x0000,

0x0100, 0x0100, 0x0050, 0x0050,

0x0050, 0x0050, 0x0000, 0x0000,

0x0000, 0x0000, 0x0040, 0x0000,

0x0000, 0x0050, 0x0050, 0x0000,

0x0002, 0x0037, 0x004d, 0x0080,

0x0008, 0x0031, 0x0026, 0x00e9,

};

static void WM8960_WriteReg(unsigned char RegAddr, unsigned short Value)

{

unsigned char Data;

unsigned char Addr;

// WM8960只有7位的寄存器地址,外加寄存器值第8位,構(gòu)成8位數(shù)據(jù)

Addr = (RegAddr<<1) |((Value>>8) & 0x1);

// WM8960有9位的寄存器值,最高位與寄存器地址一齊發(fā)送

Data = (unsigned char)Value; // 低8位寄存器值

IIC_WriteBytes(WM8960_SlaveAddr,Addr, &Data, 1);

WM8960_Reg[RegAddr] = Value; // 寫成功后更新寄存器的值

}

static unsigned short WM8960_ReadReg(unsigned char RegAddr)

{

return WM8960_Reg[RegAddr]; // 返換緩存的WM8960寄存器的值(9位)

}

unsigned char WM8960_HeadphoneVolume(unsigned char Control)

{

// -10db ~ 6db (0x6f ~ 0x7f)

unsigned char Level;

if (Control == VolumeDown) { // 耳機(jī)音量減

if ((0x7f-0x6f)/VolumeLevel ==0) {

HeadphoneVolume--;

} else {

HeadphoneVolume -=(0x7f-0x6f)/VolumeLevel;

}

if (HeadphoneVolume < 0) {

HeadphoneVolume = 0;

}

} else {// 耳機(jī)音量加

if ((0x7f-0x6f)/VolumeLevel ==0) {

HeadphoneVolume++;

} else {

HeadphoneVolume +=(0x7f-0x6f)/VolumeLevel;

}

if (HeadphoneVolume >VolumeLevel) {

HeadphoneVolume =VolumeLevel;

}

}

if (HeadphoneVolume == 0) {

Level = 0; // 靜音

} else {

Level =((0x7f-0x6f)*HeadphoneVolume)/VolumeLevel + 0x6f;

}

// Headphone Volume Updata

WM8960_WriteReg(0x02,(1<<8)|Level);

WM8960_WriteReg(0x03,(1<<8)|Level);

return ((HeadphoneVolume*100)/VolumeLevel);// 返回音量百分比

}

void WM8960_HeadphoneStop()

{

unsigned short RegValue;

RegValue = WM8960_ReadReg(0x1a);

RegValue =~((1<<8)|(1<<7)|(1<<6)|(1<<5));

WM8960_WriteReg(0x1a, RegValue);

}

void WM8960_HeadphoneStart()

{

unsigned short RegValue;

// DAC Left/Right,LOUT1/ROUT1Output Buffer Power up

WM8960_WriteReg(0x1a, 0x01e0);

// Left DAC Digital Volume -28db

WM8960_WriteReg(0x0a, 0x01c5);

// Right DAC Digital Volume -28db

WM8960_WriteReg(0x0b, 0x01c5);

// DAC Digital No mute

WM8960_WriteReg(0x05, 0x0000);

// Left DAC to Left Output Mixer

WM8960_WriteReg(0x22, 0x0100);

// Right DAC to Left Output Mixer

WM8960_WriteReg(0x25, 0x0100);

// Left/Right Output Mixer Enable

RegValue = WM8960_ReadReg(0x2f);

RegValue |= (1<<2) |(1<<3);

WM8960_WriteReg(0x2f, RegValue);

}

unsigned char WM8960_RecorderVolume(unsigned char Control)

{

// -10db ~ 10db (0xaf ~ 0xd7)

unsigned char Level;

if (Control == VolumeDown) { //Mic靈敏度調(diào)低

if ((0xd7-0xaf)/VolumeLevel ==0) {

RecorderVolume--;

} else {

RecorderVolume -=(0xd7-0xaf)/VolumeLevel;

}

if (RecorderVolume < 0) {

RecorderVolume = 0;

}

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

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

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

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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