文档库 最新最全的文档下载
当前位置:文档库 › 基于FPGA的SPI接口AD转换器TLV2543的接口应用

基于FPGA的SPI接口AD转换器TLV2543的接口应用

基于FPGA的SPI接口AD转换器TLV2543的接口应用
基于FPGA的SPI接口AD转换器TLV2543的接口应用

74软件导刊?2006?7月号

基于FPGA 的SPI 接口AD 转换器

TLV2543的接口应用

苏旭武1,吴斌方1,杨光友1,程良明2

(1.湖北工业大学机械工程学院,湖北武汉430068;2.武汉精伦电子股份有限公司,湖北武汉430223)

摘要:给出了SPI 接口AD 转换器TLV2543与FPGA 的接口应用方案。首先介绍了TLV2543的特点及操作时序。以

VerilogHDL 为编程语言,

采用有限状态机,以半双工方式实现了SPI 接口读、写的时序逻辑。实践证明该方法简洁、有效。关键词:串行外设接口;FPGA ;AD 转换器;

有限状态机中图分类号:TP21文献标识码:A 文章编号:1672-7800(2006)07-0074-03

0前言

串行外设接口SPI (Serial Peripheral In-terface )是一种高速同步串行输入输出端口,近年来广泛应用外部移位寄存器、DA 转换器、AD 转换器、串行EEPROM 、LED 显示驱动器等外部设备的扩展。SPI 接口可以共享,便于组成带多个SPI 接口器件的系统。其传送速率可编程,连接线少,

具有良好的扩展性。

TLV2543是典型的具有SPI 接口的

AD 转换器,它可以方便地与带有SPI 接

口的处理器或控制器连接。在现在的数

据采集系统中,现场可编程门阵列FPGA

配置的灵活性正越来越多地使其成为主

控制器,采用标准SPI 接口IP 核可以实

现与SPI 接口器件的连接,但是,标准SPI

接口IP 核往往占用较多的片内资源。本

文将给出一种简洁的方法,以实现TLV2543

与FPGA 的接口设计。1TLV2543的特点及操作时序TLV2543是TI 公司生产的开关电容逐次逼近型模数转换器。其特点是:①12位分辨率;②工作温度范围内10us 转换时间;③11路模拟输入通道;④3路内置自测方式;⑤固有的采样保持电路;⑥线性误差最大±1LSB ;⑦片内系统时钟;⑧转换结束(EOC )输出;⑨单极性或双极性

输出;⑩可编程输出数据长度及MSB 或LSB 前导。其引脚功能见图1

。图1TLV2543引脚功能TLV2543工作过程分为2个周期:I/O 周期和转换周期。I/O 周期由外部时钟I/OCLOCK 决定,延续8、12或16个时钟周期,取决于选定数据输出长度。I/O 周期同时进行2种操作:①一个包括地址和控制信息的8位数据流被送到DA TA INPUT 端口。该数据在前8个时钟的上升沿被移入器件。当12或16个I/O 时钟传送时,在前8个时钟后DA TA INPUT 便无效。②在DA TA OUT 端串行地提供8、12或16位

长度的数据输出。当CS 保持为低电平,

第一个数据位出现在EOC 的上升沿。若

AD 转换中CS 被取消,则第一个输出数据

位出现在CS 的下降沿。该数据是前一次

转换周期的结果。第一位之后的各数据

位在后续时钟的下降沿同步输出。

转换周期对用户是透明的,它是由与

I/O 时钟同步的内部时钟控制的。当进行

AD 转换时,器件对模拟输入电压完成逐次逼近的转换。在转换周期开始时EOC 输出低电平,当转换完成且输出数据寄存器被锁存时EOC 变高。只有在I/O 周期

完成后才开始一次转换周期,这样可以减

少外部数字噪音对转换精度的影响。

数据输入端在内部被连接到一个8

位输入的地址和控制寄存器。控制器提

供的数据以MSB 为前导位。每个数据位

