您当前的位置:五五电子网电子知识电工技术电工技术基于mClinux的嵌入式USB接口设计 正文
基于mClinux的嵌入式USB接口设计

基于mClinux的嵌入式USB接口设计

点击数:7889 次   录入时间:03-04 11:55:02   整理:http://www.55dianzi.com   电工技术
中,USB驱动程序和操作系统内核的框图如图3所示,其中USB类驱动程序可以分别驱动两种类型的控制器UHCI和OHCI。当PCI枚举器发现USB主机控制器后,就会装入相关的驱动程序。在此基础上开发驱动程序,实际上就是USB功能驱动程序,即是控制一个给定的功能设备。本项目中的信息家电组网,是用USB总线组建的家居网络,连接到USB设备的每一种类型的功能单元都必须要有功能驱动程序。

  ISP1581为微控制器接口提供了灵活的配置,在设计中采用了直接存储器存取(DMA)方式。由于USB设备通过快速DMA方式来读写数据,因此在此作为字符设备进行处理。

  在mClinux系统内核中有USB子系统,它的作用是提供支持USB设备驱动程序的API和USB的主机驱动程序。它提供了许多数据结构、宏定义和功能函数来对硬件或设备进行支持。在mClinux下编写USB设备的驱动程序,从严格意义上讲,就是使用这些USB核心的子系统定义的数据结构、宏和函数来编写数据的处理功能。

  一般来说,在mClinux环境中编写USB分为如下几个部分。

  向系统注册和注销驱动子程序

  在mClinux系统里,通过调用register_chrdev向系统注册字符型设备驱动程序。还需定义一个__init usbdriver_init(void)的注册函数,如下:

  int __init usbdriver_init(void)

  {        int     rc;

  rc = register_chrdev(usbdevice _Major, "usbdevice", &usbdriver_fops);

  if (rc < 0) {

  printk(KERN_WARNING "usbdevice: can't get Major %d ",usbdevice_Major);

  return rc;    }

  return 0;  }

  中断服务子程序

  中断服务子程序完成对数据的处理,主要包括读、写等操作,这些操作都是通过数据结构file_operations中的open、write、close、read等命令进行的。系统通过调用request_irq函数来申请中断,通过free_irq来释放中断。为防止其他中断的干扰,用save_flags(flags) cli()来关闭中断,相关处理完毕,用restore_flags(flags) sti()来恢复。其中,填充驱动程序子函数集struct file_operation结构如下:

上一页  [1] [2] [3]  下一页


本文关键字:嵌入式  接口  电工技术电工技术 - 电工技术