实验室板子soc-de1自带的7928芯片,下面记录一下它的参数

吞吐速率 : 1MSPS

吞吐速率 : 是指ADC器件单位时间内能处理的任务数或输出结果的数量。单位:SPS(Samples per second)

通信协议·:SPI协议   四根线 SCLK  DIN  SOUT  CS_N

引脚配置和功能描述:

SCLK    串行时钟

DIN       数据输入,在SCLK的下降沿写入寄存器

CS_n    片选控制,在低电平时,数据有效

REFin    AD7928的基准电压输入。

Vin0至Vin7  模拟输入0到模拟输入7.通过控制ADD2到ADD0来选择通道,输入电压范围0~REFin 或者 0~2REFin

DOUT    数据输出。AD7928的转换结果在SCLK的下降沿逐个输出。输出的数据流包含一个前置的0和3个地址位

       然后是12个转换数据位(MSB优先)。输出的数据可以是二进制或者二进制的补码。

控制寄存器

每次数据传输需要16个串行时钟,只有在前12个SCLK的下降沿,提供的信息才会写入被控制的寄存器。MSB在前

WRITE :  1 后续的11位写入寄存器     0 则不写入

SEQ,SHADOW :  0 0 的话,序列功能未被使用,每次转换的通道由上一次的通道地址ADD2 ~ ADD0决定。

PM1,PM0   :    1  1 正常工作

RANGE      :  0 则模拟输入的范围为 0 ~ 2XREFin        1则0~REFin

CODING    :  0为二进制的补码方式,1则标准的二进制

下面给AD9854的时序控制图

驱动程序

