网站大量收购闲置独家精品文档,联系QQ:2885784924

(嵌入式系统原理及应用)第7章嵌入式Linux系统开发环境.ppt

(嵌入式系统原理及应用)第7章嵌入式Linux系统开发环境.ppt

  1. 1、本文档共226页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
7.1 Linux的历史和现状 7.2 协同开发模式 7.3 基于Edukit-Ⅲ开发板的开发环境介绍 7.4 嵌入式系统移植 7.5 触摸屏驱动程序设计 本 章 小 结   4.等待中断模式(Wait for Interrupt Mode)   当触摸屏控制器等待中断模式时,它等待触摸屏触点信号的到来。当触点信号到来时,控制器产生INT_TC中断信号。然后,X位置和Y位置能被适当地转换模式(独立X/Y位置转换模式或自动X/Y位置转换模式)读取到。   5.待机模式(Stand by Mode)   当ADCCON寄存器的STDBM位置1时,待机模式被激活。在这种模式下,A/D转换动作被禁止,ADCDAT0的XPDATA位和ADXDATA1的YPDAT保留以前被转换的数据。 7.5.3 触摸屏驱动流程设计   触摸屏驱动程序需要完成的五个主要任务如下:   (1) 配置触摸屏控制器硬件。   (2) 判断屏幕是否被触摸。   (3) 获得稳定的、去抖振的位置测量数据。   (4) 校准触摸屏。   (5) 将触摸状态和位置变化信息发送给更高层的图形软件。     确定驱动程序所要实现的任务之后,接下来设计出它的工作流程,本驱动的流程图如图7-25所示。触摸屏设备驱动的工作流程是:首先初始化触摸屏控制器为等待中断模式,同时初始化计数器为延迟10 ms后检查一次,映射INC_ADC、INC_TC和定时器中断向量到相应的中断服务程序,然后使能中断,并且使计数器准备就绪,当触摸笔按下时,触摸屏中断开始工作,同时启动计数器,等待10 ms后查看是否有按下事件发生,如果是则确定触摸笔按下,获得触摸点坐标信息,并进行相应的处理,如果没有按下则返回继续进行判断。 图7-25 触摸屏工作流程 7.5.4 触摸屏驱动设计分析   1.触摸屏设备初始化   由于触摸屏设备具有字符设备的特点,所以将它作为字符设备类型来实现,即对触摸屏设备的注册就是对字符设备注册。触摸屏的初始化是通过调用s3c2410_ts_init()模块加载函数实现的,该函数的实现代码如下:    int _init s3c2410_ts_init(void){    return driver_register(s3c2410_ts_driver); }   在上面的加载函数中,调用driver_register()函数来注册驱动程序本身。驱动程序的注册包括驱动程序本身的注册和设备的注册。驱动程序本身的注册先进行,即由上述的driver_register()函数来完成。而设备注册程序则应当写在驱动程序的probe代码中。在检测设备的时候进行注册,该触摸屏设备的注册是由变量s3c2410_ts_driver的probe方法实现的。关于s3c2410_ts_driver变量的定义如下: static struct device_driver s3c2410_ts_driver = { .name = DEVICE_NAME, .bus = platform_bus_type, .probe = s3c2410_ts_probe, .remove = s3c2410_ts_remove, };   从上面的代码可以看出,s3c2410_ts_driver变量定义了两个方法,分别是probe和remove。其中probe方法是由s3c2410_ts_probe()函数实现的,它的主要功能就是对触摸屏设备的注册,包括硬件的初始化工作。Remove方法是由s3c2410_ts_remove()函数实现的,功能与s3c2410_ts_probe()相反,完成设备的注销。首先分析s3c2410_ts_probe()函数的具体实现。   首先利用内核提供的时钟API函数clk_get获得ADC时钟源。利用clk_use()和clk_enable()应用和使用ADC时钟源。利用ioremap()把一个物理内存地址映射为一个内核指针,被映射数据长度由size参数决定。该函数的实质是把一块物理区域二次映射到一个可以从驱动程序里访问的虚拟地址上去。利用alloc_chrdev_region()函数来获得设备的主设备号和将设备的名称记录到内核的字符设备链表中,该函数将动态地分配设备号,用cdev_add()函数将字符设备加入到内核的字符设备数组中,如果没有成功加入到内核的字符设备数组中,则需要调用unregister_chrdev_region函数来释放占用的设备号。   配置GPIO,分别注册IRQ_ADC(ADC中断)和IRQ_TC(触摸屏中断),并设置触摸屏接口为等待中断模式。利用d

文档评论(0)

autohhh + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档