S3C2410设备驱动程序课件.ppt

S3C2410设备驱动程序课件.ppt

ID:57059180

大小:324.50 KB

页数:46页

时间:2020-07-30

S3C2410设备驱动程序课件.ppt_第1页
S3C2410设备驱动程序课件.ppt_第2页
S3C2410设备驱动程序课件.ppt_第3页
S3C2410设备驱动程序课件.ppt_第4页
S3C2410设备驱动程序课件.ppt_第5页
资源描述:

《S3C2410设备驱动程序课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、设备驱动程序(二)中断处理中断的控制:打开和关闭中断响应函数的注册中断源和中断号中断的处理:中断响应函数使用tasklet2中断的控制中断控制器:中断首先由中断控制器处理。中断控制器可以被编程,可以将中断分派到多处理器环境下不同的处理器上。cli和sti:用于关闭和打开中断,但Linux系统中并不使用这种方式打开和关闭中断。unsignedlingflags;...save_flags(flags);cli();/这里的代码在中断关闭状态下执行/restore_flags(flags);Linux系统中一般使用如下方式关闭和打开中断:更安全的方法是使用“锁机制”,特别是在多处理器环境下,上

2、述方法不能通过关闭中断保护临界区代码。spin_lock_irqsave通过自旋锁提供锁机制和对中断的控制。这种方法也适用于单处理器环境。3S3C2410的中断控制器4中断控制器寄存器操作5中断源6注册和注销中断响应函数注册中断响应函数打开中断响应驱动程序工作关闭中断响应注销中断响应函数intregister_irq(unsignedintirq,void(handler)(int,void,structpt_regs),unsignedlongflags,constchardev_name,voiddev_id);voidfree_irq(unsignedintirq,voidd

3、ev_id);request_irq()/free_irq()unsignedintirq中断号,每个中断响应函数都对应一个中断号。中断号由使用的硬件决定。void(handler)(int,void,structpt_regs)指向中断响应函数的指针。unsingedlongflags用于中断控制的变量,实际是一些选项的位掩码。constchardev_name字符串指针。这个字符串将显示在/proc/interrupts中,表示这个中断的所有者。voiddev_id这个指针用于共享的中断线。这个指针一般由驱动程序自己使用,指向它自己的私有数据。在中断不共享

4、时,这个指针可以是空指针,但一般将它指向设备自己。7flags中的位标志SA_INTERRUPT当这个比特置位时表示注册的是一个“快速”中断,即在中断响应期间中断是被禁止的。(相对于“慢速”中断,因为需要较长的处理时间,系统在处理“慢速”中断期间中断是不被禁止的。这种中断一般很少被使用。)SA_SHIRQ这个比特被置位时表示这个中断可以被其它设备共享。如果其他设备已经注册了这个中断并且不是共享方式,则无法再注册这个中断的中断响应函数。SA_SAMPLE_RANDOM这个比特被置位时表示这个中断可以对熵池做贡献。熵池是操作系统用于产生真随机数的机制。熵池中的随机数经常被用来生成用于安全或加密

5、的密码。如果这个中断的发生是完全随机的,比如键盘中断,则可以将这个比特置位,向熵池贡献;否则,比如固定间隔的时钟中断,不包含随机性,这种中断就用于为熵池做贡献。8使用register_irq()注册一个中断也是对系统资源申请的一个过程。注册成功则响应的系统资源将被占用。注册一个中断可以在驱动程序初始化的时候,也可以在设备第一次被打开的时候。一般,中断的注册在设备第一次被打开、同时设备硬件的中断功能还没有被使能时进行。这种方式需要驱动程序本身对设备的打开次数进行管理。intresult;result=register_irq(SPIOC_IRQ,spioc_interrupt,SA_INTE

6、RRUPT,“spioc”,NULL);if(result){printk(KERN_INFO“spioc:can’tgetassignedirq%d”,SPIOC_IRQ);return-1;}else{enable_irq();}我们可以通过/proc界面查看系统上中断的使用情况:/proc/interrupts/proc/stat9中断号中断号是一个中断最根本的标志,每个中断源对应一个中断号。中断号是唯一的,并且是由硬件决定的。我们要使用一个中断,首先就需要知道它的中断号。静态设定中断号:在我们写驱动程序时已经明确知道要使用的中断号。驱动程序模块加载时设定中断号:由用户在加载驱动

7、程序时指定要使用的中断号。比如某些ISA卡通过跳线设定所使用的中断,这时用户可根据跳线的设置在加载驱动程序时指定中断号,如:insmod./spioc.ospioc_irq=x自动探测中断号:由驱动程序自动决定或由操作系统决定要使用的中断号。如PCI设备的中断号是在系统启动时由系统分配的。1完全由驱动程序执行自动探测:根据一些设备的基本知识,驱动程序可以根据设备的某些参数判断应该使用哪个中断号。2借助内核的帮助:内核提供

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。