通过SPI配置高速ADC接口
来源:互联网 发布:spine mac 编辑:程序博客网 时间:2024/04/29 14:14
接着上一篇LVDS接口ADC,这篇讲它的SPI配置。SPI的时序图如下,一个三个信号,CSB片选低有效,SCLK时钟,SDIO数据。时钟下降沿发送数据,上升沿采样。然后就是跟厂商密切相关的定义了,这个每个厂商的芯片协议字都不一样,其实就是具体的比特代表的含义。
首位比特:1代表读,0代表写;接下来两位W1:W0,代表后面传输的数据的字节数(这儿有个坑,一会儿说);然后是13位的寄存器地址;然后是发送或接收的数据。
其中W1:W0刚开始寄存器的设置理解有点问题,没有好好看AN-877技术手册,自己想当然的猜测后面一个字节的数据就应该是01,结果00,01,10,11分别对应1,2,3,4个字节。然后由于设置的数据是两个字节,每次传输完一个寄存器的配置它还在等,下一个就会把它冲掉,整个配置就完全错乱了,too young!
接下来就去查寄存器表看看自己需要配置哪些字段,上电之后复位一下AD芯片肯定是不可少的,然后是一些个性化的需求,比如说采样率,传输方式等等。这里我只复位了一下,然后配置了采样率,其它的全部默认。
其中很重要的一个就是配置采样率后要配置寄存器0xFF=0x01,设置采样率覆盖。
最后贴上代码,先复位,然后清空复位,然后配置采样率,最后设置采样率覆盖使能。代码比较简单,搞个计数器,把各个寄存器分段顺序输出就行了。
parameter P_CONFIG0 = 24'h000803;//复位parameter P_CONFIG1 = 24'h000800;//清空复位parameter P_CONFIG2 = 24'h010004;//设置采样率parameter P_CONFIG3 = 24'h00ff01;//设置采样率使能assign O_FPGA_AD_SYNC = 1'b0;assign O_FPGA_AD_PDWN = 1'b0;reg [ 4:0] R_clk_div ;reg [ 6:0] R_cnt_tx ;reg [23:0] R_config ;reg [22:0] R_count_100M;always @(posedge I_sys_clk or negedge I_reset_n)begin if(~I_reset_n) begin R_clk_div <= 0; end else begin R_clk_div <= R_clk_div + 1'b1; endendassign W_clk_1M = R_clk_div[4];always @(posedge W_clk_1M or negedge I_reset_n)begin if (~I_reset_n) begin R_count_100M <= 23'd1; end else if(|R_count_100M) begin R_count_100M <= R_count_100M +1'b1; endendalways @(negedge W_clk_1M or negedge I_reset_n)begin if(~I_reset_n) begin R_cnt_tx <= 0; end else begin if (&R_count_100M) begin R_cnt_tx <= 7'd1; end else if(|R_cnt_tx) begin R_cnt_tx <= R_cnt_tx + 1'b1; end endendalways @(negedge W_clk_1M or negedge I_reset_n)begin if(~I_reset_n) begin R_config <= 0; O_FPGA_AD_SC <= 1; end else begin if (R_cnt_tx == 7'd1) begin R_config <= P_CONFIG0; O_FPGA_AD_SC <= 0; end else if(R_cnt_tx == 7'd25) begin O_FPGA_AD_SC <= 1; end else if (R_cnt_tx == 7'd33) begin R_config <= P_CONFIG1; O_FPGA_AD_SC <= 0; end else if(R_cnt_tx == 7'd57) begin O_FPGA_AD_SC <= 1; end else if (R_cnt_tx == 7'd65) begin R_config <= P_CONFIG2; O_FPGA_AD_SC <= 0; end else if(R_cnt_tx == 7'd89) begin O_FPGA_AD_SC <= 1; end else if (R_cnt_tx == 7'd97) begin R_config <= P_CONFIG3; O_FPGA_AD_SC <= 0; end else if(R_cnt_tx == 7'd121) begin O_FPGA_AD_SC <= 1; end else begin R_config <= {R_config[22:0],1'b0}; end endendassign O_FPGA_AD_SDIO = R_config[23];assign O_FPGA_AD_SCLK = (~O_FPGA_AD_SC) & W_clk_1M;//1M
阅读全文
1 0
- 通过SPI配置高速ADC接口
- LVDS高速ADC接口, xilinx fpga实现
- dsp28335 SPI总结(高速同步串行接口)
- SPI:高速同步串行口
- SPI:高速同步串行口
- SPI:高速同步串行口
- SPI驱动高速读写
- SPI接口的主/从配置
- 高通APQ8074 spi 接口配置
- 高通APQ8074 spi 接口配置
- 高通APQ8074 spi 接口配置
- 高通APQ8074 spi 接口配置
- 高通APQ8074 spi 接口配置
- 高通APQ8074 spi 接口配置
- ADC 配置
- 合理选择高速ADC实现欠采样
- 网转高速ADC的电源设计
- SPI接口
- 十位值得关注的Java顶级专家
- Java常用消息队列原理介绍及性能对比
- 利用JAVA实现“百鸡百钱”问题
- STL(一)array静态数组
- linux(Ubuntu)下安装jdk1.6
- 通过SPI配置高速ADC接口
- 基于docker的环境搭建
- tensorflow学习笔记:运行tensorboard遇到的错误
- PHP冒泡排序
- [POJ2195]Going Home(KM)
- 七周第一次课 2017.11.27 使用w查看系统负载、vmstat命令、top命令、sar命令、nload命令
- 最大边缘相关(Maximal Marginal Relevance,MMR)对文档重排序
- linux内核时间片调度实现详解(基于ARM处理器)
- JSON解析