高速誤碼測試系統中的C8051F005運用
① 關閉中斷允許。
② MCU將VSC8228的NSS拉低(即置P2.4=0),以選中從器件VSC8228。
③ 將待發送的數據寫入數據寄存器(SPI0DAT),即寫發送緩沖器。如果SPI移位寄存器為空,發送緩沖器中的數據字節被傳送到移位寄存器,數據傳輸開始。
④ 在SCK上提供串行時鐘,同時在MOSI線上串行移出數據。傳輸結束后,SPIF(SPI0CN.7)標志被置1。
⑤ 傳輸結束,將NSS拉高,打開中斷允許。
以下是SPI寫VSC8228測試程序的關鍵代碼:
2.3 上位機軟件設計
上位機主要實現以下功能:顯示當前日期和時間;根據檢測需要設置檢測參數(產生碼型、檢測碼型、速率、輸出去重、擺動輸入均衡、探測門限等);運行時間及BER的計算,控制按鈕及LED顯示檢測狀態。狀態燈可以顯示的狀態有“無信號”、“同步態”、“失同步態”與“等待態”等。它是在WindowsXP環境下采用Delphi語言編寫的。首先在Delphi里加載串行通信功能的SPCOMM控件,它使用非常方便。由于Delphi采用事件驅動模式,程序員只需要對Delphi組件的屬性、事件進行編程,然后再由這些組件對相應的事件進行響應。這樣就使得各個事件彼此完全獨立,減少事件間的耦合性,可以大大提高程序的穩定性和可靠性,同時簡化程序的編碼過程。
SPCOMM應用的核心在于主線程、讀線程和寫線程之間的消息傳遞機制,而通信數據相關信息的傳遞也是以消息傳遞的方式進行的。在使用SPCOMM進行串口通信編程時,需特別注意以下兩個問題:首先,SPCOMM是通過ReadIntervalTimeout屬性的設置來確定所接收到的數據是否屬于同一幀數據的,其默認值是100 ms。也就是說,只要任何兩個字節到達的時間間隔小于100 ms,都被認為是屬于同一幀數據。另外,SPCOMM的默認屬性設置是支持軟件流控制的,用于流控制的字符是13H(XoffChar)和11H(XonChar),當單片機以二進制方式發送數據時,必須禁用SPCOMM對于軟件流控制的支持,即Inx_XonXoff-Flow屬性設為False,否則,在數據幀中出現的13H、11H會被SPCOMM作為控制字符而加以忽略。
由于單片機的SPI口對VSC8228進行控制時須向每個寄存器發控制字,所以界面就要求發送1個地址加1個字節數據的形式,這樣就有16位;同時為單片機能夠方便地分清每個幀(1字節地址加1字節數據),每次發送1幀就延時100 ms。單片機每秒掃描1次VSC8228的全部寄存器,并將數據傳送給界面,因此,界面首先要一幀一幀地識別出來,然后對于某些地址的數據進行特定的操作。
誤碼率是誤碼個數與碼總個數的比值。碼總個數是檢測時間和速率的乘積。對不同的速率有不同的總數。由此,得出誤碼率。
關鍵代碼如下:
3 誤碼測試性能
本設計經實驗測試,上位機與下位機的串口通信以及MCU與誤碼測試模塊的通信都能正確傳輸。為適應高速測試,目前SPI的傳輸速率(指SCK頻率)為2 MHz。根據本方案設計誤碼檢測儀已運用于EPON光收發模塊的連續碼測試。與臺灣宜捷威科技的FMTS-3000以及安立的MP1630的測試比較結果看,本誤碼測試儀其誤碼數量級與上述兩種設備基本一致,但是不能支持突發誤碼的測試。對突發誤碼測試的支持是項目組下一步研究的目標。
結 語
VSC8228芯片支持速率多樣,它內置PBRS及其他碼型的產生及探測模塊。筆者利用該特點設計出一種基于C8051F005單片機的廉價高速誤碼儀,探討了利用Delphi里的SPCOMM控件來實現PC機與C8051F005之間串行通信的方法,以及C8051F005與VSC8228的SPI通信過程。設計的誤碼儀支持的測試碼型有27、223、231的偽隨機碼,40或64位用戶定義碼型以及光纖信號CRPAT、CJT-PAT、CSPAT碼型等,一次可測誤碼高達43億個,可測碼速高達4.25 Gbps在EPON光收發模塊中實現了誤碼測試,效果較好,而且功耗低,有較高的實用價值。
評論