AN-621: AD9832/AD9835的编程
简介
本应用笔记将详细描述如何将AD9832/AD9835器件的输出编程为5 MHz。其中将详细说明频率寄存器(frequency register)、迟延寄存器(defer register)和命令序列(command sequence)。
频率寄存器
AD9832含有一个32位频率寄存器。该寄存器如下所示,分解为4个字节。由于AD9832在任一命令中仅接受8位数据,为了完全编程32位寄存器,用户必须输入4条命令,每条命令仅传送8位数据。
出于寻址目的,该32位寄存器按以下方式分解:16 MSB定义为8个高位(H)和8个低位(L)。类似地,16 LSB采用相同的寻址方案,8个高位(H)和8个低位(L)。
频率字
频率字为32位,由用户输入至频率寄存器。该频率字决定输出频率,其依据是所需输出频率与参考时钟频率之比。在以下示例中,参考时钟为25 MHz。所需输出为5 MHz,因此,频率字的计算公式为:
(5/25) × (0xFFFFFFFF) = 0x33333333
迟延寄存器
迟延寄存器(带宽16位)充当被写入的最后一个寄存器的缓冲寄存器。迟延寄存器通过两次写操作写入。前8位将保留(迟延)于寄存器中,直到写入下8位。当全部16位均写入寄存器时,频率寄存器将被更新。迟延寄存器始终指向上次被写入的地址。
由于迟延寄存器保存着上次被写入的16位数据,并且仍然指向上次被寻址的频率寄存器,因此,可通过一次写操作更新低8位或高8位。该操作被称为直写,实际上为正常写序列的最后部分。
请注意,如果用户希望写入到任何其他寄存器,则必须执行如上所示的完整写序列。
5 MHz程序的全部命令序列
0xF800 二进制 (1111 1000 0000 0000)
0x3333 二进制 (0011 0011 0011 0011)
0x2233 二进制 (0010 0010 0011 0011)
0x3133 二进制 (0011 0001 0011 0011)
0x2033 二进制 (0010 0000 0011 0011)
0xC000 二进制 (1100 0000 0000 0000)
命令序列说明
考虑到本文需要,16位SPI字将采用以下寻址方式:
D15, D14, D13, ..., D2, D1, D0
0xF800 | 二进制 (1111 1000 0000 0000) |
D15, D14 | 1,1. 表示D13、D12和D11三位处于有效状态。这种情况下: |
D13 | 1, SLEEP位,将器件置于睡眠模式。 |
D12 | 1, RESET位,将器件置于复位模式,即DAC的输出为中量程。 |
D11 | 1, CLR位,当CLR = 1时,SYNC和SELSRC设为1。可控制选择哪个寄存器用于外部引脚,而不通过软件。CLR将自动复位为0。 |
D10...D0 | 0.(它们是无关位,X。) |
现在即可开始对器件编程。 | |
0x3333 | 二进制 (0011 0011 0011 0011) |
命令分解如下: | |
0011 | /*向迟延寄存器写入8个频率位*/ |
0011 | /*写入频率寄存器0, H MSB */ |
0011 0011 | /*8位写入数据*/ |
0x2233 | 二进制 (0010 0010 0011 0011) |
0010 | /*向迟延寄存器写入8个频率位*/ |
0010 | /*写入频率寄存器0, L MSB */ |
0011 0011 | /*8位写入数据*/ |
现在,16位被载入频率寄存器0的上16位。 | |
0x3133 | 二进制 (0011 0001 0011 0011) |
0011 | /*向迟延寄存器写入8个频率位*/ |
0001 | /*写入频率寄存器0, H LSB */ |
0011 0011 | /*8位写入数据*/ |
0x2033 | 二进制 (0010 0000 0011 0011) |
0010 | /*向迟延寄存器写入8个频率位*/ |
0000 | /*写入频率寄存器0, L LSB */ |
0011 0011 | /*8位写入数据*/ |
此时16位被载入频率寄存器0的下16位。 | |
0xC000 | 二进制 (1100 0000 0000 0000) |
D15, D14 | 1,1. 表示D13、D12和D11三位处于有效状态。这种情况下: |
D13 | 0, SLEEP位,使器件脱离睡眠模式。 |
D12 | 0, RESET位,使器件脱离复位模式。 |
D11 | 0, CLR位, |
D10...D0 | 0(本命令的无关位。) |
现在,5 MHz将出现于输出引脚上。FSELECT引脚必须拉至GND,以选择频率寄存器0。