基于DSP和FPGA的磁浮列车同步485通信方式
来源: | 作者:pro75e66c | 发布时间: 2014-06-03 | 6270 次浏览 | 分享到:


  为了减少硬连线,这里只连接地址线的高五位,对其中的低四位地址线进行4~16译码,最高位地址线作为该译码器的使能信号。取对应于一个外部存储器片选信号的四个地址,比如片选信号XZCS2为低,即可选用0xe0000,0xe4000,0xe8000,0xec000四个地址作为DSP向 FPGA写数据的地址。

  由于每个不同的地址都对应一个地址译码值,当四个译码值都出现后才可认为一次定位信息传送完成。这时把连续接收到的七个字节加上帧头及帧尾,作为测速定位单元发送给车载无线电控制单元的一帧数据。

  车载无线电控制单元侧DSP与FPGA的数据交换
  为了避免占用过多的CPU资源,车载无线电控制单元中DSP从FPGA读数据时不采用查询方式,而采用外部中断来接收数据。将DSP的16bits 数据线与FPGA连接,DSP的XINT1也连接到FPGA的I/O管脚。若选用XZCS0AND1作为外部存储器片选信号,则DSP从FPGA读数据的寻址空间范围为0x002000—0x004000,这个地址范围内所读出的数据即为数据线上传送到DSP的定位数据。相对应的硬件连接框图见图5。

  由于FPGA传送到DSP的一帧数据为72bits,因此通过16bits数据线传输需要5次才能传送完,每16bits数据到达时产生一次外 部中断。设波特率时钟为512k,假设来自定位单元完整的一帧数据为0x02123456789abcde03,车载无线电单元通过16bits数据线分次转发到DSP的数据则为0x0002、0x1234、0x5678、0x9abc及0xde03。数据及中断信号产生的时序如图6所示。由图6可以看出,每对应移出一次dataout,都会相应地发出一个外部中断信号xint1,DSP一旦接收到外部中断,便在中断服务子程序中从16bits数据线读取信号值。为了完整的接收一帧信号,可在外部中断服务程序中定义一个16级FIFO,当从FIFO的最底层读出的数据为0x02时,便可以判断一帧数据的开始(若在用户数据和校验值中存在0x02,则要进行相应的字符转义),依次接收以下的数据便得到完整的一帧定位信息。

  通信双方的原理图
  根据以上对同步485实现方法的描述,在ISE中利用ECS工具所描绘的顶层原理图如图7和图8所示。包括测速定位单元同步数据发送和车载无线电控制单元同步数据接收两部分。

  图7中,addr_decode为地址译码模块,用于从DSP完整地接收一帧定位信息;tra485data为串行数据及门控信号发送模块。其中,din(15:0)直接来自DSP的16bits数据线;addr(3:0)与DSP的A17~A14地址线相连;clkin及anfin信号由车载无线电控制单元提供。输出的dataout及uefout经过输出缓冲及差分电平转换后送给车载无线电控制单元。