• 易迪拓培训,专注于微波、射频、天线设计工程师的培养
首页 > 测试测量 > 技术文章 > C8051F005在高速误码测试系统中的运用

C8051F005在高速误码测试系统中的运用

录入:edatop.com    点击:
具体的参考程序如下:

edatop.com



C8051F005使用4个特殊功能寄存器来实现对SPI的控制和访问。这4个寄存器分别是控制寄存器(SPI0CN)、数据寄存器(SPI0DAT)、配置寄存器(SPIOCFG)和时钟频率寄存器(SPI0CKR)。当以C8051F005为主器件时,应将主允许标志(MSTEN,SPI0CN.1)置1,同时将SPI使能SPIEN(SPI0CN.0)置1。通过CKPHA(SPI0CFG.7)和CKPOL(SPI0CFG.6)可选择SPI相位与极性,从而实现SPI通信的四种模式,但因为VSC8228只支持一种方式,所以将它们同时置为0,则空闲时SCK为低,此时的系统将在上升沿发送数据,下降沿接收数据(时序图见图2)。由于在MCU中,SCK的频率可从系统时钟分频得到,因此该频率可由下式给出:

edatop.com



其中fsysclk是系统时钟频率,SPI0CKR是SPI0CKR寄存器中的8位值。

为了防止上次测试对本次的影响,在程序的初始化之后,对VSC8228写入重肩命令,这样每次运行程序都将VSC8228的寄存器恢复为默认值。界面发送的数据为16位,其中8位地址,8位数据,而且每个数据是一个字符。为让单片机识别控制命令已发完,最后一个16位数据设为FFFF。另外,每16位数据之间加入了100 ms的延时,这样Spcomm控件就会把每16位数据当成1帧,单片机也能够正确地接收所有数据。

单片机用中断的方法来接收界面传过来的数据。每接到一个数据,即一个字符,就执行中断子程序,将接收到的数据的最低位存人数组。串口中断子程序流程如图4所示。当接收到16个,就接收完1帧,转入执行主程序去对收到的16位进行处理。处理过程就是将收到的16个数据(存放在数组中),通过移位跟“或”运算,综合成16位的数据。然后,通过移位运算,取高8位作为地址,低8位作为数据。对于接收的16位数据,如果不是FFFF,则将提取出来的8位数据,发送给提取出来的8位地址对应的寄存器,如果接收的16位数据为FFFF,表示所有的控制命令已经发完,这时VSC8228的全部寄存器设置完毕,VSC8228的码型产生模块以及检测模块开始工作。此时,单片机每秒扫描一次所有寄存器的值,并将其值通过串口传给界面,界面对串口传送过来的数据进行处理。

edatop.com



本设计中,SPI的数据传输过程如下:

① 关闭中断允许。
② MCU将VSC8228的NSS拉低(即置P2.4=0),以选中从器件VSC8228。
③ 将待发送的数据写入数据寄存器(SPI0DAT),即写发送缓冲器。如果SPI移位寄存器为空,发送缓冲器中的数据字节被传送到移位寄存器,数据传输开始。
④ 在SCK上提供串行时钟,同时在MOSI线上串行移出数据。传输结束后,SPIF(SPI0CN.7)标志被置1。
⑤ 传输结束,将NSS拉高,打开中断允许。

以下是SPI写VSC8228测试程序的关键代码:

edatop.com



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的全部寄存器,并将数据传送给界面,因此,界面首先要一帧一帧地识别出来,然后对于某些地址的数据进行特定的操作。

误码率是误码个数与码总个数的比值。码总个数是检测时间和速率的乘积。对不同的速率有不同的总数。由此,得出误码率。

关键代码如下:

edatop.com



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光收发模块中实现了误码测试,效果较好,而且功耗低,有较高的实用价值。

edatop.com



基于C8051F005单片机

点击浏览:矢量网络分析仪、频谱仪、示波器,使用操作培训教程

上一篇:意法半导体(ST)推出先进的硬盘自由落体检测解决方案
下一篇:基于DSP/FPGA高精度测量系统中多电源可靠性设计

微波射频测量操作培训课程详情>>
射频和天线工程师培训课程详情>>

  网站地图