注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

火车的家

Put first thing first

 
 
 

日志

 
 

2012.05.28 wm8731 的波形  

2012-05-29 17:27:39|  分类: 技术博客 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

基于 Altera DE2 的板子写了一个 verilog 录音程序。具体是先把 audio 芯片 ADC 引脚的数据保存到一个 FIFO,然后再把这个 FIFO 的数据输出到 DAC 引脚。

我把板子的 wm8731 芯片配成 master 模式,分了一个 25 M 的频率。根据手册,一个 ADC_LRC 应该包含 64 个 BCLK,与之对应的 ADC 引脚会传输 64 个采样位,也就是一个帧。波形图如下:

2012.05.28  wm8731 的波形 - tassardge - 火车的家
 

所以我在 FIFO 中保存了 n 个 sample,每个 sample 都包含一个 64位的帧 (其实没必要把 64 位都保存下来,这种做法是冗余的)。

程序先判断 DAC_LRC 的上升沿是否到来,如果上升沿来了,那么在 BCLK 的每个下降沿把 FIFO 中的数据写入 DAC 引脚。这样,一个帧的 64 位数据正好可以在一个 DAC_LRC 中写进 DAC 引脚。

但是播放的声音全是连续的爆音,原因是波形图错了!其实上面的波形图是理想波形,真正的波形如下:

2012.05.28  wm8731 的波形 - tassardge - 火车的家
 

注意到 BCLK 的下降沿和 DAC_LRC 的上升沿并不重合,DAC_LRC 略有延迟,一个完整的 DAC_LRC 包含了当前帧的 63 个 BCLK 和 下一个帧的第一个 BCLK。所以,第一次向 DAC 写数据的时候要跳过 FIFO 中的第一个位才能得到正确的波形。
  评论这张
 
阅读(604)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018