实验室板子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. UTC、GTC时间和本地时间

    1.问题 对于装有Windows和Linux系统的机器,进入Windows显示的时间和Linux不一致,Linux中的时间比Windows提前8个小时. 2.解决方法 修改/etc/default/r ...

  2. Ubuntu发行版升级

    从UK 13.10升级到UK 14.10 方法一: 1.sudo apt-get update   2.sudo update-manager -c -d   3.选择upgrade(升级)  方法二 ...

  3. PHP面试题详解

    自己从网上找了几份常考到的PHP面试题进行了整理,然后才有了这份PHP面试题,并且我把所有的题目进行了详细分析和代码分析,希望可以对大家有帮助,谢谢大家. 这份试题我也上传到了百度云,有需要的可以直接 ...

  4. 用queue函数写广搜

    以走迷宫需要的最少步数的代码为例 #include<stdio.h>#include<string.h>#include<queue> using namespac ...

  5. 题解 最优的挤奶方案(Optimal Milking)

    最优的挤奶方案(Optimal Milking) 时间限制: 1 Sec  内存限制: 128 MB 题目描述 农场主 John 将他的 K(1≤K≤30)个挤奶器运到牧场,在那里有 C(1≤C≤20 ...

  6. vmware克隆虚拟机后网卡名称及网络地址xiuf

    使用vmware克隆虚拟机后,若原主机网卡名称为eth0,那么克隆后的主机使用ifconfig查看仅能看到一个名称为eth1的网卡 并且在/etc/sysconfig/network-scripts/ ...

  7. jQuery星级评分插件

    <!DOCTYPE html> <html lang="zh-CN"> <head> <meta http-equiv="Con ...

  8. PHP容器--Pimple运行流程浅析

    需要具备的知识点 闭包 闭包和匿名函数在PHP5.3.0中引入的. 闭包是指:创建时封装周围状态的函数.即使闭包所处的环境不存在了,闭包中封装的状态依然存在. 理论上,闭包和匿名函数是不同的概念.但是 ...

  9. AJAX数据请求

    ajax数据请求需要四个步骤:(请求文本内容) 1.创建XMLHttpRequest对象: 2.打开与服务起的链接: 3.发送给服务器: 4.响应就绪. <!DOCTYPE html> & ...

  10. Unity3D文件读取

    Resources: 是作为一个Unity3D的保留文件夹出现的,也就是如果你新建的文件夹的名字叫Resources,那么里面的内容在打包时都会被无条件的打到发布包中.它的特点简单总结一下就是: 只读 ...