數(shù)字示波器中的波形存儲(chǔ)、錄制與回放
對(duì)FLASH的操作主要有復(fù)位、寫(xiě)、讀和擦除操作。其中寫(xiě)操作只能將FLASH的數(shù)據(jù)由1寫(xiě)為0,如果試圖將0寫(xiě)為1就會(huì)出錯(cuò)。如果該區(qū)域已經(jīng)寫(xiě)過(guò)就只能先擦除,而FLASH的擦除只能以塊為單位,如果對(duì)FLASH頻繁擦除會(huì)減少壽命,因此給A1,A2;2個(gè)區(qū)各分2個(gè)塊。假設(shè)每1塊可以存儲(chǔ)10幅波形。當(dāng)?shù)?塊存滿(mǎn)10幅波形數(shù)據(jù)后,下一幅波形存儲(chǔ)在第2塊中,同時(shí)擦除第1塊,注意必須是在開(kāi)始寫(xiě)第2塊之后才能擦除第1塊,這樣可以避免有效數(shù)據(jù)被擦除。當(dāng)?shù)?塊數(shù)據(jù)寫(xiě)滿(mǎn)之后重新寫(xiě)第1塊,并擦除第2塊,這樣整體看來(lái),存儲(chǔ)20幅波形才會(huì)對(duì)一個(gè)塊進(jìn)行擦除,避免了頻繁擦除FLASH的某些位置。波形存儲(chǔ)流程示意圖如圖1所示。本文引用地址:http://www.ex-cimer.com/article/194611.htm
存儲(chǔ)1幅波形(例如通道1的正常觸發(fā)時(shí)候的波形)的具體過(guò)程如下:
(1)A1區(qū)中包含2個(gè)塊(a、b)可以存儲(chǔ)該波形。確定每一個(gè)塊最多可以存儲(chǔ)波形數(shù)量(count),a塊的起始地址ADDR_START;b塊起始地址就是ADDR_START+0x08000,定義一個(gè)實(shí)際的存儲(chǔ)地址FLASH_addr。
(2)從FM24LC02中讀取該區(qū)中已存波形的邏輯位置N1,N1+1就是現(xiàn)在要存波形的邏輯位置。
如果N1≤count,數(shù)據(jù)存儲(chǔ)在a中,地址是FLASH_addr=ADDR_START+(N1-1)K1。
如果N1=count+1,數(shù)據(jù)存儲(chǔ)在b中,地址是FLASH_addr=ADDR_START+0x08000+(N1-count-1)K1,數(shù)據(jù)存儲(chǔ)之后擦除a中的數(shù)據(jù)。
如果count+1N12count,數(shù)據(jù)存儲(chǔ)在b中,地址是FLASH_addr=ADDR_START+0x08000+(N1-count-1)K1。
如果N1=2count,數(shù)據(jù)存儲(chǔ)在b中,地址是FLASH_addr=ADDR_START+0x08000+(N1-count-1)K1,存儲(chǔ)之后,N1=0。下一幅波形存儲(chǔ)在a中,然后擦除b中的數(shù)據(jù)。
(3)將邏輯位置N1存儲(chǔ)在FM24CL04的X1的位置。
注意,DSP接收到采樣數(shù)據(jù)后,需要根據(jù)時(shí)基通過(guò)軟件再次抽點(diǎn)后的數(shù)據(jù)才是需要顯示的波形數(shù)據(jù)。FLASH中存儲(chǔ)的波形數(shù)據(jù)是軟件抽點(diǎn)以前的數(shù)據(jù),這樣在調(diào)出波形數(shù)據(jù)以后可以根據(jù)用戶(hù)的要求做相應(yīng)處理。
調(diào)出FLASH中的波形只需要計(jì)算出該波形在FLASH中的位置就可以。根據(jù)觸發(fā)模式從鐵電存儲(chǔ)器中的對(duì)應(yīng)位置讀出對(duì)應(yīng)波形的邏輯位置N,根據(jù)N來(lái)計(jì)算數(shù)據(jù)的起始地址。如果N≤count,F(xiàn)LASH_addr=ADDR_START+(N-1)K,如果N>count,F(xiàn)LASH_addr=ADDR_START+(N-count-1)K,根據(jù)計(jì)算出的地址按照對(duì)應(yīng)波形數(shù)據(jù)的大小讀取數(shù)據(jù)。
存儲(chǔ)與回放過(guò)程的重點(diǎn)在于對(duì)FLASH進(jìn)行操作的程序,主要是對(duì)FLASH內(nèi)部的命令寄存器按照一定的時(shí)序?qū)懭朊睢?br />2.2 波形錄制與回放
用戶(hù)在使用示波器時(shí),常常遇到一些瞬態(tài)信號(hào),在還沒(méi)有來(lái)得及捕捉之前信號(hào)已經(jīng)消失,這樣就需要波形錄制與回放功能,將波形錄制下來(lái),事后再慢慢尋找并觀(guān)察。波形錄制是將波形數(shù)據(jù)存儲(chǔ)在SDRAM中。本設(shè)計(jì)中最多可以錄制100幅波形,并且是最近的100幅,如果已經(jīng)錄制滿(mǎn)之后就會(huì)替換最先錄制的波形數(shù)據(jù),而每副波形數(shù)據(jù)大小為400個(gè)點(diǎn),這樣就需要分配出400×100大小的空間。本設(shè)計(jì)中使用ADSP BF531
的DMA方式,把顯示緩存中的波形數(shù)據(jù)直接傳送給波形錄制的緩存,這樣可以不經(jīng)過(guò)CPU就實(shí)現(xiàn)了數(shù)據(jù)的高速存儲(chǔ),本設(shè)計(jì)中采用的是Memory到Memory之間的DMA方式。BF531中的具體配置如下:
以上是目的地址的DMA設(shè)置。注意數(shù)據(jù)源的DMA必須在目的地址的DMA使能之前使能。
每次波形顯示之后啟動(dòng)DMA方式把波形數(shù)據(jù)存儲(chǔ)到錄制緩存中。錄制滿(mǎn)100幅波形之后就必須剔除最先錄制的波形,定義一個(gè)波形數(shù)目wave_data,一個(gè)波形覆蓋數(shù)目cover_data,cover_data在0~99之間循環(huán)變化。錄制緩存的首地址為L(zhǎng)uzhi_addr,每存儲(chǔ)一幅波形wave_data加1。
如果wave_data100,波形錄制的地址為L(zhǎng)uzhi_addr+400*wave_data。
如果wave_data=100,wave_data保持100不變,cover_data加1,波形錄制的地址為L(zhǎng)uzhi_addr+400*(cover_data-1)。cover_data在0~100之間循環(huán)。
評(píng)論