衛(wèi)曉娟,李軍紅
(凱邁(洛陽(yáng))電子有限公司,河南 洛陽(yáng)471000)
AD9779是ADI公司的一款產(chǎn)品,是雙通道、寬動(dòng)態(tài)范圍數(shù)模轉(zhuǎn)換器(DAC),提供 1 GS/s采樣速率,允許高至奈奎斯特頻率的多載波生成[1]。AD9788提供800 MS/s的采樣速率,其性能和應(yīng)用方式與AD9779非常相似[2]。AD9779和AD9788雖然不是一個(gè)系列,但芯片管腳是兼容的,在硬件電路的設(shè)計(jì)上并沒(méi)有區(qū)別,兩者均使用標(biāo)準(zhǔn)的SPI接口來(lái)驅(qū)動(dòng),因此軟件實(shí)現(xiàn)上也可以采用統(tǒng)一的驅(qū)動(dòng)方式。但在寄存器的配置上,兩者存在差異,這在后面會(huì)具體介紹。為了描述方便,如不特殊說(shuō)明,下文中使用AD97××來(lái)統(tǒng)一表示 AD9779和 AD9788。
AD97××采用標(biāo)準(zhǔn)的4線(xiàn)SPI接口進(jìn)行通信,當(dāng)然也可以配置成3線(xiàn)SPI接口。
一個(gè)寄存器的讀寫(xiě)周期(或叫傳輸周期)包括兩部分:指令部分和數(shù)據(jù)部分。指令部分是一個(gè)8 bit的字節(jié),對(duì)應(yīng)于8個(gè)時(shí)鐘的上升沿,用來(lái)控制讀寫(xiě)以及隨后需要讀寫(xiě)的數(shù)據(jù)字節(jié)數(shù)。D7為讀/寫(xiě)標(biāo)志位(其中讀為高,寫(xiě)為低),D6和D5是用來(lái)配置指令字節(jié)后面需要傳輸?shù)臄?shù)據(jù)的字節(jié)數(shù),通常配置如表 1所示(N1和N0對(duì)應(yīng)指令字節(jié)中的 D6和 D5),D4~D0是 AD97××寄存器的地址。
需要特別說(shuō)明的是,對(duì)于A(yíng)D9788,指令字節(jié)的D6和D5兩個(gè)位被屏蔽了,因此這兩位不需要配置,指令字節(jié)后面需要傳輸?shù)臄?shù)據(jù)的字節(jié)數(shù)是由寄存器本身來(lái)決定的。例如對(duì)于一個(gè)32 bit的寄存器,指令字節(jié)后面需要傳輸4 B的數(shù)據(jù)。
表1 指令字節(jié)后面?zhèn)鬏數(shù)臄?shù)據(jù)的字節(jié)數(shù)
AD97××主要通過(guò)SPI驅(qū)動(dòng),實(shí)現(xiàn)寄存器的讀寫(xiě)和功能的配置。
將AD97××的代碼分為兩部分設(shè)計(jì),一部分是底層的SPI接口驅(qū)動(dòng),完成SPI接口的初始化、讀寫(xiě)以及設(shè)備封裝等功能;另一部分是AD97××本身的驅(qū)動(dòng),主要通過(guò)SPI封裝的讀寫(xiě)接口實(shí)現(xiàn)對(duì) AD97××芯片的控制。
AD9779的寄存器長(zhǎng)度是固定的8 bit,但AD9788的寄存器長(zhǎng)度是不固定的,有 8 bit、16 bit、32 bit,還 有 24 bit。datasheet中規(guī)定一個(gè)寄存器的讀寫(xiě)傳輸周期由寄存器本身決定,包括一個(gè)指令字節(jié)和實(shí)際傳輸?shù)臄?shù)據(jù)字節(jié)數(shù),例如,0x00寄存器傳輸周期為 2 B,0x01寄存器傳輸周期為3 B。因此對(duì)于A(yíng)D9788,不能用統(tǒng)一的讀寫(xiě)傳輸周期,例如 5 B(8 bit指令+32 bit數(shù)據(jù)),而是需要對(duì)不同長(zhǎng)度的寄存器分開(kāi)處理,這就意味著需要模擬四種不同的SPI時(shí)序。
在寫(xiě)寄存器操作時(shí),一般需要回讀一下來(lái)判斷寫(xiě)的值是否正確?;刈x時(shí)要注意以下兩種情況,否則會(huì)判斷錯(cuò)誤:
(1)有的寄存器個(gè)別位是只讀的,與寫(xiě)進(jìn)去的值沒(méi)有關(guān)系,回讀時(shí)最好屏蔽掉相關(guān)位。例如AD9788的0x04寄存器的高三位(23 bit~21 bit)為只讀;AD9779也有類(lèi)似的寄存器,例如 0x00寄存器低三位(2 bit~0 bit)也是只讀;
(2)寄存器在配置完后就發(fā)生了變化,這種寄存器一般是指示寄存器,例如AD9788的0x09寄存器,有一個(gè)鎖定指示位,配置完后,若PLL鎖定,這一位會(huì)改變,讀出的值和寫(xiě)的值就會(huì)不一樣。
PLL的配置是 AD97××配置中的一個(gè)重點(diǎn),AD9779與AD9788的PLL結(jié)構(gòu)是相同的,不同的是AD9788比AD9779多了一個(gè)NCO,用于頻點(diǎn)搬移。本節(jié)以AD9788為例講述PLL相關(guān)寄存器的配置。
在A(yíng)D9788的數(shù)據(jù)手冊(cè)中,共有15個(gè)配置寄存器,其中與PLL相關(guān)的寄存器主要有 0x01、0x04兩個(gè)寄存器。不過(guò)由于要進(jìn)行頻點(diǎn)搬移,所以還要對(duì)0x0a寄存器按照系統(tǒng)需要進(jìn)行配置。這樣一來(lái),只需關(guān)注0x01、0x04和0x0a這三個(gè)配置寄存器就可以了。
3.3.1 DCTL寄存器
DCTL寄存器(DIGITAL CONTROL REGISTER)參數(shù)為 : 地 址 :0x01h;寬 度 :2 B;默 認(rèn) 值 :0x3100;定 義 值 :0x31c0。在此寄存器中,主要關(guān)注bit[7:6]的設(shè)置,如果系統(tǒng)要求DAC實(shí)現(xiàn) 8倍內(nèi)插,就要配置 bit[7:6]=11,其他位按默認(rèn)值即可。
3.3.2 PLLCTL寄存器
PLLCTL寄存器(PLL CONTROL REGISTER)參數(shù)為:地 址 :0x04h; 寬 度 :3 B; 默 認(rèn) 值 :0x3837cf; 定 義 值 :0x2fb387。
在對(duì)PLL的CTL寄存器進(jìn)行設(shè)置時(shí),主要關(guān)心bit[15:11]和 bit[7:2]值的設(shè)置,bit[15]默認(rèn)是 PLL 無(wú)效,所以要配置 bit[15]=1;bit[14:13]和 bit[12:11]要根據(jù)具體系統(tǒng)需求配置,本例中配置為 bit[14:13]=01,bit[12:11]=10,bit[7:2]的值通過(guò)式(1)計(jì)算并查表 2后決定。
經(jīng)過(guò)查表2可知,bit[7:2]可以取100001或者100000,為了使1 474.56 MHz盡量接近于PLL Lock選擇范圍的中間位置,所以選用bit[7:2]=100001。對(duì)于其他位,按器件手冊(cè)上推薦的最佳值選取即可,這里要注意bit[23:21]的只讀屬性。
表2 AD9788 PLL部分基帶選擇表
3.3.3 FTW寄存器
FTW寄存器(FREQUENCY TUNING WORD REGISTER)參數(shù)為:地址:0x0ah;寬度:4 B;默認(rèn)值:0x00000000;定義值:0x3078E38E。
載波信號(hào)的頻率由FTW寄存器(0x0a)來(lái)配置,計(jì)算方法如下:
其中,fCENTER為NCO搬移到的中心頻率(例如139.6 MHz),fDACCLK為DAC的采樣時(shí)鐘,F(xiàn)TW為FTW寄存器的值。fDACCLK的計(jì)算公式如下:
通過(guò)以上的原理和公式,就可求出特定中心頻率下的FTW寄存器的值。例如fCENTER=139.6 MHz,fREFCLK=92.16 MHz,N1=2,N2=8 時(shí) , 則 fDACCLK=92.16 MHz×8=737.28 MHz。
由式(5)即可求出FTW寄存器的值,如下:
驅(qū)動(dòng)工作完成以后,可以通過(guò)一些簡(jiǎn)單的測(cè)試方法來(lái)驗(yàn)證AD97××芯片是否正常工作。 當(dāng)確認(rèn)芯片和驅(qū)動(dòng)程序能夠正常工作后,驅(qū)動(dòng)程序就可以投入使用了。
[1]Analog Devices Inc.AD9776/AD9778/AD9779 datasheet[S].2007.
[2]Analog Devices Inc.AD9785/AD9787/AD9788 datasheet[S].2007.