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