首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

基于ARM的便携式1553B总线测试系统的设计与实现 (2)

基于ARM的便携式1553B总线测试系统的设计与实现 (2)

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总线的测控设备普遍体积大,携带不方便,本文所阐述的测试系统完全能够实现传统测控设备的功能,并且极大的缩小了设备的体积,方便携带。经过测试,该系统实时性高、工作稳定,能够满足军工要求。
继承事业,薪火相传
返回列表