Gitee倉庫:https://gitee.com/openharmony-sig/knowledge_demo_temp/tree/master/dev/team_x/demo_record_pen
一、Codec介紹
WM8978為DAC+ADC芯片,本身并不具備編解碼的功能,一方面,可通過I2S接口接收PCM數據,轉為模擬信號輸出,此為DAC過程,即放音;一方面,可接收模擬信號轉為數字信號,通過I2S接口傳輸給MCU,此為ADC過程,即錄音。WM8978還使用I2C接口配置其工作參數,比如音量,EQ,3D環繞等。WM8978本身可直連1W/8歐的小喇叭。

引腳配置:

1、I2S和I2C的使能
首先需要打開config下usr_config.mk文件,打開編譯I2S和I2C的使能

2、導入lal_audio文件
打開使能后進行編譯,導入lal_audio文件,可見wm8978_init函數,對引腳進行使能:

3、WM8978的I2C配置
WM8978需要使用I2C引腳對輸入方式、喇叭音量、輸入增益等等進行控制,詳情可見lal_audio中其它函數

如上圖,進行初始化后即可對錄音和放音進行測試;
4、WM8978錄音測試
其中需要用到I2S的讀寫函數,本文件中設置的采集頻率和位寬是16K和16位(方便后續語音識別)

使用二維數組緩存的方式進行讀取和播放,經驗證后滿足要求。
hi_u32 WM8978_Write_Reg(hi_u8 reg, hi_u16 val)
{
//unsigned char buf[2];
//buf[0] = (reg>8)&0X01);
//buf[1] = val&0XFF;
hi_i2c_data i2c_data;
hi_u8 send_data[2]= { 0 };
send_data[0] = (reg>8)&0X01);
send_data[1] = val&0XFF;
/* send_data[0] = reg;
send_data[1] = val; */
i2c_data.send_buf = send_data;
i2c_data.send_len = 2;
//(WM8978_DEVICE_ADDR>>1)|0
wm8978_register_tbl[reg] = val;
// return hi_i2c_writeread(HI_I2C_IDX_1,(WM8978_DEVICE_ADDRADC輸入部分的增益)
//gain:0~7,0表示通道禁止,1~7,對應-12dB~6dB,3dB/Step
void WM8978_AUX_Gain(hi_u8 gain)
{
hi_u16 regval;
gain&=0X07;
regval=WM8978_Read_Reg(47); //讀取R47
regval&=~(7ADC輸入部分的增益)
//gain:0~63,對應-12dB~35.25dB,0.75dB/Step
void WM8978_MIC_Gain(hi_u8 gain)
{
gain&=0X3F;
WM8978_Write_Reg(45,gain); //R45,左通道PGA設置
WM8978_Write_Reg(46,gain|1ADC輸入部分的增益)
//gain:0~7,0表示通道禁止,1~7,對應-12dB~6dB,3dB/Step
void WM8978_LINEIN_Gain(hi_u8 gain)
{
hi_u16 regval;
gain&=0X07;
regval=WM8978_Read_Reg(47); //讀取R47
regval&=~(7
審核編輯:湯梓紅
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
PCM
+關注
關注
1
文章
199
瀏覽量
53832
-
嵌入式
+關注
關注
5122
文章
19424
瀏覽量
312792
-
錄音筆
+關注
關注
0
文章
90
瀏覽量
13290
-
WM8978
+關注
關注
1
文章
5
瀏覽量
3868
-
Hi3861
+關注
關注
1
文章
63
瀏覽量
6878
發布評論請先 登錄
相關推薦
錄放音電話設計問題
本帖最后由 gk320830 于 2015-3-8 02:05 編輯
語音芯片ISD4004如何與電話連接才能實現對電話的錄放音呢?錄音由電話話筒錄入,放音到電話話筒,謝謝!
發表于 03-27 11:25
wm8978的lout和rout沒有輸出
這一路稍微和歷程的配置有點不一樣。我們用Rout1和Lout1做的。附件如下圖所示:用sai的那一路播放和錄音都正常,但是wm8978這一路沒有聲音,我們量Rout1和Lout1引腳也沒有電平,輸入
發表于 01-24 23:57
請問m8960 wm8974 wm8978 wm8994 一系列音頻接口芯片在錄放音的音質上有提升嗎?
wm8960 wm8974 wm8978 wm8994,這一系列音頻接口芯片,在錄放音的音質上有沒有提升? 或者只是通道數量的差別?看了看立
發表于 02-19 06:02
數據傳輸進行錄音時進不去中斷
設計的錄放一體的聲卡,進行播放的時候,數據傳輸完成可以進入中斷的,正常播放音頻,為什么進行錄音的時候,進不去中斷呢?IIS DMA設置的都正確啊,求大神指點一下。用的是STM32探索者和WM8
發表于 02-28 00:26
wm8978實現了錄音和播放音樂但無法修改音量
最近用wm8978來實現音樂播放功能,現在已經可以正常錄音,也可以播放wav音頻,mp3用mcu來解碼后也可以正常播放,但遇到個問題,wm8978的MCLK是通過mcu提供的,在播放音
發表于 03-04 23:37
wm8978錄音回放改成24位調不通
wm8978的寄存器R4,將數據長度改為243,修改接收(錄音)和發送(放音)中斷函數。以錄音為例,改為24位數據后需要四次中斷才能接收到兩個聲道的24位數據以左聲道的兩次數據為例,按
發表于 03-16 04:35
I2S總線是怎樣驅動WM8978的
接口只有一個數據引腳,因此在設計引腳的時候,就需要確定是錄音還是放音。WM8978為DAC+ADC芯片,本身并不具備編解碼的功能。1)WM8978可通過I2S接口接收PCM數據,轉為模
發表于 01-05 07:10
Hi3861:智能錄音筆【環境搭建+配網】
。二、項目內容(1)選用Hi3861芯片開發;(2)使用Codec_Wm8978實現收音放音;(3)使用WIFI_AP_STA實現WEB配網;(4)使用云服務語音API識別實現語音識別;三、編譯環境
發表于 12-31 10:35
Hi3861:智能錄音筆【WM8978錄放音】
進行使能:3、WM8978的I2C配置WM8978需要使用I2C引腳對輸入方式、喇叭音量、輸入增益等等進行控制,詳情可見lal_audio中其它函數如上圖,進行初始化后即可對錄音和放音
發表于 12-31 10:41
評論