基于NiosⅡ的數(shù)字示波器的設(shè)計(jì)與實(shí)現(xiàn)
3.1.2 SoPC頂層軟件設(shè)計(jì)
本文引用地址:http://www.ex-cimer.com/article/268252.htmSoPC的頂層軟件主要完成波形及參數(shù)的顯示、運(yùn)行/停止控制、光標(biāo)測量、波形窗口移動(dòng)、保存數(shù)據(jù)到SD卡等功能。
(1)波形參數(shù)顯示。繪制完圖形界面后首先輸出波形信息的固定部分,如Vpp:???mV,其中“???”將在讀取相關(guān)參數(shù)后更新。然后讀取相關(guān)參數(shù)并判斷是否變化,若有變化則更新相關(guān)顯示,在波形輸出結(jié)束后將峰峰值更新到屏幕上。
(2)波形顯示。波形參數(shù)顯示完成之后,CPU進(jìn)入等待狀態(tài),若FIFO寫滿信號為1,則開始讀FIFO數(shù)據(jù)并顯示波形。流程如圖4所示。
(3)運(yùn)行/停止控制。波形顯示完后,若讀到stop為1,則等到FIFO寫滿后進(jìn)入停止?fàn)顟B(tài)。在停止?fàn)顟B(tài)FIFO中的數(shù)據(jù)保持不變。在停止?fàn)顟B(tài)若檢測到用戶輸入,則執(zhí)行相應(yīng)函數(shù)。若檢測到stop為0,則清屏,重繪圖形界面,輸出運(yùn)行圖標(biāo),返回到顯示波形狀態(tài)。
(4)光標(biāo)測量。在停止?fàn)顟B(tài)若檢測到光標(biāo)測量為1,則進(jìn)入光標(biāo)測量狀態(tài)。首先將2個(gè)光標(biāo)的y軸坐標(biāo)轉(zhuǎn)換為實(shí)際電壓值輸出到LCD,然后計(jì)算2個(gè)光標(biāo)電壓的差值輸出到LCD上的相應(yīng)位置處。再根據(jù)分頻系數(shù)將2個(gè)光標(biāo)的x軸差值轉(zhuǎn)換為實(shí)際的時(shí)間,輸出到LCD。最后繪制2個(gè)十字光標(biāo),每個(gè)光標(biāo)由一橫一縱2條直線構(gòu)成,其交點(diǎn)位于波形上。
光標(biāo)繪制完成后檢測用戶按鍵,如果有左右移動(dòng)或光標(biāo)切換按鍵操作,則對相應(yīng)光標(biāo)的x坐標(biāo)做加減運(yùn)算,然后從緩沖區(qū)重新讀取波形輸出到LCD,將之前的信息覆蓋,接著再次調(diào)用光標(biāo)繪制函數(shù)繪制新的光標(biāo)位置和光標(biāo)的信息。流程如圖5所示。
(5)將波形保存到SD卡。在停止?fàn)顟B(tài)若檢測到保存按鍵輸入,則將數(shù)據(jù)保存到SD卡。首先在FAT表中查找空簇,返回簇號,并在FAT表中標(biāo)記該簇已被占用,同時(shí)更新FAT表。然后在根目錄中查找已存在的DAT文件,若有DAT文件則返回最大的文件名,否則返回0。然后將緩沖區(qū)的數(shù)據(jù)寫入SD卡的對應(yīng)扇區(qū),扇區(qū)地址=根目錄地址+根目錄大小+(簇號-2)×每簇的扇區(qū)數(shù)。接著在根目錄中找到一個(gè)空閑項(xiàng),將文件名稱、大小、所在簇寫入該項(xiàng),即完成文件的保存。最后在LCD上輸出相應(yīng)的提示信息。流程如圖6所示。
(6)波形顯示窗口的移動(dòng)。在停止?fàn)顟B(tài)若檢測到左右移動(dòng)輸入,則進(jìn)行波形顯示窗口的移動(dòng)。當(dāng)左/右鍵按下時(shí),若窗口沒超過FIFO邊界,則將窗口的首地址左/右移2個(gè)像素,然后更新顯示的窗口,同時(shí)按比例更新窗口指示器的位置。
(7)波形文件格式。用于保存波形的文件使用8.3格式命名,名稱為OSC_xxxx.DAT,其中xxxx為文件的編號。由于每次采集的波形數(shù)據(jù)量大小相同,因此文件的大小也為固定值。FIFO深度為256 B,添加觸發(fā)電平、觸發(fā)沿、時(shí)間刻度等信息后,文件的體積為260 B。由于磁盤的底層讀寫操作是按照扇區(qū)進(jìn)行的,一個(gè)扇區(qū)512 B,所以將文件的大小定義為512 B。前256 B為波形數(shù)據(jù),第257 B為觸發(fā)沿信息,第258 B為觸發(fā)電平信,第259 B,260 B為分頻系數(shù),通過軟件轉(zhuǎn)換后可得時(shí)間刻度的大小。
4 PC機(jī)軟件設(shè)計(jì)
PC端軟件使用C語言設(shè)計(jì)。圖形部分使用SDL庫。PC機(jī)軟件用于打開示波器保存的波形文件,還原波形信息,并可以進(jìn)行光標(biāo)測量。程序首先初始化SDL視頻,然后打開文件讀取260個(gè)字節(jié),關(guān)閉文件。載入背景圖案,初始化TTF字體。將波形繪制到背景圖案上并計(jì)算相關(guān)參數(shù)輸出到相應(yīng)位置,繪制兩個(gè)光標(biāo),等待用戶移動(dòng)光標(biāo)。光標(biāo)移動(dòng)后重新載入背景和波形并更新相關(guān)信息。軟件流程如圖7所示。
5 結(jié)語
本文介紹了一種基于SoPC的數(shù)字示波器設(shè)計(jì),實(shí)際測試結(jié)果表明,系統(tǒng)完成了數(shù)字示波器的基本功能,各部分工作正常,各項(xiàng)指標(biāo)達(dá)到設(shè)計(jì)要求。在設(shè)計(jì)過程中采用了FPGA芯片、嵌入式NiosⅡ處理器以及Verilog HDL語言,簡化了電路的設(shè)計(jì),提高了靈活性,縮短了設(shè)計(jì)周期。
評論