基于ARM的便携式1553B总线测试系统的设计与实现
接口
设备驱动程序在Linux内核中扮演着特殊的角色。它们是独立的模块,使某个特定的硬件响应一个定义良好的内部编程接口,用户的操作通过一组标准化的调用执行,而这些调用独立于特定的驱动程序。将这些调用映射到作用于实际硬件的设备特有操作上,则是设备驱动程序的任务。系统软件架构如图3所示。
Linux驱动程序支持3种类型的设备:字符设备、块设备和网络设备。字符设备是个能够像字节流一样被访问的设备。字符设备驱动程序通常要实现 open、close、read、write系统调用。本系统的1553B设备属于字符设备,它的驱动程序主要包括以下几个模块:初始化模块、打开关闭模块、读写模块、中断处理模块。
驱动程序与应用程序的通信主要通过系统函数调用,Linux为所有设备文件提供统一的操作函数接口,我们的驱动程序中只需实现struct file_operations中相应的函数即可,主要包括ioctl、read、write、open、release、fasync函数。具体C语言代码如下所示:
当用户加载驱动模块时,一系列初始化工作在static int_init xc1553_init(void)函数中完成,包括设备注册,物理地址到虚拟地址的映射,EMC模式的配置,中断处理函数的注册。
当用户卸载驱动模块时,需要在static void_exitxc1553_exit(void)函数中进行驱动模块和设备的卸载,以及中断号的释放。
2.2 中断处理模块的实现
当1553B产生中断时,由xc1553_init函数中注册的中断处理函数进行处理,并且通知上层应用程序进行读写操作。驱动程序与应用程序的通信通过异步通知的方式实现。为了实现异步通知,在驱动程序中需要实现int fasync_helper(int fd,struct file*filp,int mode,stru ct fasync_struct**fa)和voidkill_fasync(struct fasync_struct**fa,int sig,int band)函数。
fasync_helper函数在xc1553_fasync中实现,作用是为当前进程创建一个fasync_struct结构体,然后挂入目标设备的fasync队列,最后在设备驱动的中断处理程序中,使用kill_fasync函数向该队列发送信号,通知上层应用程序。
xc1553_fasync函数实现如下:
3 结束语
1553B总线广泛应用于航空领域,基于1553B总线的测控设备普遍体积大,携带不方便,本文所阐述的测试系统完全能够实现传统测控设备的功能,并且极大的缩小了设备的体积,方便携带。经过测试,该系统实时性高、工作稳定,能够满足军工要求。
- 基于ARM+FPGA的大屏幕显示器控制系统设计(06-30)
- 基于ARM和μC/OS-II的车载定位终端的设计(06-24)
- 解读物联网时代下的ARM mbed 操作系统(05-03)
- 用ARM和FPGA搭建神经网络处理器通信方案(07-19)
- ARM新一代Cortex-A73架构解析 千元机也能有高端SoC(05-06)
- 阿里巴巴将大量采用ARM处理器 Intel怎么办?(11-14)