采用ARM+Linux 的仪器控制系统设计
0 引 言
嵌入式系统的开发都有其特殊的应用场合与特定功能,而嵌入式Linux操作系统因其开源和广泛的处理器支持、易于移植而备受行业青睐。AT91RM9200是Atmel公司针对系统控制、通信领域推出的基于ARM920T内核的32位RISC微处理器,它具有小体积,低功耗,低成本及高性能等特点,其内部集成了SPI、串口、PIO、以太网、EBI、USB、MCI等多种接口。
在Linux系统中,应用层不可以直接操作硬件,需设计驱动程序向下屏蔽硬件特性,实现硬件与用户间的通信。系统平台为在虚拟机中安装Fedora 8,目标系统采用Linux 2电感生产厂家.6.21.7内核,定制文件系统建立NFS根文件系统,使用双网卡方式搭建成交叉开发环境,并使用超级终端或minicom作为控制台。
l 设备驱动程序设计
该控制系统框架如插件电感器图1所示。ARM通过USARTl接收外来的控制命令,通过SPI接口和通用PIO口与外部设备通信,达到控制作用。在Linux下,所有的设备以文件的形式来使用。其中Linux已经提供了支持AT91RM9200的SPI驱动,DBGU和UART驱动,只要对其源代码进行一些修改并在编译内核时将其选中就可以直接使用。所以主要集中在PIO口驱动设计中,外部设备使用一个.PB29引脚(即IRQO)作为外部中断信号提供给ARM,另外使用一些I/O引脚对外部设备进行控制。
Linux设备分为3类:字符设备、块设备和网络设备,该系统设计的是模块化字符设备驱动程序。Linux 2.6内核与Linux 2.4内核主要有3点不同:
(1)内核的API变化,增加了不少新功能;
(2)提供了sysfs用于描述设备树;
(3)驱动模块从.o变为.ko。
1.1 驱动程序重要数据结构
打开的设备在内核内部由file结构标识,内核使用file_operaTIons结构访问驱动程序的函数。file_opera_tions结构是一个定义在<Linux/fs.h>中的函数指针数组。下面主要介绍常用的几个成员:
在这些函数指针中,open和release用于设备的打开和关闭,是每个驱动程序必须实现的函数。其他函数根据实际需要来实现,在该项目中实现方式如下:
另一个重要数据结构是file结构体,主要包括以下成员:
它代表一个打开的文件,只出现在内核空间,与用户空间的file是不同的。在open操作时创建,然后传递给file_operations的其他函数指针,直到close。
第三个重要数据结构即inode,其成员包括:dev_ti_rdev和struet cdev*i_cdev,其中i_rdev中包含实际设备号,可以通过下面两个宏函数获取主从设备号:
初始化file_operations结构体后,要将其中定义的各个方法如open,release,write,read,ioctl等一一实现。其函数名即初始化这个file_operations结构体时各成员函数指针。当在用户空间调用open时,内核空间的open方法即相应操作,其他方法同理。
1.2 驱动初始化和卸载清理工作
驱动加载需要进行设备注册等一系列初始化工作;并且在卸载驱动时要释放资源进行一些清理工作以使其不影响内核。所以定义两个函数static int devctl_插件电感init()和static void devctl_exit(),然后通过module_init(devctl_init)和module_exit(devctl_exit)来通知内核。为了维护一体电感Linux的开源性,调用下面的宏来声明:
请教电路的可行性请教如图电路,DC/DC会有电流输出吗?会有电流输出啊,这就等于是两级DCDC,只要注意它们的输入电压范围就可以了这样的话锂电池还是一直在耗电的,这两个芯片效率越低耗电越多。 但这个电路我看着变扭,又感觉不会工作,是否只有两个芯片效率100%的时候锂电池才不会有输出?锂电池充电芯片也是DC/DC?dycheng 发表于 2014-12-31 13:32 这样的
[开关电源]通信电源为什么用的是 -48V 而不是+在“****”淘到一颗电源如图片这个是参数-48V的。 所以引出一个问题,为什么要用-48V的呢?满意回复+20jjjyufan 查看完整内容A:这里面包含2 个意思: 1. (1) 极性为何是负电源(也就是正接地)? 2. (2) 电压为何为-48V(-36~ -72V)? 先说一下第2 个问题 ...A:这里面包含2 个意思: 1. (1) 极性为何是负
我想用uc3906做个12v2.2ah铅酸蓄电池的充电电路各位大虾: 好! 我想用uc3906做个12v2.2ah铅酸蓄电池的充电电路,希望做过的仁兄给点意见~~~,我没有做过类似的充电器(电源管理器),希望实际用过本芯片的仁兄给点意见~~~~~ 比如用本芯片的稳定性及其他容易出现的问题还有就是此芯片的生存期等等~~~也有用lm317做的先横流再横压的简单充电电路,不过这种电路