把工作簡單化,DSP與數(shù)據(jù)轉(zhuǎn)換器協(xié)同工作需考慮這些因素
發(fā)布時(shí)間:2016-12-14 責(zé)任編輯:susan
【導(dǎo)讀】假設(shè)你接到一項(xiàng)工作任務(wù),設(shè)計(jì)一套由DSP與DAC與ADC等模擬器件組成的信號(hào)處理系統(tǒng)。如果你考慮到幾個(gè)重要因素,工作就會(huì)非常簡單。下面就來談?wù)勗O(shè)計(jì)工作中應(yīng)該考慮的這幾個(gè)因素。
詳細(xì)了解應(yīng)用類型
第一步需要了解應(yīng)用類型。對(duì)于控制型應(yīng)用,既需要應(yīng)對(duì)突發(fā)的大量數(shù)據(jù)處理情形,也要考慮間歇的閑置狀態(tài);而對(duì)于音頻應(yīng)用,則需要處理連續(xù)數(shù)據(jù)流的能力。了解應(yīng)用的具體需求將有助于選擇適當(dāng)?shù)慕涌诤驼_的數(shù)據(jù)讀取方法。
評(píng)估系統(tǒng)速率
第二步需要了解數(shù)據(jù)采樣的速率。舉例來說,音頻系統(tǒng)可能是一部CD播放機(jī),采樣率為96kHz,也可能是電話語音系統(tǒng),采樣率僅為8kHz。當(dāng)然,也可能是其他系統(tǒng),如ADSL質(zhì)量測(cè)量應(yīng)用,采樣速率高達(dá)10MSPS,或者是稱重應(yīng)用,每秒只要16次采樣就足夠了,但要求具備較高的分辨率(如24位)。了解此方面信息,將有助于開展下一步工作,即選擇正確的DSP接口。
選擇正確的DSP接口
了解了應(yīng)用及速率要求后,就對(duì)采用哪種DSP接口有了一定的認(rèn)識(shí)。大多數(shù)音頻設(shè)備均使用特定類型的串行接口,不過高速應(yīng)用則要求并行接口。當(dāng)采樣速率為10MSPS、分辨率 為12位時(shí),如果采用串行接口,其端口的速率要達(dá)到120MHz才能從轉(zhuǎn)換器向DSP發(fā)送數(shù)據(jù)。這一要求大大超過了大多數(shù)50MHz串行端口的處理能力。若使用并行接口,則總線上信號(hào)交換的頻率為10MHz,速率顯著降低,因此處理起來非常簡單。
在選擇接口時(shí),還要考慮的另一問題就是,并行總線能否滿足所需的數(shù)據(jù)速率要求,或者說并行總線芯片在滿足程序與系數(shù)要求后是否已經(jīng)達(dá)到了滿負(fù)荷。如果是的話,不妨考慮在DSP與轉(zhuǎn)換器之間插入FIFO。
確定握手模式
一旦選擇了DSP接口,下一步就要考慮轉(zhuǎn)換器與DSP之間的握手模式(handshakemode)。大多數(shù)轉(zhuǎn)換器在發(fā)出新的數(shù)據(jù)字之前都會(huì)給出某種類型的轉(zhuǎn)換結(jié)束(EOC)信號(hào)。處理器使用上述信號(hào)的方式有兩種:一是輪詢(poll);二是用其作為中斷。
使用EOC信號(hào)作為中斷具有一定優(yōu)勢(shì),因?yàn)镃PU不會(huì)被輪詢標(biāo)記占用,因此在獲得數(shù)據(jù)前不會(huì)打斷CPU的正常工作。不過,如果轉(zhuǎn)換器等待處理特定的協(xié)議來讀取數(shù)據(jù),比如轉(zhuǎn)換器發(fā)出轉(zhuǎn)換結(jié)束信號(hào)后又需要讀取命令來檢索數(shù)據(jù),每個(gè)讀取命令都會(huì)觸發(fā)新的中斷,那么就會(huì)造成過多的開銷,得不償失。在這種情況下,輪詢的方法就具有明顯的優(yōu)勢(shì)了。
如果中斷時(shí)延非常重要的話,那么使用輪詢方式就更具優(yōu)勢(shì)。輪詢可確保信號(hào)響應(yīng)速度更快,這比進(jìn)入中斷服務(wù)例程要快得多。如果數(shù)據(jù)檢索有短暫時(shí)隙(narrowtimeslot),那么采用輪詢方式也是有利的。
確定傳輸模式
下一步就是實(shí)際收集數(shù)據(jù)的工作了。收集數(shù)據(jù)有兩種方法,各有千秋。第一種方法是采用DSP的DMA(直接存儲(chǔ)器存?。┛刂破鳎墒箓鬏斉c轉(zhuǎn)換器的轉(zhuǎn)換結(jié)束標(biāo)記同步,并使CPU不用承擔(dān)傳輸工作,因?yàn)閿?shù)據(jù)陣列的填充是在后臺(tái)完成的,傳輸完成后再通知CPU。
不過,這種方法只有在進(jìn)行直接傳輸?shù)那闆r下才有效。如果數(shù)據(jù)轉(zhuǎn)換器在檢索數(shù)據(jù)時(shí)需要某些復(fù)雜的機(jī)制,那么DMA就不太有效了。
在這種情況下,應(yīng)讓CPU參與傳輸工作。盡管服從特殊的協(xié)議相當(dāng)簡單,但必須使用大量的CPU資源來收集數(shù)據(jù)。如果中斷率非常高,那么CPU可能很難有時(shí)間再去執(zhí)行數(shù)據(jù)收集之后的算法了。
是否采用數(shù)據(jù)猝發(fā)
假設(shè)數(shù)據(jù)轉(zhuǎn)換器連接至DSP的并行總線,該并行總線在存儲(chǔ)器存?。ㄗx取正在執(zhí)行的數(shù)據(jù))和I/O存取(讀取采樣)之間需要幾個(gè)周期的轉(zhuǎn)換,而且數(shù)據(jù)轉(zhuǎn)換速率非常高,因此,轉(zhuǎn)換常常是必需的,幾乎每次采樣讀取都要進(jìn)行轉(zhuǎn)換。
如果一步就能讀取多個(gè)數(shù)據(jù)字,且不用每次都進(jìn)行數(shù)據(jù)總線交換,肯定是非常有價(jià)值的。在這種情況下,不妨考慮在數(shù)據(jù)轉(zhuǎn)換器與DSP之間采用FIFO。一旦FIFO達(dá)到一定的水平即中斷DSP,達(dá)到一定數(shù)量的數(shù)據(jù)字一步完成傳輸,這就大大降低了總線轉(zhuǎn)換的開銷。
針對(duì)變量選擇正確的數(shù)據(jù)類型
數(shù)據(jù)轉(zhuǎn)換器針對(duì)所用的數(shù)據(jù)采用不同的格式。有的使用標(biāo)準(zhǔn)二進(jìn)制(即無符號(hào)二進(jìn)制)數(shù)據(jù)類型,有的則采用帶符號(hào)的二進(jìn)制數(shù)據(jù)類型,這就是問題的復(fù)雜所在。如果有一個(gè)12位數(shù)據(jù)轉(zhuǎn)換器,那么在帶符號(hào)二進(jìn)制數(shù)據(jù)情況下,如何使用將是一個(gè)問題。符號(hào)位占據(jù)最重要的位置,即第“11”位(這里的起始位是第“0”位)。如果將此數(shù)據(jù)字賦予“C”變量,寬度為“16”位,那么假定“C”符號(hào)位為第“15”位。如果從轉(zhuǎn)換器讀取的數(shù)字為負(fù),那么DSP就不能識(shí)別其為負(fù)值,因?yàn)榉?hào)位的位置錯(cuò)誤。如何解決這一問題呢?第一種方法是在讀取數(shù)據(jù)時(shí)進(jìn)
行數(shù)據(jù)位移。不過,這只有在CPU讀取數(shù)據(jù)時(shí)才有可能,因?yàn)镈MA控制器不可能在傳輸時(shí)進(jìn)行數(shù)據(jù)位移。另一種方法是在數(shù)據(jù)塊完全傳輸后在環(huán)路中將數(shù)據(jù)位移至正確的位置。不過這必須使用CPU,并要求額外的MIPS。
如果改變連接后轉(zhuǎn)換器的第“11”位剛好連接至DSP數(shù)據(jù)總線的第“15”位,那么符號(hào)位從首位算起剛好位于正確的位置,這就能實(shí)現(xiàn)基于DMA的傳輸,而且也不用再進(jìn)行數(shù)據(jù)位移。
確保處理的是正確數(shù)據(jù)
現(xiàn)在,數(shù)據(jù)已經(jīng)進(jìn)入系統(tǒng),數(shù)據(jù)字存儲(chǔ)在陣列中,數(shù)據(jù)大小也合適,于是開始處理數(shù)據(jù),但沒有獲得預(yù)期的結(jié)果,這時(shí)需要思考到底出了什么問題。首先應(yīng)該檢查DSP的高速緩存,DMA傳輸數(shù)據(jù)進(jìn)入存儲(chǔ)器時(shí)是否啟用高速緩存,在這種情況下,高速緩存很可能保留拷貝的舊數(shù)據(jù),并在算法工作中使用它們。如果發(fā)生了此類問題,就必需注意高速緩存相關(guān)性與轉(zhuǎn)儲(chǔ)清除問題,或者是存儲(chǔ)新數(shù)據(jù)的高速緩存區(qū)失效。這樣就能確保CPU處理的數(shù)據(jù)是傳輸完成后的最新數(shù)據(jù)。
如果用C語言編程應(yīng)分配易失關(guān)鍵字
在調(diào)試嵌入式系統(tǒng)時(shí),采用變量查詢外設(shè)的狀態(tài)后,發(fā)現(xiàn)CPU所用變量值是錯(cuò)誤的,這時(shí)就要思考到底哪里出了問題。先看看下面這個(gè)結(jié)構(gòu):
unsignedint*pControl=(unsignedint*)0x00COFFEE;file://錯(cuò)誤
while(*pControl==0);file://等待一個(gè)外部事件
這里的*pControl指向一個(gè)外設(shè)。
通過while循環(huán),期望EOC能從“0”轉(zhuǎn)換為“1”。但在大多數(shù)情況下,恐怕得一直等下去,因?yàn)榫幾g器認(rèn)為它已經(jīng)完全控制了變量及與其相關(guān)的存儲(chǔ)器,只加載*pControl指向的存儲(chǔ)器位置的內(nèi)容一次,就會(huì)對(duì)其進(jìn)行循環(huán)測(cè)試。但問題在于,由于不會(huì)重新讀取存儲(chǔ)器內(nèi)容,也就不能結(jié)束循環(huán)。
解決這一問題的方法就是將*pControl的聲明作一下修改,通知編譯器其指向的存儲(chǔ)器位置可由外部事件修改,而每次使用該變量時(shí)都必須重新載入,如下所示:
volatileunsignedint*pControl=(unsignedint*)0x00COFFEE;file://正確
while(*pControl==0);file://等待一個(gè)外部事件
確保采樣等距
如果要在頻域中處理采樣數(shù)據(jù),那么還要提到一點(diǎn):不是所有轉(zhuǎn)換器都有啟動(dòng)新轉(zhuǎn)換的自身時(shí)基。在這種情況下,應(yīng)采用外部時(shí)基或DSP定時(shí)針(timerpin)。
特別推薦
- 協(xié)同創(chuàng)新,助汽車行業(yè)邁向電氣化、自動(dòng)化和互聯(lián)化的未來
- 功率器件熱設(shè)計(jì)基礎(chǔ)(八)——利用瞬態(tài)熱阻計(jì)算二極管浪涌電流
- 用于模擬傳感器的回路供電(兩線)發(fā)射器
- 應(yīng)用于體外除顫器中的電容器
- 將“微型FPGA”集成到8位MCU,是種什么樣的體驗(yàn)?
- 能源、清潔科技和可持續(xù)發(fā)展的未來
- 博瑞集信推出高增益、內(nèi)匹配、單電源供電 | S、C波段驅(qū)動(dòng)放大器系列
技術(shù)文章更多>>
- 探索工業(yè)應(yīng)用中邊緣連接的未來
- 解構(gòu)數(shù)字化轉(zhuǎn)型:從策略到執(zhí)行的全面思考
- 意法半導(dǎo)體基金會(huì):通過數(shù)字統(tǒng)一計(jì)劃彌合數(shù)字鴻溝
- 使用手持頻譜儀搭配高級(jí)軟件:精準(zhǔn)捕獲隱匿射頻信號(hào)
- 為什么超大規(guī)模數(shù)據(jù)中心要選用SiC MOSFET?
技術(shù)白皮書下載更多>>
- 車規(guī)與基于V2X的車輛協(xié)同主動(dòng)避撞技術(shù)展望
- 數(shù)字隔離助力新能源汽車安全隔離的新挑戰(zhàn)
- 汽車模塊拋負(fù)載的解決方案
- 車用連接器的安全創(chuàng)新應(yīng)用
- Melexis Actuators Business Unit
- Position / Current Sensors - Triaxis Hall
熱門搜索
分頻器
風(fēng)力渦輪機(jī)
風(fēng)能
風(fēng)扇
風(fēng)速風(fēng)向儀
風(fēng)揚(yáng)高科
輔助駕駛系統(tǒng)
輔助設(shè)備
負(fù)荷開關(guān)
復(fù)用器
伽利略定位
干電池
干簧繼電器
感應(yīng)開關(guān)
高頻電感
高通
高通濾波器
隔離變壓器
隔離開關(guān)
個(gè)人保健
工業(yè)電子
工業(yè)控制
工業(yè)連接器
工字型電感
功率表
功率電感
功率電阻
功率放大器
功率管
功率繼電器