模擬對(duì)數(shù)字:架起ADC到處理器的橋梁
作為一個(gè)模擬世界的后裔,我經(jīng)??梢栽谧呃壬下牭叫┰u(píng)論,關(guān)于數(shù)字設(shè)計(jì)師多么不理解模擬問題。數(shù)字設(shè)計(jì)師們也毫不留情地批評(píng)模擬集成電路設(shè)計(jì)師。這兩個(gè)陣營(yíng)涇渭分明,除非參與者們打破界限,一起進(jìn)入混合信號(hào)領(lǐng)域的研究。
對(duì)典型的模擬精神,不是所有轉(zhuǎn)換器都用相同的數(shù)據(jù)格式。一些轉(zhuǎn)換器用無符號(hào)二進(jìn)制數(shù)類型,其他轉(zhuǎn)換器使用有符號(hào)二進(jìn)制補(bǔ)碼數(shù)據(jù)。甚至更復(fù)雜的問題,轉(zhuǎn)換器輸出12位或是14位數(shù)據(jù),還有16位輸出。還有另一種24位Δ-Σ轉(zhuǎn)換器技術(shù)。
先不管這些模擬設(shè)計(jì)結(jié)果的目的。對(duì)于這些轉(zhuǎn)換器而言,ADC最低有效位的位置是這些8位、16位或是32位字處理器的第0位。對(duì)模擬電路設(shè)計(jì)者來說,這具有重要意義。然而,12位轉(zhuǎn)換器的符號(hào)位是處理器的位置11。如果分配16位寬度的變量C為轉(zhuǎn)換器輸出值,假定C符號(hào)位是位置15。處理器不能從轉(zhuǎn)換器識(shí)別出負(fù)數(shù),所有來自12位的雙極性ADC數(shù)據(jù)都是正的。因?yàn)榉?hào)位處于錯(cuò)誤位置。
你可以通過幾個(gè)步驟來解決這個(gè)問題。首先,讀-修改-寫步驟,將處理器寄存器中的數(shù)據(jù)移位。CPU讀取數(shù)據(jù)、移動(dòng)包含數(shù)據(jù)的寄存器的位到必要的位置,然后將這些數(shù)據(jù)寫回內(nèi)存。DSP可以在一個(gè)時(shí)鐘周期內(nèi)完成移位??刂破餍枰芏鄷r(shí)鐘周期才能完成移位的過程。如果你選用了這種控制策略,要小心緩存區(qū)的不連續(xù)性。這意味著緩存區(qū)無法辨別DMA控制器是否將新數(shù)據(jù)寫入內(nèi)存。結(jié)果,CPU將緩存區(qū)的舊數(shù)據(jù)進(jìn)行移位操作。需要記住的是,無論什么時(shí)候向左移了一位,就意味著ADC轉(zhuǎn)換結(jié)果乘了2。
另一種方式是在處理器循環(huán)中將數(shù)據(jù)右移。這種方式的缺點(diǎn)占用CPU并需要額外指令。另一種選擇是直接將轉(zhuǎn)換器與處理器的數(shù)據(jù)總線相連。如果你將12位轉(zhuǎn)換器的第11位與處理器總線上的第15位相連,那么符號(hào)位就會(huì)處于正確的位置。然后將數(shù)據(jù)的第11位到第14位置零來完成數(shù)據(jù)獲取,否則這些位的數(shù)據(jù)是不確定的。這種方法只適用于有并行接口。在這種方案中,基于DMA移動(dòng)就不需要數(shù)據(jù)移位了。
使用串行端口的用戶比并行端口的用戶要幸運(yùn)的多,因?yàn)榇蟛糠痔幚砥鞯拇卸丝谔峁┙邮盏?ldquo;左移用零填充至最低有效位”或“右移符號(hào)位擴(kuò)展至最高有效位”特點(diǎn)。這種特色大大減少了CPU處理內(nèi)存中數(shù)據(jù)的工作。一些串行端口只工作在接收數(shù)據(jù)長(zhǎng)度是2的冪時(shí),例如16位數(shù)據(jù)長(zhǎng)度。這些端口不能工作在12、14或是24位數(shù)據(jù)長(zhǎng)度時(shí)。
模擬工程師幫助處理處理器接口問題。據(jù)我所知,處理器都是8位、16位或是32位的,我從沒聽說過12位或14位的處理器。除非所有的模擬芯片設(shè)計(jì)者突破界限,否則為轉(zhuǎn)換器設(shè)計(jì)數(shù)字接口是理所當(dāng)然的。閱讀ADC數(shù)據(jù)手冊(cè),核對(duì)向數(shù)字接口傳輸?shù)奈坏奈恢?。如果?duì)ADC數(shù)據(jù)接口做了初始檢查,那么你會(huì)因?yàn)殚_始的付出獲得更多成功。