高速數(shù)模轉(zhuǎn)換器AD9779/AD9788的應(yīng)用
2012-03-16
作者:衛(wèi)曉娟,李軍紅
來源:來源:微型機(jī)與應(yīng)用2011年第24期
摘 要: 介紹了高速數(shù)模轉(zhuǎn)換器AD9779和AD9788的使用方法,重點(diǎn)介紹了其驅(qū)動(dòng)軟件設(shè)計(jì)方法和內(nèi)部寄存器的配置方式等,。文中內(nèi)容都是實(shí)踐經(jīng)驗(yàn),,具有很強(qiáng)的實(shí)用性和參考價(jià)值,。
關(guān)鍵詞: AD9779;AD9788;數(shù)模轉(zhuǎn)換器;串行外設(shè)接口,;鎖相環(huán)
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ì)上并沒有區(qū)別,兩者均使用標(biāo)準(zhǔn)的SPI接口來驅(qū)動(dòng),,因此軟件實(shí)現(xiàn)上也可以采用統(tǒng)一的驅(qū)動(dòng)方式,。但在寄存器的配置上,,兩者存在差異,,這在后面會(huì)具體介紹,。為了描述方便,如不特殊說明,,下文中使用AD97××來統(tǒng)一表示AD9779和AD9788,。
1 AD97××的SPI規(guī)范
AD97××采用標(biāo)準(zhǔn)的4線SPI接口進(jìn)行通信,當(dāng)然也可以配置成3線SPI接口,。
一個(gè)寄存器的讀寫周期(或叫傳輸周期)包括兩部分:指令部分和數(shù)據(jù)部分,。指令部分是一個(gè)8 bit的字節(jié),對應(yīng)于8個(gè)時(shí)鐘的上升沿,,用來控制讀寫以及隨后需要讀寫的數(shù)據(jù)字節(jié)數(shù),。D7為讀/寫標(biāo)志位(其中讀為高,寫為低),,D6和D5是用來配置指令字節(jié)后面需要傳輸?shù)臄?shù)據(jù)的字節(jié)數(shù),,通常配置如表1所示(N1和N0對應(yīng)指令字節(jié)中的D6和D5),D4~D0是AD97××寄存器的地址,。
需要特別說明的是,,對于AD9788,指令字節(jié)的D6和D5兩個(gè)位被屏蔽了,,因此這兩位不需要配置,,指令字節(jié)后面需要傳輸?shù)臄?shù)據(jù)的字節(jié)數(shù)是由寄存器本身來決定的。例如對于一個(gè)32 bit的寄存器,,指令字節(jié)后面需要傳輸4 B的數(shù)據(jù),。
2 AD97××的驅(qū)動(dòng)方式
AD97××主要通過SPI驅(qū)動(dòng),實(shí)現(xiàn)寄存器的讀寫和功能的配置,。
將AD97××的代碼分為兩部分設(shè)計(jì),,一部分是底層的SPI接口驅(qū)動(dòng),完成SPI接口的初始化,、讀寫以及設(shè)備封裝等功能,;另一部分是AD97××本身的驅(qū)動(dòng),主要通過SPI封裝的讀寫接口實(shí)現(xiàn)對AD97××芯片的控制,。
3 AD97××的配置說明
3.1 寄存器長度不固定的問題
AD9779的寄存器長度是固定的8 bit,,但AD9788的寄存器長度是不固定的,有8 bit,、16 bit,、32 bit,還有24 bit,。datasheet中規(guī)定一個(gè)寄存器的讀寫傳輸周期由寄存器本身決定,,包括一個(gè)指令字節(jié)和實(shí)際傳輸?shù)臄?shù)據(jù)字節(jié)數(shù),例如,,0x00寄存器傳輸周期為2 B,,0x01寄存器傳輸周期為3 B,。因此對于AD9788,不能用統(tǒng)一的讀寫傳輸周期,,例如5 B(8 bit指令+32 bit數(shù)據(jù)),,而是需要對不同長度的寄存器分開處理,這就意味著需要模擬四種不同的SPI時(shí)序,。
3.2 個(gè)別寄存器回讀時(shí)應(yīng)注意
在寫寄存器操作時(shí),,一般需要回讀一下來判斷寫的值是否正確?;刈x時(shí)要注意以下兩種情況,,否則會(huì)判斷錯(cuò)誤:
(1)有的寄存器個(gè)別位是只讀的,與寫進(jìn)去的值沒有關(guān)系,,回讀時(shí)最好屏蔽掉相關(guān)位,。例如AD9788的0x04寄存器的高三位(23 bit~21 bit)為只讀;AD9779也有類似的寄存器,,例如0x00寄存器低三位(2 bit~0 bit)也是只讀,;
(2)寄存器在配置完后就發(fā)生了變化,這種寄存器一般是指示寄存器,,例如AD9788的0x09寄存器,,有一個(gè)鎖定指示位,配置完后,,若PLL鎖定,,這一位會(huì)改變,讀出的值和寫的值就會(huì)不一樣,。
3.3 AD97×× PLL的配置
PLL的配置是AD97××配置中的一個(gè)重點(diǎn),,AD9779與AD9788的PLL結(jié)構(gòu)是相同的,不同的是AD9788比AD9779多了一個(gè)NCO,,用于頻點(diǎn)搬移,。本節(jié)以AD9788為例講述PLL相關(guān)寄存器的配置。
在AD9788的數(shù)據(jù)手冊中,,共有15個(gè)配置寄存器,,其中與PLL相關(guān)的寄存器主要有0x01、0x04兩個(gè)寄存器,。不過由于要進(jìn)行頻點(diǎn)搬移,,所以還要對0x0a寄存器按照系統(tǒng)需要進(jìn)行配置。這樣一來,,只需關(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,。
在對PLL的CTL寄存器進(jìn)行設(shè)置時(shí),,主要關(guān)心bit[15:
11]和bit[7:2]值的設(shè)置,bit[15]默認(rèn)是PLL無效,,所以要配置bit[15]=1,;bit[14:13]和bit[12:11]要根據(jù)具體系統(tǒng)需求配置,本例中配置為bit[14:13]=01,,bit[12:11]=10,,bit[7:2]的值通過式(1)計(jì)算并查表2后決定。
fvco=frefclk×N1×N2 (1)
經(jīng)過查表2可知,,bit[7:2]可以取100001或者100000,,為了使1 474.56 MHz盡量接近于PLL Lock選擇范圍的中間位置,所以選用bit[7:2]=100001,。對于其他位,,按器件手冊上推薦的最佳值選取即可,這里要注意bit[23:21]的只讀屬性,。
驅(qū)動(dòng)工作完成以后,,可以通過一些簡單的測試方法來驗(yàn)證AD97××芯片是否正常工作。 當(dāng)確認(rèn)芯片和驅(qū)動(dòng)程序能夠正常工作后,,驅(qū)動(dòng)程序就可以投入使用了,。
參考文獻(xiàn)
[1] Analog Devices Inc.AD9776/AD9778/AD9779 datasheet[S]. 2007.
[2] Analog Devices Inc.AD9785/AD9787/AD9788 datasheet[S]. 2007.