数字示波器中的波形存储、录制与回放
对FLASH的操作主要有复位、写、读和擦除操作。其中写操作只能将FLASH的数据由1写为0,如果试图将0写为1就会出错。如果该区域已经写过就只能先擦除,而FLASH的擦除只能以块为单位,如果对FLASH频繁擦除会减少寿命,因此给A1,A2;2个区各分2个块。假设每1块可以存储10幅波形。当第1块存满10幅波形数据后,下一幅波形存储在第2块中,同时擦除第1块,注意必须是在开始写第2块之后才能擦除第1块,这样可以避免有效数据被擦除。当第2块数据写满之后重新写第1块,并擦除第2块,这样整体看来,存储20幅波形才会对一个块进行擦除,避免了频繁擦除FLASH的某些位置。波形存储流程示意图如图1所示。本文引用地址://m.amcfsurvey.com/article/194611.htm
存储1幅波形(例如通道1的正常触发时候的波形)的具体过程如下:
(1)A1区中包含2个块(a、b)可以存储该波形。确定每一个块最多可以存储波形数量(count),a块的起始地址ADDR_START;b块起始地址就是ADDR_START+0x08000,定义一个实际的存储地址FLASH_addr。
(2)从FM24LC02中读取该区中已存波形的逻辑位置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中的位置就可以。根据触发模式从铁电存储器中的对应位置读出对应波形的逻辑位置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 波形录制与回放
用户在使用示波器时,常常遇到一些瞬态信号,在还没有来得及捕捉之前信号已经消失,这样就需要波形录制与回放功能,将波形录制下来,事后再慢慢寻找并观察。波形录制是将波形数据存储在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之间循环变化。录制缓存的首地址为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之间循环。
评论