完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
这个是我用verilog写的一个程序,我下载到FPGA里面,测试DRDY始终是高电平,读回来的数据始终是十进制的26(0x1a),好像是我第二次写的数据(CR1的数据),硬件是按照手册上的原理图设计的,基准是4.095V.请前辈指教一下小弟,在此谢过了!
(声明:DRDY我没有电容) module AD7760(SYS_Rest,SYS_clk,data,AD_DRDY_n,AD_RST_n,AD_MCLK,AD_SYNC_n,AD_CS_n,AD_nRD_WR) ; input SYS_clk; input SYS_Rest; input AD_DRDY_n; //output AD_DRDY_n; output AD_RST_n; output AD_MCLK; output AD_SYNC_n; output AD_CS_n; output AD_nRD_WR; //inout [15:0]data; output [15:0]data; wire AD_MCLK; reg AD_SYNC_n; reg AD_RST_n; reg AD_CS_n; reg AD_nRD_WR; reg [15:0]data; //数据总线 reg [15:0]data_out; //数据输出总线 reg [15:0]data_outH;//数据输出高字节总线 reg [15:0]data_outL;//数据输出低字节总线 reg [10:0]count; reg wr_en; reg rd_en; // IDLE || WR_CR2_address WR_CR2_data WR_CR1_address WR_CR1_data ||RD_data parameter WR_CR2_address=16'h0002, WR_CR2_data=16'h0002, WR_CR1_address=16'h0001, WR_CR1_data=16'h001A; parameter start=1,stop=0; assign AD_MCLK=~SYS_clk;// AD_MCLK可以由SYS_clk分频得到 always@(posedge AD_MCLK or negedge SYS_Rest) begin//-----------1 if(!SYS_Rest) begin AD_CS_n <=1'b0; AD_SYNC_n<=1'b0; AD_RST_n <=1'b0; count <=10'd0; wr_en<=start; rd_en<=stop; end else begin //-------2 count<=count+1; if(count==10'd1 )//复位 begin AD_CS_n <=1'b1; AD_SYNC_n<=1'b1; AD_RST_n <=1'b0; AD_nRD_WR<=1'b1; wr_en<=start; rd_en<=stop; end /*-------------------------*/ if(wr_en==start&&rd_en==stop&&count>=10'd2&&count<10'd4)//复位完成 begin AD_RST_n<=1'b1;//2个周期的复位完成 end /*-------------------------*/ if(wr_en==start&&rd_en==stop&&count>=10'd4&&count<10'd10 ) begin //AD_nRD_WR<=1'b1;//写信号拉高,并且片选拉低,保持6个周期 AD_CS_n<=1'b0; data<=WR_CR2_address;//写CR2地址 end if(wr_en==start&&rd_en==stop&&count>=10'd10&&count<10'd16) begin AD_CS_n<=1'b1;//片选拉高,保持6个周期,把数据置于总线上 end if( wr_en==start&&rd_en==stop&&count>=10'd16&&count<10'd22 ) begin AD_CS_n<=1'b0;//片选拉低,保持6个周期 ,写CR2数据 data<=WR_CR2_data;//送CR2数据 end if( wr_en==start&&rd_en==stop&&count>=10'd22&&count<10'd28 ) begin AD_CS_n<=1'b1;//片选拉高,保持6个周期 end if( wr_en==start&&rd_en==stop&&count>=10'd28&&count<10'd34) begin AD_CS_n<=1'b0;//片选拉低,保持6个周期 ,写CR1数据 data<=WR_CR1_address;//写CR1地址 end if( wr_en==start&&rd_en==stop&&count>=10'd34&&count<10'd40) begin AD_CS_n<=1'b1; end if(wr_en==start&&rd_en==stop&&count>=10'd40&&count<10'd46) begin AD_CS_n<=1'b0;//片选拉低,保持6个周期 ,写CR1数据 data<=WR_CR1_address;//送CR1数据 end if(wr_en==start&&rd_en==stop&&count>=10'd46&&count<10'd51) begin AD_CS_n<=1'b1; end if(wr_en==start&&rd_en==stop&&count>=10'd51&&count<10'd52) begin data<="ZZZZZZZZZZZZZZZZ"; wr_en<=stop; //写停止 rd_en<=start;//读开始 end /*cs释放后等待五个周期*/ /*---------------------------------------------------*/ /*在读取期间AD_DRDY_n输出一个低电平的时候读取数据无*/ if(rd_en==start&&wr_en==stop&&AD_DRDY_n==1'b1&&count>=10'd58&&count<10'd59) begin AD_nRD_WR<=1'b0; //AD_nRD_WR比AD_CS_n早一个时钟拉低 end if(rd_en==start&&wr_en==stop&&AD_DRDY_n==1'b1&&count>=10'd59&&count<10'd60) begin AD_CS_n<=1'b0; end if(rd_en==start&&wr_en==stop&&AD_DRDY_n==1'b1&&count>=10'd60&&count<10'd61) begin data_outH<=data; //读高字节 end if(rd_en==start&&wr_en==stop&&AD_DRDY_n==1'b1&&count>=10'd61&&count<10'd62) begin AD_CS_n<=1'b1; end if(rd_en==start&&wr_en==stop&&AD_DRDY_n==1'b1&&count>=10'd62&&count<10'd63) begin AD_nRD_WR<=1'b1; end if(rd_en==start&&wr_en==stop&&AD_DRDY_n==1'b1&&count>=10'd63&&count<10'd64) begin AD_nRD_WR<=1'b0; end if(rd_en==start&&wr_en==stop&&AD_DRDY_n==1'b1&&count>=10'd64&&count<10'd65) begin AD_CS_n<=1'b0; end if(rd_en==start&&wr_en==stop&&AD_DRDY_n==1'b1&&count>=10'd65&&count<10'd66) begin data_outL<=data; //读低字节 end /* if(rd_en==start&&wr_en==stop&&count>=10'd60&&count<10'd61) begin AD_CS_n<=1'b1; end if(rd_en==start&&wr_en==stop&&count>=10'd61&&count<10'd62) begin AD_nRD_WR<=1'b1; end /*---------------------------test2011.4.1--------------------------*/ if(rd_en==start&&wr_en==stop&&AD_DRDY_n==1'b0&&count>=10'd66)// begin data<=data_outH|data_outL;//有新的转换结果可用时,AD_DRDY_n输出一个低电平为有效脉冲 count<=10'd46;// end /*---------------------------------------------------*/ end//-------2 end//---------1 endmodule |
|
相关推荐
2个回答
|
|
你好,你的AD7760,drdy信号一直为高的问题解决了吗?我也碰到这个问题了,能不能指导一下,谢谢
|
|
|
|
您好,我也遇到了这个问题,请问解决了吗,能不能指导一下,有偿
|
|
|
|
只有小组成员才能发言,加入小组>>
给ADUM4223 增加信号驱动15V电压就不正常, 波动很大会被烧是什么情况?
1286 浏览 2 评论
ADP5092 SYS端口为2.09V,但是REG_OUT为0是什么原因?
1886 浏览 1 评论
ad7193差分输入ain1与ain2差是正值时,读到电压与实际值误差小,但为负值值,误差就变的很大
4230 浏览 2 评论
8981 浏览 1 评论
3130 浏览 1 评论
ADC3442采集,分析数据出现有规则毛刺,请问是哪方面的问题啊?
1400浏览 3评论
AD7190状态寄存器一直是0x80,连续转换模式下RDY不拉低
1638浏览 2评论
1598浏览 2评论
给ADUM4223 增加信号驱动15V电压就不正常, 波动很大会被烧是什么情况?
1286浏览 2评论
197浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-18 15:21 , Processed in 1.059334 second(s), Total 80, Slave 63 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号