<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 測試測量 > 設計應用 > C8051F005在高速誤碼測試系統中的運用

C8051F005在高速誤碼測試系統中的運用

作者: 時(shí)間:2008-11-14 來(lái)源:網(wǎng)絡(luò ) 收藏


引 言

隨著(zhù)通信技術(shù)的不斷發(fā)展,通信系統信號處理越來(lái)越快。在這種情況下,對于高速通信系統性能的檢驗,就需要高速誤碼測試儀。目前市而上已有多種誤碼測試儀。國內產(chǎn)品的信號處理速度較低,而國外產(chǎn)品的功能雖然比較完善,處理速度很高,但其價(jià)格也相對較高。本文根據Vitesse公司的VSC8228芯片特點(diǎn),利用C8051F005單片機設計出一種價(jià)廉的高速誤碼測試儀。下面將對其軟硬件設計,特別是C8051F005與上位機的串口通信以及與VSC8228的SPI通信進(jìn)行詳細探討。

1 誤碼測試系統概述

Cygnal公司的單片機C8051F005具有高速8051微控制器內核,速度可達25 MIPS,指令為流水線(xiàn)指令結構,70%的指令的執行時(shí)間為1個(gè)或2個(gè)系統時(shí)鐘周期;可片內JTAG調試和邊界掃描,這樣可提供全速、非侵人式的在系統調試(不需仿真器);片內有多達60 KB的FlashROM和2 KB RAM,用戶(hù)無(wú)需再外擴存儲器;可同時(shí)使用的硬件SMBus(I2C兼容)、SPI及UART串口,4個(gè)通用16位計數器/定時(shí)器。

VSC8228可提供的一個(gè)雙通道重發(fā)器或重定時(shí)器,能應用于光纖信道、千比特以太網(wǎng)、SONET/SDH以及無(wú)限帶寬等多種領(lǐng)域。設備支持速率從125 Mbps~4.25Gbps。該芯片可以將輸入的串行數據在重定時(shí)器模式下與本地的參考時(shí)鐘同步,內置的碼型產(chǎn)生器與檢測器可以產(chǎn)生與探測27、223、231的偽隨機碼,40或64位用戶(hù)定義碼型以及光纖信號CRPAT、CJTPAT、CSPAT碼型。它含128個(gè)寄存器,可通過(guò)SPI或者I2C串行總線(xiàn)設置相關(guān)寄存器,可以實(shí)現誤碼檢測功能。

誤碼測試系統可分為兩個(gè)部分:誤碼測試部分和人機界面。測試部分由VSC8228芯片來(lái)實(shí)現。它完成偽隨機碼型的產(chǎn)生、同步及對比檢測,計算出誤碼個(gè)數。人機界面子系統在整個(gè)測試系統中作為系統控制核心單元,通過(guò)人機界面完成系統作業(yè)。以C8051F005單片機作為人機界面硬件的控制部分,對VSC8228芯片的控制、誤碼率的計算以及測試子系統的各狀態(tài)的顯示都通過(guò)PC機的界面來(lái)實(shí)現。PC界面采用Delphi語(yǔ)言編寫(xiě)。

誤碼測試儀的工作流程如下:PC界面通過(guò)RS232串口實(shí)現與C8051F005的通信,將對VSC8228各寄存器的沒(méi)置發(fā)送給C8051F005單片機,每個(gè)控制命令為16位;單片機通過(guò)SPI口將上位機發(fā)送過(guò)來(lái)的控制命令轉發(fā)給VSC8228,完成VSC8228各寄存器的設置。為了實(shí)時(shí)地顯示誤碼測試儀的工作狀態(tài),單片機每秒掃描一次各寄存器,將其值通過(guò)RS232串口上傳到PC界面。

由此可見(jiàn),C8051F005單片機起著(zhù)VSC8228與上位機通信的橋梁作用,它與上位機的串口通信以及與VSC8228的SPI通信在誤碼測試儀的實(shí)現過(guò)程中起著(zhù)十分重要的作用。下面通過(guò)軟硬件設計詳細分析這兩種通信。

2 誤碼測試系統的實(shí)現

2.1 硬件設計

