logo资料库

AD9707高速DAC的内部寄存器配置.pdf

第1页 / 共4页
第2页 / 共4页
第3页 / 共4页
第4页 / 共4页
资料共4页,全文预览结束
AD9707高速高速DAC的内部寄存器配置 的内部寄存器配置 本文在介绍AD9707的工作原理和典型电路的基础上,着重阐述了通过ARM和FPGA两种方式分别配置AD9707 内部寄存器的方法,同时给出了两种配置方法基本操作的具体步骤和相应代码。 引言 随着通信、工业仪器设备和便携式设备的发展,新一代高速DAC逐渐朝高性能、低功耗、芯片多功能集成和输入输出高速化 的方向发展。AD970X系列DAC针对低功耗特性进行了优化,同时仍保持出色的动态性能,适用于手持便携式仪器等需要有效 合成宽带信号的场合。AD9707 精度高达14位,其采样率为175 Msps,内部集成边沿触发式输入锁存器,1.0 V温度补偿带隙 基准电压源和自校准功能使之能提供真14位INL与DNL性能。AD9707还具有共模电位移动能力,当与其他模拟器件连接时无 需电平移动电路,从而简化了模拟电路的设计,并且减小了小型便携式设计中的印制电路板面积。 由于DAC内部集成度越来越高,外围辅助电路越来越少,通过外围引脚的设置很难把DAC所有的功能发挥出来。高速DAC内 部一般集成内部寄存器,用户可以通过修改DAC的内部寄存器,使DAC输入输出模式达到设计要求。为了减少芯片引脚数 量,内部寄存器一般是通过串行接口来配置,比较常见的接口有SPI、I2C和串行2wire等。AD9707使用的是SPI接口。 1AD9707测试 测试电路主要由Samsung公司微处理器S3C2410、Altera公司CycloneIII系列FPGA EP3C25和ADI公司的AD9707组成。 FPGA主要负责算法, ARM微处理器主要负责控制字输入和LCD显示。测试时,分别使用S3C2410的SPI接口和EP3C25模拟 SPI接口,来配置AD9707内部寄存器。测试的过程是,在FPGA中构建了一个DDS(数字直接频率合成器),通过修改控制 字来改变输出波形数据,经AD9707转换后检测输出的波形。 如图1所示,AD9707的基本外围电路由低电压异或门74VX86和运算放大器ADA4899组成。测试时可以通过跳线J1选择 AD9707的工作模式:高电平时为PIN模式;低电平时为SPI模式;出现高电平脉冲时复位内部寄存器。图中AD9707的输入时 钟选择差分时钟;输出选择单端输出,正向输出端IOUTA与ADA4899的反相输入端相连,反向输出端IOUTB接地;内部基准 电压源REFIO与ADA4899的同相输入端相连。ADA4899将AD9707单端输出的电流变化转换为电压变化。外部使用内部基准 电压源时,REFIO引脚需用一个0.1 μF电容接地。74VX86与外部SPI接口相连,主要起电压匹配整形作用。它的电压范围为 1.2~3.6 V,支持AD9707工作的1.8 V和3.3 V。 图1AD9707的基本外围电路 2SPI模式下AD9707与外部CPU的通信 在AD9707测试之前,必须按照外围电路的设计配置好AD9707的工作状态。AD9707有两种配置模式可供选择:PIN模式和 SPI模式。设备可以通过PIN模式进行简单配置,也可以通过SPI模式进行高级配置。当用户使用自校准等高级功能时,必须使 用SPI模式配置AD9707内部寄存器。 SPI(Serial Peripheral Interface,串行外围设备接口),主要应用在EEPROM、Flash、ADC/DAC上。SPI是一种高速的、 全双工、同步的通信总线,在芯片的引脚上只占用4根线,为PCB的布局节省了空间。正是由于这种简单易用的特性,现在绝 大多数芯片都集成SPI通信协议。 SPI的通信原理很简单,它以主从方式工作。这种模式通常有一个主设备和一个(或多个)从设备,需要4根线(单向传输时3 根也可以)。AD9707的SPI接口由SCLK(串行时钟)、SDIO(数据输入输出)和CSB(片选)3根信号线组成。串行时钟 SCLK用来同步数据,并从AD9707中运行内部状态机,最大频率是20 MHz。串行数据输入输出SDIO作为双向的数据总线, 用于发送或接收数据。片选信号CSB低电平时启动通信周期,它允许多个设备在同一条通信线路上使用。当CSB为高电平 时,SDIO引脚为高阻抗状态。在整个通信周期内,CSB必须保持低电平[1]。 图2是外部SPI端口与AD9707通信的时序图。 图2最高有效位先写入的SPI通信时序 整个通信周期分为指令阶段和数据传输阶段。第1阶段是指令阶段,在前8个SCLK上升沿时将8位指令字节写到AD9707中。指 令字节决定了通信中第2阶段的数据传输模式,定义第2阶段的数据传输是读或写,以及数据传输的字节数和传输数据第1个要 修改的寄存器地址。指令字节组成如下: R/W决定指令写入后,数据传输是读取还是写入。N1和N0决定数据传输的字节数。A4~A0决定数据传输时被访问的寄存器地 址,多字节传输时用它来定义起始寄存器地址。 第2阶段是数据传输阶段,在此阶段外部SPI控制器与AD9707开始传输数据。一次传输的数据量由指令阶段来决定,可以传输 1~4个字节的数据。每个字节最后一位传输完成后,寄存器立刻改变。 当AD9707的17脚(PIN/SPI/RESET)上有一个下降沿电平变化时,SPI端口的计数器将复位到指令周期的初始状态。如果 SPI端口正处于一个指令周期或数据传输周期,寄存器中不会写入任何数据。
AD9707内部寄存器主要包括:寄存器SPI CTL,地址为0x00,用于设置SPI通信的具体模式、软复位和内部参考源等,按照 测试电路要求设置为0x80;寄存器DATA,地址为0x02,主要用于设置输出模式选择、数据上升沿锁存和时钟输入模式选择 等,按照测试电路要求设置为0x0;寄存器CALMEM、MEMRDWR和TRIM等用于校准和静态寄存器访问。测试时主要使用寄 存器SPI CTL和DATA。下面围绕着这两个寄存器的配置介绍两种配置方式。 3通过SPI端口配置AD9707内部寄存器 3.1使用ARM微处理器的SPI接口 S3C2410是Samsung公司推出的采用RISC结构的16/32位ARM微处理器。它基于ARM920T内核,采用五级流水线和哈佛结 构,频率达到203 MHz,是高性能、低功耗的硬宏单元。S3C2410还包含下列部分:LCD控制器(STN&TFT)、NAND Flash引导装入程序、系统管理(片选逻辑和SDRAM控制器)、3通道UART、4通道DMA、4通道PWM时钟、I/O口、RTC、 8通道10位ADC及触摸屏接口、I2C总线接口、I2S总线接口、USB主口和设备口和2通道SPI总线接口。 S3C2410具有2个SPI接口模块,每个模块分别具有2个8位移位寄存器用来接收和发送数据。数据的接收(串行移入)和发送 (串行移出)是同时进行的,串行数据的速率由相应的寄存器设定。其时序很简单,主要是在CLK的控制下,2个双向移位寄 存器进行数据交换。当一个数据写入SPTDATn寄存器时,如果ENSCK和SPCONn寄存器中的MSTR位被置位,则启动数据发 送[2]。SPI接口发送数据的流程如图3所示。 图3SPI数据发送流程 使用S3C2410的SPI端口0来配置AD9707内部寄存器的主程序如下: void Spi_MS_poll(void){ int i; S16 a[2]={0x0080,0x0200};//地址0x00的数据为0x80,//地址0x02的数据为0x00 for(i=0;i<2;i++){//通过两次赋值 SPI_Port_Init(0);//SPI端口初始化 rSPPRE0=0x0;//设置波特率SCLK为20Mb/s rSPCON0=(0<<5)|(1<<4)|(1<<3)|(1<<2)|(0<<1)|(0<<0);//设置SPI端口为Polling模式,时钟使能,SPI为主 控模式 rSPPIN0=(0<<2)|(1<<1)|(0<<0);//禁止多主控错误检测使能,主机输出后释放MOSI if(rSPSTA0&0x1){//检查SPI0的状态 rSPTDAT0=a[i]; i++;//发送数据,准备下一次发送 } rSPCON0=(0<<5)|(0<<4)|(1<<3)|(1<<2)|(0<<1)|(0<<0);//设置SPI端口为Polling模式,禁止SCK,选择主控模 式 } } 使用S3C2410的SPI接口可以很方便地配置AD9707,但是在测试电路板上S3C2410离AD9707较远,布线时比较复杂,不得 不使用飞线。为了解决布线困难的问题,采用FPGA模拟SPI接口配置AD9707内部寄存器。 3.2使用FPGA模拟SPI接口 FPGA(Field Programmable Gate Array)即现场可编程门阵列。FPGA的使用非常灵活,同一片FPGA通过不同的程序可以 产生不同的电路功能。本文使用VHDL语言编写一个SPI控制器,来发送配置数据给AD9707。 当仅需要向AD9707中写入数据时,使用SPI时钟线SCLK、SPI数据线SDIO和片选线CSB即可通信。根据图2中的写入时序编 写程序[3],具体代码如下: LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY SPI IS
GENERIC(DATA:STD_LOGIC_VECTOR(11 DOWNTO 0):="110101101011");配置数据 PORT(SCLK:IN STD_LOGIC; CSB,SDIO: OUT STD_LOGIC); END SPI; ARCHITECTURE BEHAVE OF SPIIS SIGNAL COUNT: STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL REG: STD_LOGIC_VECTOR(11 DOWNTO 0); SIGNAL X: STD_LOGIC; BEGIN PROCESS(SCLK,X)产生片选信号CSB BEGIN IF (SCLK'EVENTAND SCLK='1') THEN IF(COUNT<"1111") THEN COUNT<= COUNT+'1'; X<= '0'; ELSE COUNT<= (OTHERS =>'1'); X<= '1'; END IF ; END IF ; CSB<= X; END PROCESS; PROCESS(SCLK)从SDIO串行发送配置数据 BEGIN IF(SCLK'EVENT AND SCLK='1')THEN IF(COUNT="0001")THEN REG<=DATA; ELSE REG<=REG (10 DOWNTO 0) & '0'; END IF; END IF; END PROCESS; SDIO <=REG (11); END BEHAVE; 程序编译仿真后得到的时序图如图4所示。整个程序综合之后仅占用4个逻辑单元,使用类属参数定义配置数据,方便用户按 照自己的设计随意修改。由于AD9707与FPGA直接相连,用FPGA直接配置AD9707在PCB走线上方便很多,比较适合于我们 的测试平台。通过在FPGA中构建的DDS发送波形数据,即可构成一个简易波形发生器,产生一些常见的波形。 图4FPGA模拟SPI接口发送数据的时序仿真图 结语
本文着重介绍了使用ARM微处理器和FPGA这两种常见的嵌入式处理器来配置AD9707,具有一般性和实用性。经测试检验, 配置正确。由于大多数公司的DAC都是使用SPI接口配置内部寄存器,因此本文的程序也可用于配置其他DAC。
分享到:
收藏