在线时间42 小时
UID3397665
注册时间2017-6-26
NXP金币0
TA的每日心情 | 奋斗 2018-7-12 20:45 |
---|
签到天数: 75 天 [LV.6]常住居民II
中级会员
- 积分
- 441
- 最后登录
- 2018-10-25
|
本帖最后由 NXP+LPC+FSL 于 2017-7-12 12:35 编辑
主要内容:
通过数字麦克风录音,捕获音频信号,产生的PDM数据送给cpu,转化为pcm数据,通过iis总线传输给wm8904,在cn7接入耳机或者音频,就可以实现声音的放大了,接上贴的调音功能,可以通过按键,或者电位器实现对音量的双调,就可以实现话筒+声音放大功能了,就当是扩音功能吧。
本次测试依然用到按键、adc,数字麦克,wm8904等模块,相关初始化工作上个帖子有细讲。。。
最新增加
看到有大神添加了屏显外设,也献上我的最新测试成果吧(先看下效果图)
屏显:利用板子上的usart5,配置后,增加 迪文屏 的相关驱动,并初始化屏幕。
系统上电后,模式显示模拟调节模式。
模拟模式下,旋转电位器,屏幕实时刷新当前音量值
按下PB2,切换模式,屏幕实时刷新模式
数字模式下,按键调节的音量值也实时刷新显示。
配置完时钟,fleccomm后,开始配置IIC波特率为400000UBps
- I2C_MasterGetDefaultConfig(&i2cConfig);
- i2cConfig.baudRate_Bps = WM8904_I2C_BITRATE;
- I2C_MasterInit(DEMO_I2C, &i2cConfig, DEMO_I2C_MASTER_CLOCK_FREQUENCY);
复制代码
然后配置wm8904
- <div><div> WM8904_GetDefaultConfig(&codecConfig);</div><div> codecHandle.i2c = DEMO_I2C;</div><div> codecConfig.format.sampleRate = kWM8904_SampleRate16kHz;</div><div> if (WM8904_Init(&codecHandle, &codecConfig) != kStatus_Success)</div><div> {</div><div> PRINTF("WM8904_Init failed!\r\n");</div><div> }</div></div><div></div>
复制代码
然后就是通过adc采样 电位器的电压值,初始化音量了。。。
- wADCValue = adc_read(ADC_CHANNEL_NUM);
- if(wADCValue != 0xFFFF)
- {
- if(_Cur_Volume<=63)
- _Cur_Volume = (wADCValue*1000)/0xFFFF; // ajust the led blinky freqency
- PRINTF("\r\n----------------\r\n");
- PRINTF("初始化读取当前音量:º%d%%,\r\n" , _Cur_Volume*100/VOLUME_MAX);
- PRINTF("\r\n----------------\r\n");
- Per_wADCValue = adc_read(ADC_CHANNEL_NUM);
- }
复制代码
然后初始化配置 数字麦克,失能fifo
- dmic_channel_cfg.divhfclk = kDMIC_PdmDiv1;
- dmic_channel_cfg.osr = 25U;
- dmic_channel_cfg.gainshft = 3U;
- dmic_channel_cfg.preac2coef = kDMIC_CompValueZero;
- dmic_channel_cfg.preac4coef = kDMIC_CompValueZero;
- dmic_channel_cfg.dc_cut_level = kDMIC_DcCut155;
- dmic_channel_cfg.post_dc_gain_reduce = 1U;
- dmic_channel_cfg.saturate16bit = 1U;
- dmic_channel_cfg.sample_rate = kDMIC_PhyFullSpeed;
- DMIC_Init(DMIC0);
- DMIC_ConfigIO(DMIC0, kDMIC_PdmDual);
- DMIC_Use2fs(DMIC0, true);
- DMIC_SetOperationMode(DMIC0, kDMIC_OperationModePoll);
- DMIC_ConfigChannel(DMIC0, kDMIC_Channel0, kDMIC_Left, &dmic_channel_cfg);
- DMIC_ConfigChannel(DMIC0, kDMIC_Channel1, kDMIC_Right, &dmic_channel_cfg);
- /* FIFO disabled */
- DMIC_FifoChannel(DMIC0, kDMIC_Channel0, FIFO_DEPTH, false, true);
- DMIC_FifoChannel(DMIC0, kDMIC_Channel1, FIFO_DEPTH, false, true);
- DMIC_EnableChannnel(DMIC0, (DMIC_CHANEN_EN_CH0(1) | DMIC_CHANEN_EN_CH1(1)));
- DMIC_DisableIntCallback(DMIC0, DMIC0_Callback);
复制代码
最后配置IIS的发送
- I2S_TxGetDefaultConfig(&tx_config);
- tx_config.divider = 16U; /* divide by 16*/
- tx_config.pdmData = true;
复制代码
到此就配置完了,,,成功配置后,启动板子,串口打印的信息为
这时候对着板子上的数字麦克风讲话是可以从音响听到放大后的声音的,当然,在 上贴的基础上,还增加了按键和电位器调音功能。。。
开机默认为模拟模式,LED11亮,
按下PB2后,进入数字模式, LED11熄灭,打印 数字调节模式,并通过屏幕实时刷新模式显示
通过调节电位器的阻值,就可以调节音响的输出音量了,同时屏幕显示的音量也实时刷新
再次按下PB2,进入模拟模式, LED11点亮,打印 模拟调节模式,并通过屏幕实时刷新模式显示
通过按键调节,PB4增加音量,PB5减小音量,就可以调节音响的输出音量了,,同时屏幕显示的音量也实时刷新
效果串口有打印信息
这部分代码上个帖有讲到,就不贴了,移植到本帖主要是为了控制录音播放的输出音量。。。
增加了屏幕显示功能,确实能够更方便的看到当前音量状态,有助于调节wm8904输出声音音量的大小。。。
|
|