利用C8051F005單片機的串行接口,通過(guò)RS232異步通信接口與上位機進(jìn)行通信。C8051F005通過(guò)串行口直接接收PC上位傳送來(lái)的串行數據,然后把接收的數據存入數據存儲器;同樣,C8051F005通過(guò)串行口直接把數據傳送給PC機。系統結構框圖如圖1所示。

C8051F005有一個(gè)特別的交叉開(kāi)關(guān),可將數字I/O資源分配到物理I/O端口引腳。C8051F005通過(guò)設置交叉開(kāi)關(guān)來(lái)同時(shí)使用SMBus(I2C兼容)、SPI及UART串口等。VSC8228也可通過(guò)SPI或者I2C串行總線(xiàn)設置相關(guān)寄存器,但由于SPI通信的速率比I2C通信快,因此為了實(shí)現誤碼的高速測試,這里選擇SPI作為C8051F005與VSC8228的通信協(xié)議。

SPI接口協(xié)議要求接口設備按主從方式進(jìn)行配置,且同一時(shí)間內總線(xiàn)上只能有一個(gè)主器件。一般情況下,實(shí)現SPI接口需要3或4根線(xiàn)。其中:主出從入(MOSI)信號是主器件的輸出和從器件的輸入,數據傳輸時(shí)最高位在先;主人從出(MISO)信號是從器件的輸出和主器件的輸入,數據傳輸時(shí)也是最高位在先。當SPI從器件未被選中時(shí),它將MISO引腳置于高阻狀態(tài)。串行時(shí)鐘(SCK)信號是用于同步主器件和從器件之間在MOSI和MISO線(xiàn)上的串行數據傳輸。從選擇(NSS)信號是一個(gè)輸入信號,主器件用它來(lái)選擇處于從方式的SPI模塊,在主方式時(shí)用于禁止SPI模塊。當處于從方式時(shí),它被拉為低電平以啟動(dòng)一次數據傳輸,并在傳輸期間保持低電平。

誤碼測試系統中,以C8051F005作為主器件,VSC8228為從器件,由于NSS為從器件選擇使用,將單片機的NSS引腳(P0.5)置高,用P2.4引腳與VSC8228的NSS引腳(PIO3)相連。根據MOSI及MISO上的數據在SCK的哪種極性和相位上有效,單片機上的SPI通信有四種工作模式;但是VSC8228的SPl只有一種工作模式,故在對單片機的SPI控制器進(jìn)行設置時(shí)必須考慮這點(diǎn)。圖2是VSC8228的SPI通信時(shí)序。在SPI通信時(shí),先傳輸7位地址,后傳輸讀寫(xiě)控制位OP(OP為0時(shí)表示讀,OP為1時(shí)表示寫(xiě)),最后傳輸8位數據,故SPI通信的命令字長(cháng)度為16位。

2.2 下位機軟件設計

下位機采用中斷方式實(shí)現與上位機的通信,單片機用SPI與VSC8228誤碼測試模塊的通信。每當串行口接收或發(fā)送完一組串行數據時(shí),就產(chǎn)生一個(gè)中斷請求。串行中斷請求在單片機芯片內部自動(dòng)由硬件置位發(fā)生,具有實(shí)時(shí)性高的特點(diǎn)。圖3是單片機的控制程序流程。

對單片機進(jìn)行程序初始化,包括看門(mén)狗、系統時(shí)鐘、I/O口、SPI寄存器、UART口等。C8051F005單片機具有看門(mén)狗,但是看門(mén)狗到一定時(shí)間,將重啟單片機,為防止這種現象的產(chǎn)生,初始化里禁止了看門(mén)狗。SPI的初始化主要是對啟動(dòng)SPI的相關(guān)控制寄存器進(jìn)行配置。UART的初始化主要是對串口的控制字進(jìn)行設置。I/O口的初始化通過(guò)設置交叉開(kāi)關(guān)來(lái)啟動(dòng)SPI與UART口,并將有關(guān)輸出設置為推挽輸出。

系統時(shí)鐘初始化模塊,由于是選擇外部晶振作為時(shí)鐘源,根據C8051F005的要求,在通過(guò)外部振蕩器控制寄存器OSCXCN選擇了外部晶振后,需等待至少1ms后再查詢(xún)等待OSCXCN寄存器中的D7位,即XTLVLD位變?yōu)?,表明外部晶振正在運行并已工作穩定,然后才能通過(guò)內部振蕩器控制寄存器OSCICN的D3位,即CLKSL置1來(lái)選擇外部晶振。