在I/OCLOCK 的上升沿被输入。寄存器中的控制字选择器件的输入通道(测试和节电方式)、数据长度、输出数据格式等,控制字格式如图2所示。根据上表中控制字格式,采用12位数据长度、MSB 在前方式数据传送、单极性输入,第0通道的AD 转换控制字为00H 。采用MSB 在前方式、使用CS 的16时钟传送时序,其操作时序图如图2所示。2FPGA 接口设计标准SPI 接口有主、从2种工作模式,并有9个寄存器用于模块操作,协议较复杂,而根据图3的时序图,可以看出TLV2543没有用到全部SPI 接口的时序。为了简洁地实现符合以上逻辑的时序,并减少标准SPI 接口IP 核对FPGA 资源的浪费,本文采用Verilog 硬件描述语言用有限同步状态机(FSM )的设计方法实现。为了避免SPI 接口双向数据通信时要同时捕捉时钟的上升沿和下降沿,可能由于

76软件导刊?2006?7月号always @(posedge clk )

begin

if (rst )

……//初始化reg 变量值;

ad_state<=state_idle;

adr_state<=adr_bit11;

else

begin

case (ad_state )

state_idle://空闲状态;

begin

CSAD<=1;flag<=0;

link<=0;link_ad<=0;

if (ad_enable )

begin

datain_buf<=datain;busy<=1;

ad_state<=state_write;

//AD 允许进写状态;

write_state<=write_bit7;

end

else

begin

ad_state<=state_idle;busy<=0;

end

end

state_write:

begin

if (flag==0)//是否完成标志

writeSPI;//进入写状态机

else

begin

link<=0;flag<=0;

if (ad_enable )//写完进等待状态

ad_state<=state_waitADEOC;

else

begin

ad_state<=state_stop;busy<=0;

end

end

end

state_waitADEOC:

begin

if (flag==0)

begin

if (ADEOC )flag<=1;//转换完成end else begin flag<=0;CSAD<=0;ad_state<=state_readAD;//进读状态adr_state<=adr_bit11;//读状态初值end end state_readAD:begin if (flag==0)readSPI;//读AD 结果;else begin flag<=0;busy<=0;CSAD<=1;link_ad<=1;//读完并行输出ad_state<=state_stop;//进完成状态end end state_stop:begin CSAD<=1;if (!ad_enable )//AD 结束进空闲状态ad_state<=state_idle;else ad_state<=state_stop;end default:begin ad_state<=state_idle;CSAD<=1;end endcase end end task writeSPI;//写控制字状态机begin casex (write_state )write_bit7://从高位写起if (!SCLK )begin if (ad_enable )begin CSAD<=0;link<=1;end DI_buf<=datain_buf [7];write_state<=write_bit6;//写完转入下位;end else write_state<=write_bit7;……//依次类推;write_end:if (!SCLK )begin link<=0;CSAD<=1;flag<=1;write_state<=write_bit7;end else write_state<=write_end;default:if (!SCLK )write_state<=write_bit7;endcase end endtask task readSPI;……//限于篇幅,读状态机部分略;endtask endmodule 4结语本文用有限状态机在FPGA 上实现了与SPI 接口AD 转换器TLV2543的接口应用,相比标准SPI 接口IP 核更为简洁,节约了FPGA 的片上资源。在Modelsim 中仿真正确后,利用ALTERA 公司Quar-tusII 软件在ACEX1K50芯片上成功地实现了综合,作为一个模块在“嵌入式动态可重构测控系统”项目中取得了良好的应用效果。虽然不是全双工操作,但仍然可以实现较高的采样速率。参考文献:[1]梁祥,封吉平,安学军.基于PC/104总线与CPLD 的SPI 接口设计[J ].微计算机信息,2005.[2]夏宇闻.Verilog 数字系统设计教程[M ].北京:北京航空航天大学出版社,2003.(责任编辑:王钊)

相关文档