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