具體的參考程序如下:

C8051F005使用4個(gè)特殊功能寄存器來(lái)實(shí)現對SPI的控制和訪(fǎng)問(wèn)。這4個(gè)寄存器分別是控制寄存器(SPI0CN)、數據寄存器(SPI0DAT)、配置寄存器(SPIOCFG)和時(shí)鐘頻率寄存器(SPI0CKR)。當以C8051F005為主器件時(shí),應將主允許標志(MSTEN,SPI0CN.1)置1,同時(shí)將SPI使能SPIEN(SPI0CN.0)置1。通過(guò)CKPHA(SPI0CFG.7)和CKPOL(SPI0CFG.6)可選擇SPI相位與極性,從而實(shí)現SPI通信的四種模式,但因為VSC8228只支持一種方式,所以將它們同時(shí)置為0,則空閑時(shí)SCK為低,此時(shí)的系統將在上升沿發(fā)送數據,下降沿接收數據(時(shí)序圖見(jiàn)圖2)。由于在MCU中,SCK的頻率可從系統時(shí)鐘分頻得到,因此該頻率可由下式給出:

其中fsysclk是系統時(shí)鐘頻率,SPI0CKR是SPI0CKR寄存器中的8位值。

為了防止上次測試對本次的影響,在程序的初始化之后,對VSC8228寫(xiě)入重肩命令,這樣每次運行程序都將VSC8228的寄存器恢復為默認值。界面發(fā)送的數據為16位,其中8位地址,8位數據,而且每個(gè)數據是一個(gè)字符。為讓單片機識別控制命令已發(fā)完,最后一個(gè)16位數據設為FFFF。另外,每16位數據之間加入了100 ms的延時(shí),這樣Spcomm控件就會(huì )把每16位數據當成1幀,單片機也能夠正確地接收所有數據。

單片機用中斷的方法來(lái)接收界面傳過(guò)來(lái)的數據。每接到一個(gè)數據,即一個(gè)字符,就執行中斷子程序,將接收到的數據的最低位存人數組。串口中斷子程序流程如圖4所示。當接收到16個(gè),就接收完1幀,轉入執行主程序去對收到的16位進(jìn)行處理。處理過(guò)程就是將收到的16個(gè)數據(存放在數組中),通過(guò)移位跟“或”運算,綜合成16位的數據。然后,通過(guò)移位運算,取高8位作為地址,低8位作為數據。對于接收的16位數據,如果不是FFFF,則將提取出來(lái)的8位數據,發(fā)送給提取出來(lái)的8位地址對應的寄存器;如果接收的16位數據為FFFF,表示所有的控制命令已經(jīng)發(fā)完,這時(shí)VSC8228的全部寄存器設置完畢,VSC8228的碼型產(chǎn)生模塊以及檢測模塊開(kāi)始工作。此時(shí),單片機每秒掃描一次所有寄存器的值,并將其值通過(guò)串口傳給界面,界面對串口傳送過(guò)來(lái)的數據進(jìn)行處理。

本設計中,SPI的數據傳輸過(guò)程如下:

① 關(guān)閉中斷允許。
② MCU將VSC8228的NSS拉低(即置P2.4=0),以選中從器件VSC8228。
③ 將待發(fā)送的數據寫(xiě)入數據寄存器(SPI0DAT),即寫(xiě)發(fā)送緩沖器。如果SPI移位寄存器為空,發(fā)送緩沖器中的數據字節被傳送到移位寄存器,數據傳輸開(kāi)始。
④ 在SCK上提供串行時(shí)鐘,同時(shí)在MOSI線(xiàn)上串行移出數據。傳輸結束后,SPIF(SPI0CN.7)標志被置1。
⑤ 傳輸結束,將NSS拉高,打開(kāi)中斷允許。

以下是SPI寫(xiě)VSC8228測試程序的關(guān)鍵代碼:

2.3 上位機軟件設計

