AD7928
实验室板子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的更多相关文章
随机推荐
- [0] DDD领域驱动设计(三) 之 聚合(根)、实体、值对象
1. 聚合根.实体.值对象的区别? 从标识的角度: 聚合根具有全局的唯一标识,而实体只有在聚合内部有唯一的本地标识,值对象没有唯一标识,不存在这个值对象或那个值对象的说法: 从是否只读的角度 ...
- Windows 10环境安装VIM代码补全插件YouCompleteMe
Windows 10环境安装VIM代码补全插件YouCompleteMe 折腾一周也没搞定Windows下安装VIM代码补全插件YouCompleteMe,今天在家折腾一天总算搞定了.关键问题是在于P ...
- ASP.NET MVC 重写RazorViewEngine实现多主题切换
在ASP.NET MVC中来实现主题的切换一般有两种方式,一种是通过切换皮肤的css和js引用,一种就是通过重写试图引擎.通过重写试图引擎的方式更加灵活,因为我不仅可以在不同主题下面布局和样式不一样, ...
- Java 变量类型
局部变量 成员变量 类变量 Java局部变量 局部变量声明在方法.构造方法或者语句块中: 局部变量在方法.构造方法.或者语句块被执行的时候创建,当它们执行完成后,变量将会被销毁: 访问修饰符不能用于局 ...
- Centos6.5 源码编译安装 Mysql5.7.11及配置
安装环境 Linux(CentOS6.5 版).boost_1_59_0.tar.gz.mysql-5.7.11.tar.gzMySQL 5.7主要特性: 更好的性能:对于多核CPU.固态硬盘. ...
- 基于node.js制作爬虫教程
前言:最近想学习node.js,突然在网上看到基于node的爬虫制作教程,所以简单学习了一下,把这篇文章分享给同样初学node.js的朋友. 目标:爬取 http://tweixin.yueyishu ...
- php中的XML转数组
/** * 最简单的XML转数组 * @param string $xmlstring XML字符串 * @return array XML数组 */ function simplest_xml_to ...
- Object-C知识点 (四) 性能优化
#pragma mark - 性能优化 1. 行高一定要缓存 缓存行高是解决性能优化的最佳途径(除非刷新频率已经很高了,否则一定要缓存)2. 尽量减少计算,所有需要素材提前计算好3. 控件不要设置圆角 ...
- js 实现图片压缩并转换成base64(data:image/jpeg;base64)格式
<!DOCTYPE html> <html> <head> <!--by 0o晓月メ http://www.cnblogs.com/final-elysion ...
- MAC 相关操作解析
MAC 相关操作解析 OS 显示桌面 f11 F1~F12 fn + F1~F12 撤销重做 command + z command + shift + z 图片预览 选择图片 空格 上下左右 svn ...