基于S3C2440多路A_D转换Linux驱动程序设计_第1页
基于S3C2440多路A_D转换Linux驱动程序设计_第2页
基于S3C2440多路A_D转换Linux驱动程序设计_第3页
基于S3C2440多路A_D转换Linux驱动程序设计_第4页
基于S3C2440多路A_D转换Linux驱动程序设计_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、技 术 创 新 微计算机信息 2011年第 27卷第 9期 /年 :现场总线技术应用 200例 嵌 入 式 与 SOC基于 S3C2440多路 A/D转换 Linux 驱动程序设计The Linux Driver Programming Based on S3C2440multi-channel A/DConverter(上海理工大学医疗器械与食品学院 黄建明刘宝林 徐秀林HUANG Jian-Ming LIU Bao-Lin XU Xiu-Lin摘要 :嵌 入 式 操 作 系 统 ARM-Linux 的 应 用 已 经 越 来 越 广 泛 , 但 是 Linux 系 统 本 身 并 没 有

2、对 种 类 繁 多 的 硬 件 设 备 都 提 供 现 成的 驱 动 程 序 , 特 别 是 由 于 工 程 应 用 中 的 灵 活 性 就 需 开 发 一 套 适 合 于 自 己 产 品 的 设 备 驱 动 , 这 使 得 嵌 入 式 Linux 设 备 驱 动 程 序 的 开 发 在 整 个 嵌 入 式 系 统 开 发 周 期 中 占 据 很 大 的 比 例 。 本 文 针 对 三 星 的 S3C2440嵌 入 式 ARM 微 处 理 器 , 介 绍 了 在 Linux 操 作 系 统 下 , 对 S3C2440微 处 理 器 内 部 A/D转 换 器 实 现 多 路 的 驱 动 方 法

3、; 通 过 编 写 该 A/D转 换 驱 动 程 序 , 总 结 出 一 种 在 嵌 入 式 Linux 操 作 系 统 下 快 速 方 便 的 开 发 驱 动 程 序 的 方 法 。关键词 :嵌入式系统 ; Linux 系统 ; 设备驱动 ; 多路 A/D转换 中图分类号 :TP311.1文献标识码 AAbstract:Embedded operating system such as the applications of ARM -Linux have become more and more popular, but the Linux system itself did not ha

4、ve a wide variety of hardware devices to provide ready-made drivers, especially because of the flexibility of engineering applications on the need to develop a product suited to their own device drivers, which makes embedded Linux device driver development in the embedded system development cycle ha

5、ve a very large proportion. In this paper, the interface method of internal multi-channel A/Dconverter was presented based on the Samsung S3C2440embedded ARM microprocessor. In the prepara -tion of A/Dconverter driver programming, the hardware-driven approach in Linux operating system was introduced

6、, and a rapid and convenient development driver approach in embedded Linux operating system was also summed up in this paper. Key words:Embedded system; Linux system; Device driver; The A/Dconversion文章编号 :1008-0570(201109-0110-02引言由于 Linux 系统是开源系统 , 其内核和各种开发工具都可 以从网络上轻易获取 , 使其在嵌入式系统的开发中得到了越来 越广泛的应用

7、。 但 Linux 系统本身并没有对种类繁多的硬件设 备都提供现成的驱动程序 , 特别是由于工程应用中的灵活性 , 其 驱动程序更是难以统一 , 这时就需开发一套适合于自己产品的 设备驱动 , 使得 Linux 设备驱动程序的开发在整个嵌入式系统 开发工作中占有很重要的地位 。 而基于 ARM 架构的中高档的 嵌入式系统应用已经非常广泛 , 本文针对现在非常流行的一款 三星公司生产的 ARM9嵌入式微处理器 S3C2440, 在 Linux 操 作系统下实现了多路 AD 转换的驱动 , 通过该驱动程序实例 , 介 绍在 Linux 系统下驱动程序编写的一般方法 , 包括驱动程序和 测试程序的编

8、写 。1硬件设备硬件系统核心部分采样的是韩国三星公司设计的基于 ARM9的嵌入式微处理器 S3C2440。 S3C2440配合 SDRAM 、 FLASH 、 USB 、 网口和串口等就构成了基本的 ARM 嵌入式硬件 平台 。 S3C2440芯片内部集成有 8路 A/D转换模拟信号输入通 道 A/D转换控制器 , 在 2.5MHz 转换时钟下最大速率可以达到 500KSPS 转换精度为 10位 ,A/D转换的供电电压 3.3V, 模拟输 入信号的电压范围 0V3.3V。 通过查阅 S3C2440芯片资料 3/D转换驱动程序中主要用的寄存器有两个 ADCCON 和 ADC -DAT0。 其基本

9、的描述如下表 :ADCDAT0为 A/D转换数据寄存器 ,16位寄存器 , 其中 9:0位为转换结果 , 在此驱动程序中 , 只要在转换结束后 , 读取 ADC -DAT0的低 10位就可以得到转换结果 。2驱动程序的组成及设计驱动程序是操作系统内核与硬件设备的直接接口 , 驱动程 序屏蔽了硬件的细节 , 使得应用程序可以像操作普通文件一样 对硬件设备进行操作 。 Linux 将设备分为字符设备 , 块设备和网 络设备三种 。 A/D转换是属于字符设备 。 设备驱动程序主要完 成如下功能 4:(l对设备初始化和释放 ;(2把数据从内核传送到 硬件和从硬件读取数据 ;(3读取应用程序传送给设备文

10、件的数 据并回送应用程序请求的数据 ;(4检测和处理设备出现的错误 。图 1驱动程序流程图黄建明 :在读研究生- 邮局订阅号 :/年 技 术 创 新嵌 入 式 与 SOCPLC 技术应用 200例 本驱动程序的工作流程如图 1所示 , 主要由以下 3大模块 组成 。在驱动程序设计中通常通过使用 _init和 _exit声明来 定义用户自己的初始化函数和清除函数 , 然后使用 module_init(mydev_int和 module_exit(mydev_cleanup来完成设备驱动程序 的注册和卸载 (其 mydev_init和 mydev_cleanup函数即为用 _init和 _exit

11、声明的初始化函数和清除函数 。 在本驱动程序 中初始化函数 adc_init(主要完成一些初始化的工作 , 包括对硬 件设备的初始化 、 中断的注册 、 设备的注册等 , 初始化部分仅在 驱动程序初始化的时候被调用一次 , 而缷载函数则完成相反的 功能 。2.2服务于 I/O请求的函数在系统内部 ,I/O设备的存取是通过一组固定的入口点完 成与外部的通信 , 这些入口点通过一个 file_operations数据结构 在注册设备文件时与外部调用函数关联起来 , 它是字符设备驱 动程序的核心 , 结构中的每个成员名字都对应着一个系统调用 。 该结构实际就是声明了针对各种设备不同操作的函数指针 ,

12、 Linux 下驱动程序的大部分工作 , 实际上就是完成上述各种操作 方法的函数 。 但是实际的驱动程序中并不需要为每一个操作都 编写相应的实现代码 , 对于不需要的操作 , 可在初始化 file_oper-ations 结构时在相应的位置赋予空指针 NULL 即可 5。 本驱动 通过调用 open 入口点 , 为将要进行的 I/O操作做好准备工作 , 包 括初始化中断事件变量 、 设置 AD 转换通道等 , 在此通过一个 for 循环来设置 4个 AD 转换通道 , 以实现打开 4个 AD 通道的 要求 ; 通过 read 入口点设置 ADCCON 控制寄存器启动 AD 转 换 , 并设置中

13、断事件变量使程序进入等待转换结束 , 在中断事件 激活后 , 通过 copy_to_user内核函数将转换结果传送到用户空 间变量指针来完成整个 A/D转换 。AD 转换大部分过程都是在 adc_read(函数 (它为应用程序 系统调用 read 函数时调用的函数 里实现的 , 它是 AD 转换的主 体函数 , 在此函数中通过判断通道号实现了多通道 AD 转换 , 部 分实现代码如下 :static ssize_tadc_read(structfile *filp,char *buffer,size_tcount, loff_t*pposSTART_ADC_AIN(adcdev.channel

14、,adcdev.prescale;/启动 AD 转换wait_event_interruptible(adcdev.wait,ev_adc;/通过中断的 方式等待结果if(converter_channel=3/通道的选择converter_channel=0;else converter_channel+;adcdev.channel=converter_channel;value =adc_data;int r =copy_to_user(buffer,str, len;/将内核空间中的数据 拷贝到用户空间 , 以供应用程序使用 在 Linux 系统中 , 中断是由系统来管理与维护的 。

15、中断服务 子程序在初始化函数中调用 irq_request函数与相应中断号关 联 , 并将该中断的相关信息添加到系统的中断信息列表中 , 以便在中断发生时供系统检索 。目标机上完成某一 AD 转换后 , 将产 生一中断号为 IRQ_ADC_DONE的中断 , 系统将自动检索并调 用相应的中断服务子程序 。 此处的中断服务子程序完成 ADC 寄存器中读取转换结果 (通过 adc_data=ADCDAT0&0x3ff; 实 现 、 激活中断事件变量 , 从而 read 函数结束等待状态 , 返回 AD 转换结果 。3驱动程序的编译与安装驱动程序一旦加载进内核就会作为内核的一部分 , 所以驱

16、 动会直接影响内核运行的稳定性 , 另外 , 应用程序要想能够使用 驱动程序来访问具体的硬件设备还应使用 mknod 命令来动态 增加设备结点 , 命令行如下 (A/D驱动程序的主设备号是 120:#mknod/dev/adcc 1202; 在嵌入式终端运行这样的命令后 , 会 在 /dev目录下生成一个设备结点文件 adc.c 表示字符设备 ,120是 A/D驱动程序的主设备号 , 是在驱动程序中指定的 。 驱动程 序就是通过主设备号和文件系统中的设备结点联系起来的 , 这 样应用程序就可以通过该设备结点来调用驱动程序以达到读 、 写和控制硬件的目的 。4测试程序的编写驱动程序的测试程序一般

17、都可以编写得很简单 , 只要能够 测试驱动程序预定的功能就可以了 ,A/D转换的测试程序只需 要一个在设备打开后 , 用一个 read 系统调用即可读出 A/D转换 的数据 , 编写循环程序不断地读取 A/D转换的数据 , 这样改变输 入信号的大小 , 就可以达到测试驱动程序的目的 。 测试程序主要 代码如下 :int fd =open("/dev/adc",0;if (fd<0 perror("openADC device:"exit(1;for(;int len =read(fd,&buffer,sizeof(int;if (len&g

18、t;0 printf("Thedata read fromAD is:%dn",buffer; else perror("readADC device no successful:"exit(1;(下转第 104页 111-技 术 创 新 微计算机信息 2011年第 27卷第 9期/年 :现场总线技术应用 200例 嵌 入 式 与 SOC波纹 。 反电动势的平顶部持续时长为电机转动 120度的时间 。 在电机启动阶段 , 扭矩出现一高峰 , 这是由于 BLDCM 启动时反 电动势不能及时响应导致了转矩的峰值的产生 。 当反电动势建 立后 , 扭矩迅速下降

19、到稳态值 。图 5仿真曲线图Fig. 5Simulation curve5结论本文在分析了无刷直流电机数学模型的基础上 , 提出了一 种基于 TMS320F2812芯片的永磁无刷直流电机的系统控制方 案并对所设计的系统进行了仿真 。 该设计方案充分利用 DSP 的 强大运算功能和丰富的内部资源 , 并采用了双闭环调速系统 , PID 增量控制算法和 PWM 控制技术等 。 仿真结果则表明 :该我 们的理论分析与系统的控制波形相吻合 , 整个系统运行平稳 , 具有较好的静 、动态特性 。 本文作者创新点 :本文采用了 DSP 芯片作为控制核心对无 刷直流电机进行控制 , 在电机调速上提出了双闭环

20、的控制方案 , 并取得了很好的控制效果 。本文无抄袭 , 作者全权负责版权事宜 。 参考文献1童克文 , 张兴 , 张星等 . 基于新型趋近律的永磁同步电动机滑模 变结构控制 J中国电气工程学报 2008,28(21:102-1062DARIOP, Gu GLIELMELLI E, ALLOTTA B. Robotics for medical applicationsJ.IEEE Roboticsand Automation Magazine, 1996, 3(3:44-56P3韩安太 , 刘峙飞 , 黄海 .DSP 控制器原理及其在运动控制系统中 的应用 M.北京 :清华大学出版社 ,20

21、03.4梅晓榕等 . 自动控制元件及线路 . 北京科学出版社 ,20055王晓明 , 王玲 . 电动机的 DSP 控制 TI 公司 DSP 应用 M.北京 :北京航空航天大学出版社 ,2004.7.6符晗 , 覃嘉恒等 . 基于 DSP 的自诊断步进电机控制系统 J.微计 算机息 .2008,9-1:p182-1837韩安太 .DSP 控制器原理及其在运动控制系统中的应用 . 清华 大学出版社 .2003.作者 简 介 :刘兆卿 (1984-.男 (汉 河北省 河北工业大学控制科 学与工程学院 , 硕士研究生 , 研究方向计算机智能控制 ; 王喜太 (1956-.男 (汉 国家康复辅具研究中心

22、 , 主任 , 研究员 , 研究方向为 控制科学与康复工程 ; 王淼 (1983-.河北工业大学 , 硕士研究生 , 研究方向计算机智能控制 。Biography:LIU Zhao-qing(1984r-,Male(Han,Hebei,Deparmentof Control Science and Control Engineering,Hebei University of Technology, Master,Research area:Theintelligence control of computer.(300130天津 河北工业大学 刘兆卿 王喜太 王 淼 (100176北京 国家

23、康复辅具研究中心 王喜太(HebeiUniversity of Technology, Tianjin, 300130, China LIU Zhao-qing WANG Xi-tai WANG Miao(NationalResearch Center for Rehabilitation Technical Aids, Beijing, 100176, China WANG Xi-tai通讯地址 :(300130天津市红桥区光荣道 8号河北工业大学 刘兆卿(上接第 111页 delay(close(fd;测试程序经过交叉编译后 , 即可以在目标系统上运行来测 试驱动程序 , 经过测试 , 改

24、变输入电压值 , 可以看到应用程序读出 的电压值也在改变 , 表示驱动程序能够正常驱动 A/D转换硬件 工作 。 测试界面如图 2所示 (其中 1023为通道 0所得的值 :图 25结束语本文通过中断方法来读取数据转换数据 , 实现了多路 A/D转换 。 本文作者创新点 :针对三星的 S3C2440嵌入式 ARM 微处 理器 , 介绍了在 Linux 操作系统下 , 对 S3C2440微处理器内部 A/D 转换器实现多路的驱动方法 ; 通过编写该 A/D转换驱动程序 , 总结出一种在嵌入式 Linux 操作系统下快速方便的开发驱动程 序的方法 , 对类似的驱动的开发具有很大的借鉴意义 。作者对本文版权全权负责 , 无抄袭 。 参考文

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论