




已阅读5页,还剩7页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
课程设计课程设计 题题 目 目 触摸屏设备驱动程触摸屏设备驱动程 序设计序设计 班班 级 级 姓姓 名 名 学学 号 号 指导教师 指导教师 成成 绩 绩 嵌入式系统嵌入式系统 课程设计报告课程设计报告 电子与信息工程学院电子与信息工程学院 信息与通信工程系信息与通信工程系 1 目目 录录 引言 2 1 设备驱动程序简介 2 1 1 设备驱动程序的结构 2 1 2 设备驱动程序的功能 3 2 嵌入式系统开发平台构建 3 3 触摸屏设计流程 4 3 1 触摸屏设计流程图 4 3 2 触摸屏工作原理 4 4 触摸屏功能模块程序设计与交叉编译 5 4 1 功能模块驱动程序设计 5 4 1 1 触摸屏设备驱动中数据结构 5 4 1 2 触摸屏驱动模块加载和卸载函数 7 4 1 3 触摸屏设备驱动的读函数 7 4 1 4 触摸屏设备驱动的轮询与异步通知 8 4 1 5 应用程序的调试 8 4 2 触摸屏功能模块交叉编译 8 5 根文件系统建立与文件系统下载 9 5 1 CRAMFS 根文件系统分析 9 5 2 文件系统映像文件生成 9 5 3 功能模块运行与调试 10 5 3 1 vivi 的烧写 10 5 3 2 linux 内核的烧写 10 5 3 3 cramfs 文件系统的烧写 11 心得体会 11 2 引言 嵌入式 Linux 由于其可应用于多种硬件平台 内核高效稳定 源代码开放 软件丰富 网络通信和文件管理机制完善等优良特性 已经成为嵌入式操作系统的主力军 是整个 嵌入式系统的重要组成部分 在嵌入式 Linux 系统中 由于内核的保护机制 用户一般不 能直接访问硬件 而是要通过调用驱动程序来实现对硬件的控制 进行嵌入式系统的开 发 很大的工作量是为各种设备编写驱动程序 设备驱动程序是 Linux 内核的重要组成部 分 不同版本的内核 其主要区别也是体现在设备驱动程序的不同 1 设备驱动程序简介 1 1 设备驱动程序的结构 1 Linux 的设备驱动程序与外界的接口可以分成三部分 a 驱动程序与操作系统内核的接口 b 驱动程序与系统引导的接口 c 驱动程序与设备的接口 2 驱动程序的注册与注销 向系统增加一个驱动程序意味着要赋予它一个主设备号 这可以通过在驱动程序的 初始化过程中调用定义在 fs devices c 中的 register chrdev 函数或 fs block dev c 中的 register blkdev 函数来完成 而在关闭字符设备或者块设备时 则要通过 unregister chrdev 或 unregister blkdev 函数从内核中注销设备 同时释放占用的主设备 号 3 设备的打开与释放 a 打开设备是通过调用定义在 include linux fs h 中的 file operations 结构中的函数 open 来完成 b 释放设备是通过调用 file operations 结构中的函数 release 来完成 3 4 设备的读写操作 a 字符设备的读写操作相对比较简单 直接使用函数 read 和 write 就可以了 b 块设备的话 则需要调用函数 block read 和 block write 来进行数据读写 5 设备的控制操作 通过设备驱动程序中的函数 ioctl 来完成 6 设备的轮询和中断处理 a 设备执行某个命令时 如 将读取磁头移动到软盘的第 42 扇区上 设备驱动可以 从轮询方式和中断方式中选择一种以判断设备是否已经完成此命令 b 不支持中断的硬件设备 读写时需要轮流查询设备状态 1 2 设备驱动程序的功能 1 对设备的初始化和释放 2 把数据从内核传送到硬件和从硬件读取数据到内核 3 读取应用程序传送给设备文件的数据和回送应用程序请求的数据 这需要在用户 空间 内核空间 总线以及外设之间传输数据 4 检测和处理设备出现的错误 2 嵌入式系统开发平台构建 开发嵌入式 Linux 系统 其实最方便的还是构建一个标准的 Linux 开发环境 大大地 方便 Linux 开发中的编译调试等工作 同样地 EduKit2410 的 Linux 开发也可以在标准 Linux 环境下进行 比如选择 Red Hat 等优秀的系统 4 3 触摸屏设计流程 3 1 触摸屏设计流程图 是 打开触摸屏设备 创建等待队列和缓冲 区 初始化队列头 等待中 断 使用中断子程序 更新 X Y 显示一个触摸点或坐标值 开始 结束 图 3 1 1 3 2 触摸屏工作原理 1 普通转换模式 普通转换模式 AUTO PST 0 XY PST 0 是用作一般目的下的 ADC 转换 这个模 式可以通过设置 ADCCON 和 ADCTSC 来进行对 AD 转换的初始化 而后读取 ADCDAT0 ADC 数据寄存器 0 的 XPDATA 域 普通 ADC 转换 的值来完成转换 2 分离的 X Y 轴坐标转换模式 5 X 轴坐标转换 AUTO PST 0 且 XY PST 1 将 X 轴坐标转换数值写入 ADCDAT0 寄存器的 XPDATA 域 转换后 触摸屏接口将产生中断源 INT ADC 到中断控制器 Y 轴坐标转换 AUTO PST 0 且 XY PST 2 将 Y 轴坐标转换数值写入到 ADCDAT1 寄存器的 YPDATA 域 转换后 触摸屏接口将产生中断源 INT ADC 到中断控制器 3 自动 连续 X Y 轴坐标转换模式 自动 连续 X Y 轴坐标转换模式 AUTO PST 1 且 XY PST 0 以下面的步骤工 作 触摸屏控制器将自动地切换 X 轴坐标和 Y 轴坐标并读取两个坐标轴方向上的坐标 触摸屏控制器自动将测量得到的 X 轴数据写入到 ADCDAT0 寄存器的 XPDATA 域 然后 将测量到的 Y 轴数据到 ADCDAT1 的 YPDATA 域 连续 自动转换之后 触摸屏控制 器产生中断源 INT ADC 到中断控制器 4 等待中断模式 当触摸屏控制器处于等待中断模式下时 它实际上是在等待触摸笔的点击 在触摸 笔点击到触摸屏上时 控制器产生中断信号 INC TC 中断产生后 就可以通过设置 适当的转换模式 分离的 X Y 轴坐标转换模式或自动 X Y 轴坐标转换模式 来读取 X 和 Y 的位置 5 静态 Standby 模式 当 ADCCON 寄存器的 STDBM 位被设为 1 时 Standby 模式被激活 在该模式下 A D 转换操作停止 ADCDAT0 寄存器的 XPDATA 域和 ADCDAT1 寄存器的 YPDATA 正常 ADC 域保持着先前转换所得的值 4 触摸屏功能模块程序设计与交叉编译 4 1 功能模块驱动程序设计 4 1 1 触摸屏设备驱动中数据结构 1 触摸屏的 file operations static struct file operations s3c2410 fops owner THIS MODULE open s3c2410 ts open 6 read s3c2410 ts read release s3c2410 ts release ifdef USE ASYNC fasync s3c2410 ts fasync 异步通知 endif poll s3c2410 ts poll 轮询 2 触摸屏设备结构体的成员与按键设备结构体的成员类似 也包含一个缓冲区 同 时包括自旋锁 等待队列和 fasync struct 指针 typedef struct unsigned int penStatus PEN UP PEN DOWN PEN SAMPLE TS RET buf MAX TS BUF protect against overrun 环形缓冲区 unsigned int head tail head and tail for queued events 环形缓冲区的头尾 wait queue head t wq 等待队列数据结构 spinlock t lock 自旋锁 ifdef USE ASYNC struct fasync struct aq endif ifdef CONFIG PM struct pm dev pm dev endif TS DEV 3 触摸屏结构体中包含的 TS RET 值的类型定义 包 X Y 坐标和状态 PEN DOWN PEN UP 等信息 这个信息会在用户读取触摸信息时复制到用户空间 typedef struct unsigned short pressure 压力 这里可定义为笔按下 笔抬起 笔拖曳 unsigned short x 横坐标的采样值 unsigned short y 纵坐标的采样值 unsigned short pad 填充位 7 TS RET 4 在触摸屏设备驱动中 将实现 open release read fasync 和 poll 函数 因 此 其文件操作结构体定义 触摸屏驱动文件操作结构体 static struct file operations s3c2410 fops 4 1 2 触摸屏驱动模块加载和卸载函数 1 在触摸屏设备驱动的模块加载函数中 要完成申请设备号 添加 cdev 申请中 断 设置触摸屏控制引脚 YPON YMON XPON XMON 等多项工作 2 可知触摸屏驱动中会产生两类中断 一类是触点中断 INT TC 一类是 X Y 位置转换中断 INT ADC 在前一类中断发生后 若之前处于 PEN UP 状态 则应该 启动 X Y 位置转换 另外 将抬起中断也放在 INT TC 处理程序中 它会调用 tsEvent 完 成等待队列和信号的释放触摸屏设备驱动的触点 抬起中断处理程序 static void s3c2410 isr tc int irq void dev id struct pt regs reg 当 X Y 位置转换中断发生后 应读取 X Y 的坐标值 填入缓冲区触摸屏设备驱动 X Y 位置转换中断处理程序 static void s3c2410 isr adc int irq void dev id struct pt regs reg 触摸屏设备驱动中获得 X Y 坐标 s3c2410 get XY void 3 tsEvent 最终为 tsEvent raw 这个函数很关键 当处于 PEN DOWN 状态时调用 该函数 它会完成缓冲区的填充 等待队列的唤醒以及异步通知信号的释放 否则 处 于 PEN UP 状态 将缓冲区头清 0 也唤醒等待队列并释放信号 4 在包含了对拖动轨迹支持的情况下 定时器会被启用 周期为 10ms 在每次定时 器处理函数被引发时 调用 start ts adc 开始 X Y 位置转换过程触摸屏设备驱动的定时器 处理函数 static void ts timer handler unsigned long data 5 在触摸屏设备驱动的打开函数中 应初始化缓冲区 penStatus 和定期器 等待队 列及 tsEvent 时间处理函数指针 触摸屏设备驱动的打开函数 static int s3c2410 ts open struct inode inode struct file filp 4 1 3 触摸屏设备驱动的读函数 触摸屏设备驱动的读函数实现缓冲区中信息向用户空间的复制 当缓冲区有内容时 直接复制 否则 如果用户阻塞访问触摸屏 则进程在等待队列上睡眠 否则 立即返 8 回 EAGAIN 4 1 4 触摸屏设备驱动的轮询与异步通知 在触摸屏设备驱动中 通过 s3c2410 ts poll 函数实现了轮询接口 这个函数的实现 非常简单 它将等待队列添加到 poll table 当缓冲区有数据时 返回资源可读取标志 否则返回 0 触摸屏设备驱动的 poll 函数 static unsigned int s3c2410 ts poll struct file filp struct poll table struct wait 而为了实现触摸屏设备驱动对应用程序的异步通知 设备 驱动中要实现 s3c2410 ts fasync 函数 触摸屏设备驱动的 fasync 函数 static int s3c2410 ts fasync int fd struct file filp int mode 4 1 5 应用程序的调试 使用 s3c2410 ts c 触摸屏驱动编写应用程序 读取触摸屏的触点坐标值及动作信息 并在串口中断打印出来对触摸屏设别的操作有打开设备 关闭设备 读操作等 编写应 用程序读取触摸屏的触点坐标值及动作信息时 只需利用触摸屏驱动程序便可实现 先 打开触摸屏设备 然后调用读函数即可 其中 触摸笔动作取值如下 define PEN UP 0 触摸笔抬笔 即触摸屏不被压下 define PEN DOWN 1 触摸笔下笔 即触摸屏被压下 define PEN FLEETING 2 触摸笔拖动 结构体定义如下 typedef struct unsigned short pressure 触摸笔动作 unsigned short x 触点 x 座标值 unsigned short y 触点 y 座标值 unsigned short pad TS RET 4 2 触摸屏功能模块交叉编译 将编写好的源文件程序放在 cygwin 目录中 交叉编译生成文件 9 5 根文件系统建立与文件系统下载 5 1 Cramfs 根文件系统分析 一个完整的根文件系统通常包含以下几个目录 bin 应用程序存放目录 sbin 系统管理员服务程序 其中最重要的就是供内核初始化之后执行的 sbin init 进 程 lib 存放程序运行所需要的动态库 proc 系统状态文件目录 dev 驱动程序存放目录 etc 系统配置文件及用户数据存放目录 mnt 用于设备安装的目录 通常包含 etc 子目录和为块设备安装保留目录 usr 用于存放用户程序和配置文件的目录 可以根据需要进行设置 一般情况下都要把已经规划好的目录结构转换成一个映象文件 即使用命令工具 mkcram 把相应的 cramfs 目录树压缩为单一的映象文件 其命令格式为 mkcramfs h e edition i file n name dirname outfile 5 2 文件系统映像文件生成 1 构建 cramfs 文件系统 将 image 中的 root cramfs tar bz2 拷贝到 SOURCEDIR 目录 运行 cygwin 执行以下 命令解压安装 root root 文件夹中就是我们想要的 cramfs 文件系统 在 root 目录中 新建 xx 文件夹 用于存放应用程序 2 编译应用程序将编写好的源文件 ts c 程序放在 cygwin 目录中 3 拷贝测试程序到文件系统中 并编译生成文件系统映象 新文件系统的制作 把刚才编译输出的 ts 文件拷贝到文件系统所在的工作目录 root bin 目录下 执行以下命令生成新的文件系统映象 10 5 3 功能模块运行与调试 5 3 1 vivi 的烧写 1 首先把 SW104 短接 从 Nand Flash 启动 运行 Embest online Flash Programmer for ARM version 3 0 以上 点击菜单 Settings 选择 Configure 项 配置当前使用的 Embest JTAG 仿真器型号为 PowerICEARM9 并设置相应的参数 2 点击菜单 File 选择 Open 打开烧写配置文件 S3C2410 NandFLash vivi cfg Flash Programmer 的 Program 页中选择要烧写的文件 在 vivi bon load bin 3 点击按钮 Progarm 开始烧写 直到烧写成功 4 连接串口线到 PC 机 COM1 运行光盘中提供的 Windows 超级终端 Hyper Terminal ht 5 把开发板重新加电 程序运行后 在超级终端上可以看到串口输出类似以下信息 图 5 3 1 1 6 看到以上信息后 表示正在等待用户从超级终端下载文件 这时 请点击超级终 端菜单 传送 选择 Xmodem 方式下载 vivi nand 文件 点击 OK 后等待下载烧写结束即可 5 3 2 linux 内核的烧写 1 首先 SW104 设为短接 从 Nand Flash 启动 并确定已经烧写 vivi nand 加电 2 在 vivi 启动等待中 敲入空格键进入 vivi 界面环境 并输入以下命令 vivi load flash kernel x 烧写更新内核约 4 分钟即可烧写完毕 3 点击超级终端菜单中的 传送 选 发送文件 zImage 烧写结束 重起实验板 11 观测超级终端窗口提示信息就可以启动 linux 内核 5 3 3 cramfs 文件系统的烧写 1 首先 SW104 设为短接 确定已经成功烧写
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 企业员工日常生活礼仪培训课件
- 完形填空-夹叙夹议文(复习讲义)-2026年高考英语一轮复习原卷版
- 听听洞里是什么动物互动游戏
- 大客户销售与管理010大客户市场营销
- 实验操作叙述型的分析与判断(含解析)-2026届高中化学一轮复习讲义
- CN120204406A 抑制或检测外泌体miR3150a5p表达试剂的应用以及鼻咽癌转移治疗药物和预后制剂
- 人工智能通识教程(微课版) 课件 05人工智能技术的突破-大语言模型技术
- 数据的分析-2023学年八年级数学上学期期末复习汇编(北师大版)原卷版
- 老君炉药业产品培训知识课件
- 老人膳食营养学知识培训课件
- 妇科手术技巧 宫腔镜检查及手术步骤详解
- 《宫腔镜手术技术》课件
- 农村互助养老的组织化路径探索
- GB 5009.18-2025食品安全国家标准食品中氟的测定
- 开学第一课-小学高年级-主题班会课件-收心
- 酒店冷库进出管理制度
- 中职对口升学考试语文字音专项练习模拟试题库
- 江南大学实验动物中心大楼项目报告表
- 《孙子兵法》全文及译文
- 《经济法基础》 (第2章) 第二章 会计法律制度
- 防呆培训课件
评论
0/150
提交评论