您现在的位置:首页 > 案例分析案例分析

采用ARM+Linux 的仪器控制系统设计

发布时间:2017-06-23 06:27:09  来源:大电流电感厂家   查看:
程序

  在初始化函数中,首先进行设备的注册。主设备号表示对应的驱动程序,次设备号由内核使用,扁平型电感用于正确确定设备文件所指的设备。可以动态申请或者静态申请设备号。动态申请使用下面的函数:

程序

 电感器厂 dev是一个只输出的参数,它在函数成功完成时持有分配范围的第一个数;firstminor是请求的第一个要用的次编号;count是请求的连续设备编号的总数;name为设备名,返回值小于0表示分配失败。然后通过major=MMOR(dev)获取主设备号。如果注册不成功或者卸载驱动时需要取消设备的注册,使用下面的函数实现(其参数含义同上):

程序

  对于字符型设备还要定义一个cdev结构体变量,并使用cdev_init()初始化,然后调用cdev_add()通知内核添加一个字符设备。同样在卸载时要使用cdev_del()移除,否则用户使用驱动时,有时不能打开设备。因为不使用cdev或者cdev在模块卸载时不删除会导致内核处在一个不稳定状态,在用户层可能无法打开设备文件。  1.3 I/O端口访问

  在系统控制要求中,需要访问ARM的I/O端口,包括普通I/O口和复用为IRQO的PB29引脚,然而Linux中对I/O端12和I/0内存的读写指令中使用的都是虚拟地址,所以在访问前要先将物理寄存器地址映射到I/O内存。有两种方法实现地址映射,一种是使用ioremap为I/O内存区域分配虚拟地址,用iounmap取消,另一种是使用内核已经定义好的虚拟地址。这里主要介绍第二种方式。

  对于AT91RM9200利用如下转换函数获取虚拟地址,其中宏AT91_VA_BASE_SYS是系统虚拟基地址:

程序

  读写端口对于AT91RM9200还可使用专门函数

  int at9 1_set_gpio_value(unsigned pin,int value),并包含头文件asm-arm/arch-at91/gpio.h。一般端口的访问在驱动模块初始化时申请资源,在卸载时释放资源,而对于I/O口的使能则在open方法中实现,相应的禁用在release方法中实现。

  1.4 ioctl方法的实现

  用户可以通过ioctl方法向功率电感器内核发送各种命令,必要时传递参数,下面展示一个简单实例。

程序

  1.5 中断控制实现

  当外部信号的到来时刻不可预测时,使用轮询方式将使得效率极低,需要使用阻塞型中断实现。即没有中断信号到来时阻塞读进程,使其处于睡眠状态,当中断到来唤醒读进程,电感器厂家执行预定处理操作。

  首先,在open方法中使用request_irq()安装中断处理程序,在release方法中释放。函数原型如下:

程序

  其中:参数irq为中断号;handler为ISR指针;flags为与中断管理有关的各选项字节掩码;dev_name即设备名;dev_id为中断信号线。

  其次,ISR为申请中断时使用的参数名,假设为irq0_handler,定义原型如下:

程序

  中断阻塞即在其内部调用void wake_up_inter-rupTIble(wait_queue_head_t*queue)实现,然后返回IRQ_HANDLED;在read方法中调用wait_event_in-terruptible(queue,condition)来唤醒读进程,这样,当用户程序读设备时,如果没有中断到来,读进程将进入睡眠状态,中断发生被唤醒。

  对于中断信号IRQO,因是PB29复用,要配置为外设A[4],同时还要配置中断源类型,函数分别在#in平面变压器厂家 | 平面电感厂家

请教电路的可行性请教如图电路,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做的先横流再横压的简单充电电路,不过这种电路

CopyRight2014
大电流电感 | 大功率电感 | 扁平线圈电感 注塑加工厂