基于Linux系统的HHARM9电机驱动程序设计
嵌入式linux直流电机驱动程序的设计.

辽宁工业大学单片机及接口技术课程设计(论文)题目:直流电机驱动程序的设计院(系):电子与信息工程学院专业班级:计算机101学号: 100401018学生姓名:郑杭指导教师:瞿涛教师职称:讲师起止时间:13-12-28至14-01-10课程设计(论文)任务及评语院(系):电子与信息工程学院教研室:计算机科学与技术学号100401018 学生姓名郑杭专业班级计算机101课程设计(论文)题目直流电机驱动程序的设计课程设计(论文)任务直流电机是指能将直流电能转换成机械能(直流电动机)或将机械能转换成直流电能的旋转电机。
主要设计内容:硬件电路设计:1. 直流电机原理及控制技术2. 总体设计方框图3. 设计原理分析软件设计:1.系统软件功能说明2.程序设计要求:1、根据题目和所用的接口电路芯片设计出完整的接口电路,并用计算机绘制出电路原理图以及程序流程图。
2、认真独立完成所规定的设计内容(4000字左右),严禁相互抄袭;3、撰写、打印设计说明书一份。
指导教师评语及成绩总成绩:指导教师签字:年月日目录第1章嵌入式linux (1)第2章设备驱动程序简介 (3)2.1设备驱动程序的概念 (3)2.2设备驱动程序的基本结构 (3)第3章搭建交叉编译环境 (5)3.1 安装Redhat 9.0Linux操作系统 (5)3.2安装交叉编译器 (5)3.3配置NFS网络文件系统 (5)3.4 链接挂载 (5)第4章直流电机驱动程序的编写 (6)4.1驱动程序的编写 (6)4.2 直流电机用户应用程序 (9)4.3驱动程序的编译文件Makefile (10)4.4用户程序的Makefile文件 (11)第5章运行程序 (12)5.1建立设备进入点 (12)5.2加载驱动程序 (12)5.3运行用户应用程序 (12)第6章课程设计总结 (13)参考文献 (14)第1章嵌入式linuxLinux操作系统核心最早是由芬兰的Linus Torvalds于1991年9月在芬兰赫辛基大学上学时发布的(Linux 0。
基于ARM的直流电机驱动程序设计

《嵌入式系统原理及应用》课程设计报告课程设计题目:基于ARM的直流电机驱动程序设计专业班级:通信工程2班姓名:李晨曦学号 : 631206040221指导教师:闫果完成日期 : 2015年7月1日一、系统设计要求(1)设计一个基于ARM系统的直流电机系统,要求实现电机的正转和反转功能,并且电机速度可调整。
(2)要求实现死区功能,即避免两个开关同时处于开启状态。
二、设计思路本设计中通过ARM引脚GPIO功能的输出控制方式,将数字信号输出到DAC 0832上,转换为模拟信号,作为直流电机的电压供给。
电机速度可调整是通过ARM引脚的GPIO功能来实现,将引脚设为输入控制方式连接两个按键,用程序检测两个按键输入的值,可检测到是要加速还是减速,然后通过对ARM输出量的调整,更改DA转换器的数字量,从而更改直流电机两端的电压值,实现加速减速。
死区功能的实现是通过程序,设定当检测到加速键被按下后,就不再检测减速键是否被按下,而是直接执行加速的调整方式,来避免检测到两个开关同时处于开启状态。
三、详细设计(一)芯片选型本设计中,硬件上ARM芯片选用LPC2106款。
再选用D/A转换集成芯片DAC 0832连接到ARM芯片上,芯片说明如下:(1)LPC 2106 芯片说明ARM7TDMI-S处理器,特性如下:128k字节片内Flash程序存储器,具有ISP和IAP功能。
Flash编程时间:1ms可编程512字节,扇区擦除或整片擦除只需400ms。
64/32/16K字节静态RAM(LPC2106/2105/2104),向量中断控制器,仿真跟踪模块,支持实时跟踪,RealMonitor模块支持实时调试。
标准ARM测试/调试接口,兼容现有工具,极小封装:TQFP48 (7×7mm2),双UART,其中一个带有完全的调制解调器接口,I2C串行接口,SPI串行接口,两个定时器,分别具有4路捕获/比较通道,多达6路输出的PWM单元,实时时钟,看门狗定时器,通用I/O 口,CPU操作频率可达60MHz,双电源CPU操作电压范围:1.65V~1.95V(1.8V±8.3%) -I/O电压范围:3.0V~3.6V(3.3V±10%)两个低功耗模式:空闲和掉电。
基于ARM9和Linux嵌入式系统设计

第6章 基于ARM9和Linux嵌入式系统设计
6.改变工作目录
语法:cd [name]
其中 name 是目录名、路径或目录缩写。 cd 除了有切换目录 的功能外,还有一个功能就是,不管在哪个目录内,只要 输入cd命令,不加任何参数,即可回到用户目录内。 $ cd tony ← 切换到当前目录下的tony子目录
6.8 Linux系统在ARM平台上的移植
6.9 综合训练——Linux系统及应用程序的烧
第6章 基于ARM9和Linux嵌入式系统设计
6.1 嵌入式Linux的开发环境 6.1.1 嵌入式Linux开发环境建立
嵌入式LINUX 开发环境有几个方案: 1、基于PC 机WINDOWS 操作系统下的CYGWIN; 2、在WINDOWS 下安装虚拟机后,再在虚拟机中安 装LINXUX 操作系统;
$ cd ..
$ cd / $ cd $ cd /usr/bin
← 切换到上一层目录
← 切换到系统根目录 ← 切换到用户主目录(或运行cd ~命令也可以) ← 切换到/usr/bin目录
第6章 基于ARM9和Linux嵌入式系统设计
7. 建立新目录
mkdir的命令格式如下:
mkdir [-m模式] [-p目录名] 目录
第6章 基于ARM9和Linux嵌入式系统设计
(3)whereis命令 whereis命令来查询某个命令存在哪一个目录下。命令 格式:whereis [选项] 命令名。 说明:不加选项可直接使用whereis命令。 whereis命令的常用选项如下: 章节 说 明 -b 只查找二进制文件 -m 查找主要文件 -s 查找来源 -u 查找不常用的记录文件 例如:查找cd命令二进制文件在什么目录下。命令: $ whereis -b cd
基于ARM9的直流电机控制系统的设计

基于ARM9的直流电机控制系统的设计沈阳航空航天大学2010年6月摘要随着我国经济的高速发展,微电子技术、计算机技术和自动控制技术也得到了迅速发展,直流电机调速技术已经进入一个崭新的时代,其应用越来越广。
而作为控制核心的各种单片机芯片也在不断的更新发展,其功能越来越强大。
随着人们对其要求的提高,直流电机控制系统的调速方法也相应的产生了PWM(脉宽调制技术),其控制芯片也由原来常用的51单片机系列升华为ARM系列的控制实验板。
本设计基于ARM9开发板的直流电机控制系统的调速,以显示ARM开发板的独特功能,利用脉宽调制技术,调节占空比以达到调节转速的目的,将测得的数据传给上位机后进行观测。
设计大体上分为硬件设计和软件设计两部分,硬件部分包括驱动模块,控制模块,数据检测模块以及通信模块,软件部分包括程序设计,两大部分实现了对电机转速的监测和控制,更好的确保了设计的准确性。
通过合理的选择和设计提高了直流电机控制系统调速的技术,学习和研究新型控制芯片,使设计达到了较为理想的控制效果是本设计的宗旨。
关键词:ARM9开发板;PWM技术;PID调节功能AbstractAlong with the rapid development of Chinese economy, microelectronics technology, computer technology and automatic control technology is rapidly developing, dc motor control technology has entered a new era, the more and more wide application. As the core of MCU control chip are constantly updated development, its function and more powerful.As for the people, the control system of dc motor control method and the corresponding produce the pulse width modulation (PWM) and its control chip technology is used by the original sublimated 51-series microcomputer series of control board ARM series. The design is based on ARM9 development board of the control system of dc motor speed, in order to show the ARM development board, using the unique function of PWM technology, SHCH adjustment in order to achieve the goal, will adjust speed measurement data to PC and software it. General design of hardware design and software design is divided into two parts, hardware part includes driver module, control module, data communication module, and the software module includes programming module, two most of the monitoring and control motor speed, better ensure the accuracy of the design.Through the reasonable selection and design of dc motor control system to improve the speed of technology, learning and research, new control chip design to the ideal control effect is the design purpose.Keywords: ARM9 Board; PWM;PID Adjustment Function目录1绪论 01.1毕业设计立题意义 01.2研究内容及目标 (2)1.3 毕业设计内容分析 (2)2总体方案设计 (3)2.1直流电机控制系统的总体设计思想 (3)2.2硬件部分设计 (4)2.3软件部分设计 (4)3硬件设计方案 (5)3.1 ARM9开发板简介 (5)3.2 驱动模块设计 (6)3.2.1 S3C2440芯片简介 (6)3.2.2 SPGT62C19B电机控制模组简介 (7)3.3数据检测模块设计 (9)3.3.1 PWM技术简介 (9)3.3.2直流电机电枢PWM调压调速原理 (9)3.3.3直流电机调速系统的整体结构 (10)3.3.4 ARM的脉宽调制PWM描述 (10)3.4控制模块设计 (11)3.5 通信模块设计 (13)3.5.1 RS232的串口通信接线 (13)3.5.2 串口通信 (14)4软件方案设计 (16)4.1 系统软件设计步骤 (16)4.2 编程环境设置 (18)4.3 程序设计 (19)4.3.1系统初始化 (19)4.3.2中断子程序设计 (20)4.3.3 PWM调速程序设计 (21)4.3.4 串口通信程序设计 (22)5直流电机控制系统综合调试与分析 (24)5.1 硬件电路调试 (24)5.2 利用H-JTAG调试程序 (25)5.3系统联调结果与分析 (26)结论 (28)社会经济效益分析 (29)参考文献 (30)致谢 (31)附录ⅠS3C2440A芯片原理图 (32)附录Ⅱ程序清单 (33)1绪论随着我国经济的高速发展,微电子技术、计算机技术和自动控制技术也得到了迅速发展,直流电机调速技术已经进入一个崭新的时代。
基于ARM9和Linux的FPGA驱动设计

基于ARM9和Linux的FPGA驱动设计操作系统的全称是GNU/Linux,它是由GNU工程和Linux内核两个部分共同组成的一个操作系统。
该系统中全部组件的源代码都是自由的,可以有效庇护学习成绩,因而在领域得到了广泛的应用。
是英文Field Programmable Gate Array的缩写,即现场可编程门阵列,该器件是作为专用ASIC (Application Specific Integrated Circuit)领域中的一种半定制而浮现的,它的浮现既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。
在通信行业、传输网、医疗仪器、各种仪器、安防监控、电力系统、以及消费类电子中都大面积用法。
随着产品研发周期的逐步缩短,定制型产品的开发使FPGA在后面的应用面越来越广。
例如在2G和3G通信,以及以后的4G通信和wimax 等等通信类设备中,它与、MPU一起将大量浮现在其中。
微处理器是一款由Samsung为手持设备设计的低功耗、高度集成的微处理器,采纳272脚FBGA封装,内含一个920T内核和一些片内外围设备。
在时钟方面,该芯片集成了一个具有日历功能的RTC和具有PLL (MPLL 和UPLL)的芯片时钟发生器。
MPLL产生的主时钟能够使处理器工作频率最高达到203MHz。
这个工作频率能够使处理器轻松运行于Windows CE,Linux等操作系统并举行较为复杂的信息处理。
为此,本文以S3C2410上用法公司的EP2S30F67214为例,系统地介绍了在Linux系统环境下的FPGA的驱动办法。
1 基本原理Linux下的设备驱动程序通常是一个存在于应用程序和实际设备间的软件层。
许多设备驱动都是与用户程序一起发行的,可以协助配置和存取目标设备。
在Linux下驱动FPGA,其本质上就是字符设备的驱动,惯例上它们位于/dev名目。
1.1 主次编号在内核中,dev_t类型(在中定义)用来持有设备编号。
基于Linux的ARM9嵌入式系统设计基础理论

基于Linux的ARM9嵌入式系统设计基础理论作者:刘阳龙潜孙永政来源:《艺术科技》2016年第09期当前,嵌入式的技术应用越来越广发,从航天科技到民用产品,嵌入式产品的身影无处不在,而这些嵌入式产品的核心——处理器决定了产品的市场和性能。
在32位嵌入式处理器市场中,ARM处理器占有很大份额。
ARM不仅是一个公司、一种技术也是一种经营理念,即由ARM公司提供核心技术,只出售芯片中的IP授权,采取了别具一格的“Chipless模式”(无芯片的芯片企业),不参与生产,而是由合作厂商去生产具体的芯片和产品。
现在由于存储空间等原因,在嵌入式芯片上编程有较大的困难,选取合适的平台就显得很重要。
由于Linux是开放源码的操作系统,吸引着全世界的程序员参与到发展和完善的工作中来,所以Linux保持了稳定而且卓越的性能。
由于源代码可以修改、移植,Linux在嵌入式领域中的应用也越来越广。
选用Linux作为平台,可以根据具体需要自由裁减源码,打造适合目标平台的环境,编写最有效率的应用程序。
可以预见,ARM与Linux在未来已经越来越壮大,在嵌入式产品市场上会占有越来越大的份额。
在这种形式下,学习和研究ARM非常有必要,所以在这里介绍一下关于基于Linux 系统的ARM9嵌入式系统设计的基础理论。
首先进行一下ARM开发环境的简介:根据功能的不同,ARM应用软件的开发工具可分为编辑软件、编译软件、汇编软件、链接软件、调试软件、嵌入式实时操作系统、函数库、评估板、JTAG仿真器、在线仿真器等。
因此,一套含有编辑软件、编译软件、汇编软件、链接软件、调试软件、嵌入式实时操作系统及函数库的集成开发环境一般来说是必不可少的。
至于嵌入式实时操作系统、评估板等其他开发工具则可以根据应用软件规模和开发计划选用。
使用集成开发环境开发基于ARM的应用软件时,其中涉及的编辑、编译、汇编、链接等工作可全部在PC机上完成,调试工作则需要配合其他的模块或产品完成。
基于ARM的LINUX网卡驱动程序的开发与设计(论文最终完成)

基于ARM的LINUX网卡驱动程序的开发与设计Development and design of linux networkcard drivers based on ARM学院:专业班级:学号:学生姓名:指导教师:(教授)2009年6月摘要Linux技术是当前计算机技术中最大的一个热点,在我国以及全世界得到了迅猛的发展,被广泛的应用于嵌入式系统、服务器、网络系统、安全等领域。
从而使得掌握在Linux环境下的开发技术,成为了计算机行业中引人注目的焦点。
以Linux为代表的自由操作系统的优点之一,是它们的内部是开放的。
Linux内核保留有大量的复杂代码,通常设备驱动提供了一个门路,使硬件特殊的一部分响应定义好的内部编程接口,它们完全隐藏了设备工作的细节。
用户的活动通过一套标准化来进行,设备驱动就是将这些调用映射到作用于实际硬件和设备相关的操作上。
论文首先介绍了Linux下设备驱动程序设计的基本知识,其中包括对Linux的发展历程、内核、特性的概述,Linux设备的分类及编写驱动程序的一些基本概念等,以及模块的加载和卸载。
其次介绍了ARM驱动程序开发的硬件环境和软件环境。
阐述了该驱动程序在开发时的需求分析。
第三对Linux环境下网卡驱动程序的设计与实现作了理论上的探讨,重点从网卡驱动模块的加载、网络设备的初始化、设备打开与关闭、数据的发送与接收、信息统计、网卡驱动模块的卸载等方面按步骤的进行了详细的讨论。
通过组建在Linux操作系统下的TCP/IP网络,来分配IP地址以及区分网络号和主机号的子网掩码,通过配置DHCP服务器,实现动态地为主机配置IP参数,解决手工配置存在的问题。
最后介绍了在驱动程序开发设计过程中所遇到的问题和困难以及是如何去克服这些困难的,并提出了今后的努力方向。
关键词:Linux;模块;网络;驱动;寄存器AbstractLinux technology is a hotspot among computer technology nowadays, and it developes at high speed not only in our country but also in the whole world, and it has applied widely in embedded system, server, network system, security area and so on. So it makes that grasping the development technology under the Linux environment is more and more noticeable in computer industry. One of the many advantages of free operating systems, as typified by Linux, is that their internals are open for all to view.The Linux kernel remains large and complex body of code. User activities are performed by means of a set of standardized calls that are independent of the specific driver; mapping those calls to device-specific operations that act on real hardware is then the role of the device driver.This thesis firstly introduces the fundamental knowledge about design of linux device driver, which generally includes the development procedure, kernel, and characteristic of linux. Meanwhile, the categorization of linux device, elemental terminology of exploiting network interface card driver, and loading and unloading the driver module are also mentioned in this thesis. Secondly, this thesis also presents both the hardware and software environment of the driver development, and the requirement specification of driver development are elaborated here. Thirdly, combined with the driver of ARM, this thesis discusses the design and realization of the network interface card driver in theory, especially makes more detailed discussions step by step, such as loading the driver module, initialization of the device, starting and stopping of the device, transmission and receiving of data, information statistics, unloading the driver module, etc. Allocating IP addresses and subnet masks differentiating network and host, through construction of TCP/IP network in Linux. Configuring host's IP arguments dynamically to well solve the problem of manual configuration, through configuration of DHCP server. Finally, this thesis lists all the problems and difficulties met during the whole process of designing driver, and how to conquer them and advanced direction of future study are also recounted.Keywords: linux; module; network; driver; register目录摘要 (I)Abstract (II)第1章绪论 (1)1.1 研究背景 (1)1.2 国内外研究现状、目的及意义 (1)1.3 本文主要工作 (2)第2章Linux下设备驱动程序设计的基本知识 (4)2.1 Linux概述 (4)2.1.1 Linux内核简介 (4)2.1.2 Linux的特性 (6)2.2 Linux设备驱动程序概述 (7)2.2.1 Linux设备驱动程序分类 (8)2.2.2 编写网络驱动程序的一些基本概念 (9)第3章Linux网卡驱动程序设计的理论探讨 (10)3.1 Linux下网卡驱动程序设计的数据结构和基本方法 (10)3.1.1 网卡驱动程序设计要用到的数据结构 (10)3.1.2 网卡驱动程序的基本方法 (13)3.1.3 套接字缓冲区介绍 (14)3.2 驱动模块的加载和卸载 (17)第4章系统分析 (19)4.1 S3C2410 ARM 开发板介绍 (19)4.2 需求分析以及MII接口 (19)4.3 寄存器的访问方式 (21)第5章网卡驱动的具体实现 (22)5.1 驱动程序的设计 (22)5.2 网卡驱动实现 (24)5.2.1 模块的加载及设备初始化 (24)5.2.2 设备成员及函数的初始化 (26)5.2.3 设备注册、打开、关闭 (30)5.2.4 数据的接受和发送 (32)5.2.5 参数设置及数据统计 (34)5.2.6 网卡数据信息统计 (36)第6章结论 (37)参考文献 (38)致谢 (39)第1章绪论1.1 研究背景Linux目前是计算机技术的一大热点,最近几年在我国得到迅猛发展,被广泛应用在嵌入式系统、服务器和桌面应用等领域。
基于linuxARM9触摸屏驱动程序设计嵌入式系统课程设计

目录第1章嵌入式linux触摸屏驱动程序设计..................................... 错误!未定义书签。
课程设计的目的....................................................... 错误!未定义书签。
课程设计要求......................................................... 错误!未定义书签。
第二章课程设计平台构建与流程............................................. 错误!未定义书签。
嵌入式系统开发平台构建............................................... 错误!未定义书签。
cygwin 开发环境.................................................. 错误!未定义书签。
Linux 开发环境................................................... 错误!未定义书签。
Embest IDE 开发环境.............................................. 错误!未定义书签。
触摸屏设计流程....................................................... 错误!未定义书签。
课程设计硬件结构与工作原理........................................... 错误!未定义书签。
硬件结构概述..................................................... 错误!未定义书签。
触摸屏工作原理................................................... 错误!未定义书签。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
收稿日期:2005-09-22作者简介:朱华生(1965-),男,江西临川人,副教授.文章编号:1006-4869(2005)04-0051-03基于Linux 系统的HHARM9电机驱动程序设计朱华生,胡凯利(南昌工程学院计算机科学与技术系,江西南昌330099)摘 要:对嵌入式Linux 操作系统驱动程序的组成进行分析,讨论了驱动程序的基本框架,以HHARM9电机控制为实例,详细论述了电机驱动程序的实现过程.关键词:嵌入式;Linux;驱动程序中图分类号:TP316 文献标识码:ALinux System -Based Design of HHARM 9Electromotor DriverZHU Hua -sheng,HU Ka-i li(Department of Computer and Science,Nanchang Institute of Technology,Nanchang 330099,China)Abstract:The paper analyses the composition of driver in embedded linux system,disuses its basic frame of driver,and illustrales the process of driver design of HHARM9electromotor in detail.Key words:Embedded;Linux;driver嵌入式Linux 操作系统因具有免费、开放源代码、强大的网络功能等特点,在嵌入式产品中得到越来越广泛的应用.基于Linux 操作系统的嵌入式产品结构[1]如图1所示.本文主要探讨嵌入式系统驱动程序的设计.1 嵌入式Linux 操作系统驱动程序简介1)驱动程序和应用程序的区别驱动程序的设计和应用程序的设计有很大的区别[2].首先,驱动程序的设计要对硬件的结构、信号的工作流程十分清楚,而在应用程序的设计中,一般不需要了解这些.其次,应用程序一般有一个main 函数,从头到尾执行一个任务;驱动程序却不同,它没有main 函数,通过使用宏module _init(初始化函数名),将初始化函数加入内核全局初始化函数列表中,在内核初始化时执行驱动的初始化函数,从而完成驱动的初始化和注册,之后驱动便停止等待被应用软件调用.应用程序可以和GLIB C 库连接,因此可以包含标准的头文件,比如<stdio.h>、<stdlib.h>等;在驱动程序中,不能使用标准C 库,因此不能调用所有的C 库函数,比如输出打印函数只能使用内核的printk 函数,包含的头文件只能是内核的头文件,比如<linux/module.h>.2)Linux 系统设备文件为了方便应用程序的开发,在Linux 操作系统中,使用了设备文件这一概念来管理硬件设备.Linux 操 第24卷 第4期2005年12月南昌工程学院学报Journal of Nanchang Institute of Technology Vol.24No.4Dec.2005作系统把设备映射成为一个特殊的设备文件.每个设备都对应一个设备文件,设备文件保存在系统的/dev 目录下.应用程序要操作硬件设备,只需对相应的设备文件进行操作就可以.硬件设备文件是在安装驱动程序时,由驱动程序向内核注册后生成的.3)驱动程序的组成设备驱动程序的作用是应用程序与硬件之间的一个中间软件层.它由3部分组成:(1)自动配置和初始化子程序,负责检测所要驱动的硬件设备是否存在和能否正常工作.(2)服务于I/O 请求的子程序.这部分程序在执行时,系统认为是和进行调用的进程属于同一进程,只是由用户态变成了内核态.(3)中断服务子程序.在Linux 系统中,并不直接从中断向量表中调用设备驱动程序的中断服务子程序,而是由Linux 系统来接收硬件中断,再由系统调用中断服务子程序.2 嵌入式Linux 操作系统驱动程序的设计方法驱动程序的作用是隐藏硬件设备的具体细节,对不同的设备提供一致的接口,这些接口通过file _oper -ations 结构[3]来定义,设计驱动程序的大部分工作就是根据硬件设计来/填写0结构体中定义的函数.在设计驱动程序时,首先要分析硬件的工作原理,了解电路的工作时序,各种寄存器的地址及各位的功能等信息.然后结合硬件电路设计并实现open 、read 、write 、ioctl 、release 、init 等函数.(1)设计open 函数 open 函数的主要功能是提供给驱动程序初始化能力.在设计时,要根据硬件电路,设置好控制、状态和数据寄存器,为以后的设备操作做好准备.(2)设计read 函数 read 函数的主要功能是从设备上读数据.在设计时,要根据读操作的流程,按顺序设置寄存器,然后再根据响应结果判断是否读取寄存器或总线上的数据.(3)设计write 函数 write 函数的主要功能是往设备上写数据.在设计时,要根据写操作的流程,按顺序设置寄存器,再根据响应结果将要写的数据按顺序写入寄存器或总线.(4)设计ioctl 函数 ioctl 函数的主要功能是执行读、写之外的操作,如:配置设备、进入或退出某种操作模式,实现对设备的控制.(5)release 函数 release 函数功能与open 函数相反,它的主要功能是释放open 分配的file->private_data 中的所有内容.(6)init 函数 init 函数的主要功能是完成寄存器的地址映射和设备向内核注册.3 嵌入式Linux 操作系统驱动程序设计实例以HHARM9实验箱为例,介绍电机驱动程序的设计过程.1)硬件控制结构在设计驱动程序之前,必须对硬件的结构和工作流程十分清楚.在实验箱中,CPU 利用CPLD(95144)逻辑来控制直流电机的工作,如图2所示,其中ULN2803AP 是一个电流放大器.硬件电路的控制逻辑如下:C PLD 判断到nGCS2选中,并且地址线MA5-MA0为000110b 时,读取数据线的低四位D3-D0,并作为M4-M1的输出.寄存器GPACON 的地址是:0x56000000,寄存器GPADAT 的地址是0x56000004.2)驱动程序的设计驱动程序的设计主要分如下几步:(1)给file )operations 结构赋初值赋值语句如下:52南昌工程学院学报2005年第4期static struct file _operations elec tromotor _fops={open: electromotor _open,read: electromotor _read,write: electromotor _write,release: electromotor _release,};本结构的主要作用是:将不同的设备提供一致的接口.如在应用程序中,对不同设备进行读操作时,都使用read 函数,写操作时,都使用write 函数.(2)设计electromotor _open 函数electromotor _open 函数的功能是选中指定设备,即选中nGC S2片选.实现方法是:先将GPACON 寄存器的第13位置1,再将GPADAT 寄存器的第13位置0.函数设计如下:int electromotor _open(struct inode *inode,struct file *filp){ electromotor _sle |=0x2000; //将GPAC ON 寄存器的第13位置1electromotor _sle _data &=(0x2000);//将GPADAT 寄存器的第13位置0printk(/open ok \n 0);return 0;}(3)设计electromotor _write 函数electromotor _write 函数的功能是实现设备的写操作.它首先通过get _user 函数得到用户传送过来的数据,接着写地址M5-M0为000110,即让CPLD 进入控制逻辑.然后将应用程序中传来的值的低四位传送给M4-M1.函数设计如下:ssize _t electromotor _write(struct file*fp,char*buf,size _t size){ char key;if (get _user(key,buf)) //将用户态数据转为内核态return -EFAULT;(*(volatile unsigned char *)ELEC TROMOTOR_6)=key;return 1;}(4)设计electromotor _init 函数electromotor _init 函数主要是完成映射nGC S2地址和CPLD 逻辑控制的入口地址,以及向内核申请注册设备.函数设计如下:int -init electromotor _init(void){ printk(d **************electromotor _init**********\n d );ELEC TROMOTOR _GPACON=ioremap(0x56000000,4);ELEC TROMOTOR _GPADATA=ioremap(0x56000004,4);ELEC TROMOTOR _1=iore map(0x10000000,8);/*******向内核注册设备驱动文件**********/devfs _electromotor =devfs _register (NULL,d electromotor d ,DE VFS _FL _DEFAULT,ELEC TROMOTOR _MA -JOR,0,S _IFC HR |S _IRUSR |S _IW USR |S _IRGRP |S _I WGRP,&electromotor _fops,NULL);return 0;}(5)设计module _init 函数该函数是驱动程序的模块入口,通过调用module _init(electromotor _init)来实现.因为电机没有反馈信息,所以本驱动程序可以把electromotor _read 函数写成一个空的函数.驱动程序设计完成后,再编写Makefile 文件,通过make 命令生成目标文件,最后利用insmod 命令向内核加载驱动程序,这时在/dev 就会新增一个设备文件.说明驱动程序加载成功.(下转第62页)53第4期朱华生,等:基于Linu x 系统的HHARM9电机驱动程序设计z =Q 2K .(5)3 比较与分析在圆孔的夫琅和费衍射时,由衍射积分得出的最小距离为z =k 2Q 2=PQ 2K .(6)与波带法得出的式(5)进行比较,两者在数量级上是相同的,而具体数值上两式相差P .进一步分析不难发觉,为了得出夫琅和费衍射条件,在波带法中,圆孔对P 0点所张面积正好为一个波带,即P 0点到圆孔边缘相对P 0到圆孔中心的光程差为K 2,相应的相位差是P .在衍射积分中,采用的是式(2),此式中大括号里与振幅U 1(x 1,y 1)相乘的平方项相位因子在夫琅和费衍射时必须被忽略,在圆孔边缘处其相位为k Q 22z =PQ 2K z,当把分析衍射积分中的观察屏上P 点取在轴线上的P 0点时,此项正是P 0点到圆孔边缘((x 21+y 21)max =Q 2)相对P 0点到圆孔中心(x 1=0,y 1=0)的相位差.在文献[1]中要求这个相位差远远小于1从而忽略其影响,得出了夫琅和费衍射条件.当然可以认为这个条件是严格的,然而为了与波带法比较,可以将这个条件放宽至P ,若在式(3)中也采用波带法的标准,即在衍射积分中夫琅和费衍射条件下的最小距离要求上述相位差k Q 22z =P ,此时对应的光程差为Q 22z =K 2,得出z =Q 2K,在这种条件下两种分析方法结果一致.虽然在讨论中采用了圆孔衍射屏,显然分析得出的结果与衍射孔径的形状无关.通过以上分析可知,由衍射积分和波带法都可以得出夫琅和费衍射条件的表达式,而波带法的分析具有物理图像清楚、方法简单直观的优点,有助于学生对无透镜夫琅和费衍射条件的深入理解.参考文献:[1]J.W.顾得门.傅里叶光学导论[M].北京:科学出版社,1976.[2]赵凯华,钟锡华.光学[M ].北京:北京大学出版社,1983.[3]姚启钧.光学教程[M].高等教育出版社,1999.(上接第53页)4 结束语由于设备驱动是沟通底层硬件与上层应用程序的桥梁,它所涉及的内容相当多.要设计出一个好的驱动程序,不仅要对硬件设备及工作原理相当熟悉,同时还必须具备一定的内核结构知识.参考文献:[1]王田苗.嵌入式系统设计与实例开发[M].北京:清华大学出版社,2003.[2]ALESSANDRO RUBINI.LINUX 设备驱动程序(第二版)[M ].北京:中国电力出版社,2002.[3]姜明华,周敬利,黄晓涛.Linux 下加密卡驱动程序的开发与性能分析[J].计算机工程,2004,(8):185-187.62南昌工程学院学报2005年第4期。