上位機主要實(shí)現以下功能:顯示當前日期和時(shí)間;根據檢測需要設置檢測參數(產(chǎn)生碼型、檢測碼型、速率、輸出去重、擺動(dòng)輸入均衡、探測門(mén)限等);運行時(shí)間及BER的計算,控制按鈕及LED顯示檢測狀態(tài)。狀態(tài)燈可以顯示的狀態(tài)有“無(wú)信號”、“同步態(tài)”、“失同步態(tài)”與“等待態(tài)”等。它是在WindowsXP環(huán)境下采用Delphi語(yǔ)言編寫(xiě)的。首先在Delphi里加載串行通信功能的SPCOMM控件,它使用非常方便。由于Delphi采用事件驅動(dòng)模式,程序員只需要對Delphi組件的屬性、事件進(jìn)行編程,然后再由這些組件對相應的事件進(jìn)行響應。這樣就使得各個(gè)事件彼此完全獨立,減少事件間的耦合性,可以大大提高程序的穩定性和可靠性,同時(shí)簡(jiǎn)化程序的編碼過(guò)程。

SPCOMM應用的核心在于主線(xiàn)程、讀線(xiàn)程和寫(xiě)線(xiàn)程之間的消息傳遞機制,而通信數據相關(guān)信息的傳遞也是以消息傳遞的方式進(jìn)行的。在使用SPCOMM進(jìn)行串口通信編程時(shí),需特別注意以下兩個(gè)問(wèn)題:首先,SPCOMM是通過(guò)ReadIntervalTimeout屬性的設置來(lái)確定所接收到的數據是否屬于同一幀數據的,其默認值是100 ms。也就是說(shuō),只要任何兩個(gè)字節到達的時(shí)間間隔小于100 ms,都被認為是屬于同一幀數據。另外,SPCOMM的默認屬性設置是支持軟件流控制的,用于流控制的字符是13H(XoffChar)和11H(XonChar),當單片機以二進(jìn)制方式發(fā)送數據時(shí),必須禁用SPCOMM對于軟件流控制的支持,即Inx_XonXoff-Flow屬性設為False,否則,在數據幀中出現的13H、11H會(huì )被SPCOMM作為控制字符而加以忽略。

由于單片機的SPI口對VSC8228進(jìn)行控制時(shí)須向每個(gè)寄存器發(fā)控制字,所以界面就要求發(fā)送1個(gè)地址加1個(gè)字節數據的形式,這樣就有16位;同時(shí)為單片機能夠方便地分清每個(gè)幀(1字節地址加1字節數據),每次發(fā)送1幀就延時(shí)100 ms。單片機每秒掃描1次VSC8228的全部寄存器,并將數據傳送給界面,因此,界面首先要一幀一幀地識別出來(lái),然后對于某些地址的數據進(jìn)行特定的操作。

誤碼率是誤碼個(gè)數與碼總個(gè)數的比值。碼總個(gè)數是檢測時(shí)間和速率的乘積。對不同的速率有不同的總數。由此,得出誤碼率。

關(guān)鍵代碼如下:

3 誤碼測試性能

本設計經(jīng)實(shí)驗測試,上位機與下位機的串口通信以及MCU與誤碼測試模塊的通信都能正確傳輸。為適應高速測試,目前SPI的傳輸速率(指SCK頻率)為2 MHz。根據本方案設計誤碼檢測儀已運用于EPON光收發(fā)模塊的連續碼測試。與臺灣宜捷威科技的FMTS-3000以及安立的MP1630的測試比較結果看,本誤碼測試儀其誤碼數量級與上述兩種設備基本一致,但是不能支持突發(fā)誤碼的測試。對突發(fā)誤碼測試的支持是項目組下一步研究的目標。

結 語(yǔ)

VSC8228芯片支持速率多樣,它內置PBRS及其他碼型的產(chǎn)生及探測模塊。筆者利用該特點(diǎn)設計出一種基于C8051F005單片機的廉價(jià)高速誤碼儀,探討了利用Delphi里的SPCOMM控件來(lái)實(shí)現PC機與C8051F005之間串行通信的方法,以及C8051F005與VSC8228的SPI通信過(guò)程。設計的誤碼儀支持的測試碼型有27、223、231的偽隨機碼,40或64位用戶(hù)定義碼型以及光纖信號CRPAT、CJT-PAT、CSPAT碼型等,一次可測誤碼高達43億個(gè),可測碼速高達4.25 Gbps在EPON光收發(fā)模塊中實(shí)現了誤碼測試,效果較好,而且功耗低,有較高的實(shí)用價(jià)值。


linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)


評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>