基于Linux平台的天气雷达高速数据采集系统及数字信号处理设计与实现

基于Linux平台的天气雷达高速数据采集系统及数字信号处理设计与实现,第1张

  Linux是开放源代码、网络化的 *** 作系统,具有稳定、高效、内核可自由配置等特点。采用Linux *** 作系统作为开发平台与采用VxWorks 和Windows 作为开发平台相比不仅有免费的优势,而且对于发展核心技术,提高信息安全有着极其重要的意义,是自主研发的一个方向。随着我国天气雷达的快速发展,天气雷达在民用和军事领域的应用越来越广泛。目前,天气雷达高速数据采集、传输等功能大都基于Windows平台进行开发实现,实现由Windows平台向Linux平台的转换,对于发展中国自主知识产权气象软件核心技术, 提高信息安全有着极其重要的意义。本文基于Linux *** 作系统(2.6.23内核),实现了天气雷达高速数据采集及处理,对天气雷达系统由Windows平台向Linux平台移植具有参考价值。

  1 数据采集系统分析

  1.1 工作原理

  天气雷达高速数据采集系统由I/Q数据采集、FIFO缓冲、FPGA控制模块及PCI总线芯片PLX9054组成,系统结构框图如图1所示。

  

基于Linux平台的天气雷达高速数据采集系统及数字信号处理设计与实现, 基于Linux平台的天气雷达高速数据采集系统设计,第2张

  其核心部分为FPGA控制模块,主要实现4个功能:(1)根据雷达量程和距离分辨率调整AD采样时钟的频率;(2)控制AD两路采样数据写入FIFO 缓冲以及DMA 传输时从FIFO中连续读出数据; (3)与PCI总线控制芯片PLX9054 进行控制交互, 实现局部总线的读写控制、地址译码和中断触发;(4)与PLX9054 进行数据交互,使用FPGA内部RAM保存控制天气雷达发射机和接收机工作的命令及数据,完成对雷达工作的控制。

  I/Q数据采集输出数据速度为2.4 Mb/s(I、Q数据各为24 bit),通过FPGA控制,合并写入到FIFO缓冲。FIFO缓冲为32 bit、深度为16 KB的数据缓存,有效位为24 bit;与计算机总线的接口采用32 bit的PCI总线接口芯片PLX9054,PC机通过它完成与数据采集系统的数据交互。

  1.2 PC机与采集系统数据访问

  1.2.1 局部地址分配

  PC机与天气雷达高速数据采集系统的数据访问通过PCI总线芯片PLX9054实现,访问目标为FIFO缓冲和FPGA片内RAM。对FIFO缓冲和FPGA片内RAM分配不同局部地址,通过对局部地址总线进行译码确定需要访问的目标。FIFO 数据采用DMA传输方式连续读出, 每次传输长度最大为8 KB,因此,设置FIFO空间32 bit局部地址范围为0x20000000~0x2000FFFF,映射空间为PCI 地址空间bar2。

  FPGA片内RAM位宽为32 bit, 采用局部地址范围为0x40000000~0x400FFFFF。映射空间为PCI地址空间bar3。

  1.2.2 数据访问方式

  FIFO缓冲为可编程FIFO,由FPGA根据片内存储的雷达参数进行控制。当FIFO中数据达到设置的大小时,触发PCIPLX9054引发PCI中断,通过该中断向驱动程序申请发起DMA 传输。驱动程序响应该中断后设置PCIPLX9054的DMA寄存器, 发起方向从局部总线到PCI总线的DMA传输,完成FIFO数据向PC机的传输。

  FPGA片内RAM通过PCI地址映射,使用IO *** 作方式进行数据读写访问。

  2 Linux程序实现

  天气雷达高速数据采集系统基于Linux2.6内核平台程序,由基于PCI总线的设备驱动程序、数据采集及处理程序组成。

  2.1 设备驱动程序实现

  设备驱动程序的功能是在Linux2.6系统平台下,通过对PCI总线控制芯片PLX9054的控制,实现PC机与采集板的数据交互,实现雷达采集数据的实时接收及雷达工作状态的控制。从功能结构上,设备驱动主要由设备装载及初始化、提供给用户层的接口函数、中断及DMA数据传输三部分组成。

  2.1.1 设备装载及卸载

  设备装载和卸载即是Windows系统中设备驱动安装和卸载。在Linux2.6中,装载和卸载主要通过调用系统提供的PCI总线驱动注册函数pci_register_drive和注销函数pci_unregister_driver来实现,其注册的driver数据结构如下:

  staTIc struct pci_driver plx9054_pci_driver = {

  .name = ‘pci9054’,

  .id_table = plx9054_pci_tbl,

  .probe = plx9054_probe,

  .remove = plx9054_remove,

  };

  当系统引导时,高速数据采集系统板上电后,板上PCI总线固件对PLX9054设备进行缺省配置,为设备的每个地址区域分配好资源。装载函数在驱动中用module_init声明,进行设备的初始化工作,调用PCI总线驱动注册函数,根据id_table定义的信息对PCI设备PLX9054进行探测识别,完成PLX9054设备驱动的PCI总线注册,然后调用驱动注册的probe函数,完成PLX9054设备使能、PCI地址空间映射、PLX9054设备数据结构初始化、设备注册(注册为字符设备)等 *** 作。卸载函数用module_exit声明,是装载的逆过程,通过调用PCI总线驱动卸载函数,继而调用注册的remove函数、注销设备及PCI地址空间映射、释放分配给设备的数据结构空间等 *** 作,完成系统资源释放。

  2.1.2 设备接口函数

  设备接口函数为用户提供与设备进行交互的不同功能接口,主要完成用户与设备的读、写及设备控制访问等功能,其数据结构设计为:

  staTIc const struct file_operaTIons plx9054_fops = {

  .owner = THIS_MODULE,

  .open = plx9054_open, /*打开设备*/

  .release = plx9054_close, /*释放设备*/

  .ioctl = plx9054_ioctl, /*IO *** 作*/

  .read = plx9054_read, /*读设备*/

  };

  这个数据结构在设备装载过程中,作为设备注册的参数完成与设备挂接、使用户在系统调用中能访问到上述关联的设备接口函数。

  

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/dianzi/2599756.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-08-09
下一篇 2022-08-09

发表评论

登录后才能评论

评论列表(0条)

保存