WM7831产生正弦波.doc

  1. 1、本文档被系统程序自动判定探测到侵权嫌疑,本站暂时做下架处理。
  2. 2、如果您确认为侵权,可联系本站左侧在线QQ客服请求删除。我们会保证在24小时内做出处理,应急电话:400-050-0827。
  3. 3、此文档由网友上传,因疑似侵权的原因,本站不提供该文档下载,只提供部分内容试读。如果您是出版社/作者,看到后可认领文档,您也可以联系本站进行批量认领。
查看更多
WM7831产生正弦波

DE2实践之WM8731产生正弦波 经历近三周的时间,终于搞定了wm8731产生1khz正弦波的那个DEMO。现在就将这三周来的收获做一个记录,希望大家与我共同分享,共同进步。 一.本DEMO 的目的 通过fpga控制音频编解码芯片wm8731产生一个1khz的正弦波,接上de2板上的耳机接口,试听此正弦波。 二.原理 FPGA与wm8731共有5个接口,分别为SCLK,SDIN,DACLRC,DACDAT,BCLK.其中SCLK,SDIN为控制接口,DACLRC,DACDAT,BCLK为数字音频接口。由SCLK,SDIN配置wm8731的寄存器,由DACLRC,DACDAT,BCLK产生所需的正弦波并输出到耳机接口。详细原理见代码中注释。 代码如下 1. sclk,sdin数据传输时序代码(i2c写控制代码) module i2c_com(clock_i2c, //wm8731控制接口传输所需时钟,0-400khz,此处为20khz reset_n, ack, //应答信号 i2c_data, //sdin接口传输的24位数据 start, //开始传输标志 tr_end, //传输结束标志 cyc_count, i2c_sclk, //FPGA与wm8731时钟接口 i2c_sdat); //FPGA与wm8731数据接口 input [23:0]i2c_data; input reset_n; input clock_i2c; output [5:0]cyc_count; output ack; input start; output tr_end; output i2c_sclk; inout i2c_sdat; reg [5:0] cyc_count; reg reg_sdat; reg sclk; reg ack1,ack2,ack3; reg tr_end; wire i2c_sclk; wire i2c_sdat; wire ack; assign ack=ack1|ack2|ack3; assign i2c_sclk=sclk|(((cyc_count=4)(cyc_count=30))?~clock_i2c:0); assign i2c_sdat=reg_sdat?1bz:0; always@(posedge clock_i2c or negedge reset_n) begin if(!reset_n) cyc_count=6b111111; else begin if(start==0) cyc_count=0; else if(cyc_count6b111111) cyc_count=cyc_count+1; end end always@(posedge clock_i2c or negedge reset_n) begin if(!reset_n) begin tr_end=0; ack1=1; ack2=1; ack3=1; sclk=1; reg_sdat=1; end else case(cyc_count) 0:begin ack1=1;ack2=1;ack3=1;tr_end=0;sclk=1;reg_sdat=1;end 1:reg_sdat=0; //开始传输 2:sclk=0; 3:reg_sdat=i2c_data[23]; 4:reg_sdat=i2c_data[22]; 5:reg_sdat=i2c_data

文档评论(0)

yan698698 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档