接上一篇。
这一篇介绍FPGA驱动单个AD7980的开发过程,驱动多个AD7980的级联模式可以查阅后面的帖子。单个AD7980的驱动时序图如下:
1、确定SCLK频率的上限。上图中SCK的周期为Tsck,查数据手册得知在3.3V为12nS,对应频率的上限为80多M。为了方便开发,直接将FPGA开发板上的48M时钟,经过PLL直接输出C0为10M,周期为100nS,远大于12nS;
2、SDI引脚直接接FPGA引脚,置高电平1。
3、确定状态机为三个状态,分别是AD7980_IDLE、AD7980_CONVERSION和AD7980_AQUISITION。这三个状态分别对应上图中的第3个波形,3个状态的命名也是按照上图来命名的。AD7980_IDLE状态,芯片处于等待状态;AD7980_CONVERSION状态,需要使能AD7980_CNV=1,启动ADC转换;AD7980_AQUISITION状态,使能AD7980_CNV=1,同时输出确定的16个时钟信号AD7980_SCK,同时在AD7980_SCK下降沿将AD7980_SDO串行输出采集进来。
4、3个状态的转换如下:
parameter AD7980_IDLE =3'b001;
parameter AD7980_CONVERSION =3'b010;
parameter AD7980_AQUISITION =3'b100;
case(nstate)
AD7980_IDLE:
输出控制;
if (AD7980_EN)
nstate<= AD7980_CONVERSION;
else
nstate<= AD7980_IDLE;
end
AD7980_CONVERSION:
begin
输出控制;
conversion_count<=conversion_count + 1'b1;
if(conversion_count==4'd10)
nstate<= AD7980_AQUISITION;
else
nstate<= AD7980_CONVERSION;
end
AD7980_AQUISITION:
begin
输出控制;
if(aqusition_count==7'd0)
begin
AD7980_SCK<=1'b0;
end
else if (aqusition_count==7'd33)
nstate<= AD7980_IDLE;
else
输出控制;
SIGNALTAP II捕获的波形如下:
正在更新,,,,,
淘宝店铺:http://liangziusb.taobao.com
良子.2016年 承接USB开发工程
QQ:1345482533
文章评论(0条评论)
登录后参与讨论