/*-----------------------------------------------------------------------

Date                :        2017-08-01
Description : Design for AD7928. -----------------------------------------------------------------------*/ module ad7928
(
//global clock
input clk, //system clock
input rst_n, //sync reset //ad7928 interface
output reg sclk_ad,
output reg din, //逻辑输入
input dout, //逻辑输出
output reg cs_n, //片选使能端 //user interface output reg [:] ad_data // ); //--------------------------------
//Funtion : 10M 分频
parameter CLK_10M = 'd5;
reg [:] cnt_clk; always @(posedge clk or negedge rst_n)
begin
if(!rst_n)
cnt_clk <= 'd0;
else if(cnt_clk >= CLK_10M - 'b1)
cnt_clk <= 'd0;
else
cnt_clk <= cnt_clk + 'b1;
end wire clk_10m_value = (cnt_clk >= CLK_10M - 'b1) ? 1'b1 : 'b0; //--------------------------------
//Funtion : ad7928 参数定义
parameter SPI_DATA = 'b100_000_11_0001_0000;
parameter ONE_S = 'd10;//_000_000; //--------------------------------
//Funtion : spi state
reg [:] spi_state;
reg [:] cnt_wait;
reg [:] ad_ser_data;
always @(posedge clk or negedge rst_n)
begin
if(!rst_n)
begin
spi_state <= 'd0;
ad_ser_data <= 'd0;
cnt_wait <= 'd0;
sclk_ad <= 'd0;
din <= 'd0;
cs_n <= 'd0;
end
else if(clk_10m_value)
begin
case(spi_state)
//上电等待
'd0 :
begin
if(cnt_wait >= ONE_S - 'b1)
spi_state <= 'd1;
else
cnt_wait <= cnt_wait + 'b1;
end 'd1 :
begin
sclk_ad <= 'b1;
cs_n <= 'b1;
spi_state <= 'd2;
ad_ser_data <= 'd0;
end 'd2 :
begin
cs_n <= 'b0;
spi_state <= 'd3;
end
//
'd3 :
begin
din <= SPI_DATA[];
spi_state <= 'd4;
end 'd4 :
begin
sclk_ad <= 'b0;
spi_state <= 'd5;
end
//
'd5 :
begin
sclk_ad <= 'b1;
din <= SPI_DATA[];
spi_state <= 'd6;
end 'd6 :
begin
sclk_ad <= 'b0;
spi_state <= 'd7;
end
//
'd7 :
begin
sclk_ad <= 'b1;
din <= SPI_DATA[];
spi_state <= 'd8;
end 'd8 :
begin
sclk_ad <= 'b0;
spi_state <= 'd9;
end
//
'd9 :
begin
sclk_ad <= 'b1;
din <= SPI_DATA[];
spi_state <= 'd10;
end 'd10 :
begin
sclk_ad <= 'b0;
spi_state <= 'd11;
end
//
'd11 :
begin
sclk_ad <= 'b1;
din <= SPI_DATA[];
spi_state <= 'd12;
end 'd12 :
begin
sclk_ad <= 'b0;
spi_state <= 'd13;
end
//
'd13 :
begin
sclk_ad <= 'b1;
din <= SPI_DATA[];
spi_state <= 'd14;
ad_ser_data <= dout; //[7]
end 'd14 :
begin
sclk_ad <= 'b0;
spi_state <= 'd15;
ad_ser_data <= ad_ser_data << 'b1;
end
//
'd15 :
begin
sclk_ad <= 'b1;
ad_ser_data <= ad_ser_data + dout; //[6]
din <= SPI_DATA[];
spi_state <= 'd16;
end 'd16 :
begin
sclk_ad <= 'b0;
spi_state <= 'd17;
ad_ser_data <= ad_ser_data << 'b1;
end
//
'd17 :
begin
sclk_ad <= 'b1;
din <= SPI_DATA[];
spi_state <= 'd18;
ad_ser_data <= ad_ser_data + dout; //[5]
end 'd18 :
begin
sclk_ad <= 'b0;
spi_state <= 'd19;
ad_ser_data <= ad_ser_data << 'b1;
end
//
'd19 :
begin
sclk_ad <= 'b1;
din <= SPI_DATA[];
spi_state <= 'd20;
ad_ser_data <= ad_ser_data + dout; //[4]
end 'd20 :
begin
sclk_ad <= 'b0;
spi_state <= 'd21;
ad_ser_data <= ad_ser_data << 'b1;
end
//
'd21 :
begin
sclk_ad <= 'b1;
din <= SPI_DATA[];
spi_state <= 'd22;
ad_ser_data <= ad_ser_data + dout; //[3]
end 'd22 :
begin
sclk_ad <= 'b0;
spi_state <= 'd23;
ad_ser_data <= ad_ser_data << 'b1;
end
//
'd23 :
begin
sclk_ad <= 'b1;
din <= SPI_DATA[];
spi_state <= 'd24;
ad_ser_data <= ad_ser_data + dout; //[2]
end 'd24 :
begin
sclk_ad <= 'b0;
spi_state <= 'd25;
ad_ser_data <= ad_ser_data << 'b1;
end
//
'd25 :
begin
sclk_ad <= 'b1;
din <= SPI_DATA[];
spi_state <= 'd26;
ad_ser_data <= ad_ser_data + dout;//[1]
end 'd26 :
begin
sclk_ad <= 'b0;
spi_state <= 'd27;
ad_ser_data <= ad_ser_data << 'b1;
end
//
'd27 :
begin
sclk_ad <= 'b1;
din <= SPI_DATA[];
spi_state <= 'd28;
ad_ser_data <= ad_ser_data + dout;//[0]
end
'd28 :
begin
sclk_ad <= 'b0;
spi_state <= 'd29;
end
//
'd29 :
begin
sclk_ad <= 'b1;
din <= SPI_DATA[];
spi_state <= 'd30;
end
'd30 :
begin
sclk_ad <= 'b0;
spi_state <= 'd31;
end
//
'd31 :
begin
sclk_ad <= 'b1;
din <= SPI_DATA[];
spi_state <= 'd32;
end
'd32 :
begin
sclk_ad <= 'b0;
spi_state <= 'd33;
end
//
'd33 :
begin
sclk_ad <= 'b1;
din <= SPI_DATA[];
spi_state <= 'd34;
end 'd34 :
begin
sclk_ad <= 'b0;
spi_state <= 'd1;
end default : ;
endcase
end
end //--------------------------------
//Funtion : ad_data
//reg [7:0] ad_data; always @(posedge clk or negedge rst_n)
begin
if(!rst_n)
ad_data <= 'd0;
else if(spi_state == 'd34)
ad_data <= ad_ser_data;
end endmodule

AD7928的更多相关文章

随机推荐

  1. 使用CSS3动画实现绚丽的照片墙效果

    临近毕业了,一大波毕业照又要来袭了!如何使用CSS3属性制作出自己的网页版照片墙呢? 闲话少说,先来看看效果图 效果要求: 1,照片要求有一定的白色边框. 2,照片都要有一定的倾斜角度. 3,鼠标移动 ...

  2. Linux配置浮动IP实现WEB高可用

    在高可用集群环境中,一般都需要使用浮动IP来实现web高可用(High Availability). 浮动IP的概念以及为什么需要浮动IP请参考:浮动IP(FLOAT IP) 本篇文章主要讲实际操作步 ...

  3. System.Runtime.Serialization.SerializationException”类型的未经处理的异常在 System.Runtime.Serialization.dll 中发生

    异常信息: “System.Runtime.Serialization.SerializationException”类型的未经处理的异常在 System.Runtime.Serialization. ...

  4. java中的选择排序之降序排列

    import java.util.Arrays;//必须加载 class Demo{ public static void main(String []args){ int[] arr={3,54,4 ...

  5. 8.vue的生命周期

    Vue实例有一个完整的生命周期,也就是从开始创建.初始化数据.编译模板.挂载Dom.渲染→更新→渲染.卸载等一系列过程,我们称这是Vue的生命周期.通俗说就是Vue实例从创建到销毁的过程,就是生命周期 ...

  6. 再谈AbstractQueuedSynchronizer:共享模式与基于Condition的等待/通知机制实现

    共享模式acquire实现流程 上文我们讲解了AbstractQueuedSynchronizer独占模式的acquire实现流程,本文趁热打铁继续看一下AbstractQueuedSynchroni ...

  7. 2017寒假零基础学习Python系列之函数之 定义默认参数

    在定义函数时,可以有默认参数例如Python自带的函数int(),其实就是两个参数,我们既可以传一个参数,又可以传两个参数 int(') >>>123 int(',8) 83 int ...

  8. C#深入学习 ----多线程学习(一)第一天学习

    学习最好的方法就是总结,并写下来,能让别人看懂,自己肯定是掌握了的. 针对软件开发,一直停留在能做的层次,今天得到大牛指点,觉得有必要对这门技术深入学习. 翻阅园内各大神的文章,收益匪浅,在这里做下总 ...

  9. [图形学] Chp18 OpenGL表面纹理函数

    以2D表面为例展示纹理贴图,用opengl设置一个2D纹理,颜色存储在32*32*3的数组中,对应的纹理坐标为0<=s, t<=1.0. 画出几个正方形表面,分别以GL_CLAMP(纹理坐 ...

  10. (转载)Java内部类的使用小结

    原文摘自:http://android.blog.51cto.com/268543/384844/   内部类是指在一个外部类的内部再定义一个类.类名不需要和文件夹相同. *内部类可以是静态stati ...