SPI接口的FPGA实现(二)——配置DAC

这一篇主要结合DAC81416的datasheet来进一步阐述如何配置DAC。先附上DAC81416的datasheet的链接。

1、datasheet概述

如果自己不做电路板,DAC81416的datasheet需要关注的方面并不多。该DAC一共16个输出通道,可以通过一系列的配置其内部寄存器的操作输出16个电压值。

该DAC有普通模式,同步模式,DRC模式,差分输出模式,toggle模式。

普通模式——16个通道都可以输出电压,读写寄存器操作以24位数据为单位。

同步模式——配置成同步模式的通道的输出电压可以在外部LDAC引脚为低时同步更新。

DRC模式——读写寄存器操作以32位数据为单位,相比24位的普通模式,多了8位的CRC校验位。

差分输出模式——两个普通通道合并成一个差分通道,这样子就只有8个差分通道输出。

toggle模式——切换模式,就是根据toggle信号线的高低或者toggle寄存器值,某一通道的输出可以在两个值之间进行切换,最多支持同时3个通道配置成切换模式。

这里只讲普通模式,其他模式如何配置请参考datasheet的寄存器映射表。其实只有toggle模式稍微复杂一些,toggle模式的配置方法参考datasheet的9.4.1。

2、如何进行寄存器的读写操作

图1 标准读写时序图

标准读写操作的时序图在上一篇已经出现过了,这里继续补充说明。上图中所有的时序参数见datasheet中的7.6,这里说几个最重要的。

f(SCLK)——最快允许的时钟频率。

t(CSHIGH)——CS高电平时持续的最短时间,这个参数很重要是因为我们肯定不止一次读写数据,每次读写数据之间必须要有一定的时间间隔。

t(CSS)——CS有效期间,CS的下降沿到SCLK的第一个下降沿之间的最短时间,第一个下降沿已经需要对数据采样了。

t(SDIS)——SDI的setup time,建立时间,即时钟采样沿之前数据稳定的最短时间。

t(SDIH)——SDI的hold time,保持时间,即时钟采样沿之后数据稳定的最短时间。

t(CSH)——CS有效期间,SCLK的最后一个下降沿到CS的上升沿之间的最短时间,最后一个下降沿依然需要采样。

一般情况下,对DAC的操作都是低速时钟,只要时钟在f(SCLK)的一半以下,保证下降沿采样,就满足了所有时序要求,不需要刻意去调整时序。

在标准读写中,每次操作都是24位数据,这24位数据的含义在datasheet的9.5.1节,如下图所示。

表1 24位操作数据

最高位是读写命令位,次高位不关心,接着是6位的地址和16位的数据。除了标准读写外,还有一种流水模式的写操作,可以一次性写几个寄存器,流水模式主要是用于一次性配置地址连续的寄存器,例如一次性配置16个通道的输出电压,我们这里暂时不用流水模式,就用标准模式配置。

图2 流水线写操作

3、外部引脚

外部引脚表如下图所示,在原datasheet的第6章。

表2 外部引脚对应表

除了时序图中SPI接口的4根线以外,还有下面几根线需要注意下:

LDAC——同步输出控制信号,拉低时配置成同步模式的通道同时更新数据。

CLR——清除信号,低有效。

TOGGLE0~2——切换信号,配置成toggle模式的通道的输出电压值根据toggle信号的值在两个值之间进行切换。

ALMOUT——警告信号,低有效,在DRC模式时可以让这个信号在DRC错误时输出低电平。

4、配置步骤

另外还需要关注的就是Datasheet中的9.6节,该节是DAC81416内部寄存器的映射表,是我们配置DAC的指南。

配置DAC的过程就是编写Verilog代码通过SPI接口发送特定数据的过程。对于普通模式,分为以下4步。

1、配置SPICONFIG Register (offset = 03h,reset=0AA4h),设置DEV-PWDWN位为active就可以了,也就是将0A84h写入这个寄存器中。

图3 SPICONFIG寄存器

2、配置DACRANGEn Register (offset = 0Ah - 0Dh,reset = 0000h),配置输出电压的取值范围,这里假设-5V~+5V输出,设置成9999h。

图4 DACRANGEn寄存器

3、配置DACPWDWN Register (offset = 09h,reset = FFFFh),打开每一个通道,设置成0.

4、这时就可以往DACn Register (offset = 10h - 1Fh,reset = 0000h)中写入要进行数模转换的值(也就是输出电压的值,输出电压在第2步的取值范围内,根据这一步配置的16位的值的相对大小进行输出。),这里假设输出5V电压,设置成ffffh。

本篇介绍了DAC81416的时序、引脚和基本的配置步骤,下一篇我们使用Verilog代码配置该DAC。

本人水平有限,如有错误欢迎留言指正。