新闻中心

EEPW首页>测试测量>设计应用> 高速误码测试系统中的C8051F005运用

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

作者: 时间:2009-03-17 来源:网络 收藏

  2.2 下位机软件设计

   下位机采用中断方式实现与上位机的通信,单片机用SPI与VSC8228模块的通信。每当串行口接收或发送完一组串行数据时,就产生一个中断请求。串行中断请求在单片机芯片内部自动由硬件置位发生,具有实时性高的特点。图3是单片机的控制程序流程。

   对单片机进行程序初始化,包括看门狗、时钟、I/O口、SPI寄存器、UART口等。单片机具有看门狗,但是看门狗到一定时间,将重启单片机,为防止这种现象的产生,初始化里禁止了看门狗。SPI的初始化主要是对启动SPI的相关控制寄存器进行配置。UART的初始化主要是对串口的控制字进行设置。I/O口的初始化通过设置交叉开关来启动SPI与UART口,并将有关输出设置为推挽输出。

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

时钟初始化模块,由于是选择外部晶振作为时钟源,根据的要求,在通过外部振荡器控制寄存器OSCXCN选择了外部晶振后,需等待至少1ms后再查询等待OSCXCN寄存器中的D7位,即XTLVLD位变为1,表明外部晶振正在运行并已工作稳定,然后才能通过内部振荡器控制寄存器OSCICN的D3位,即CLKSL置1来选择外部晶振。

高速误码测试系统中的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的频率可从系统时钟分频得到,因此该频率可由下式给出:

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

  其中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的码型产生模块以及检测模块开始工作。此时,单片机每秒扫描一次所有寄存器的值,并将其值通过串口传给界面,界面对串口传送过来的数据进行处理。
高速误码测试系统中的C8051F005运用

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



评论


相关推荐

技术专区

关闭