首页 理论教育 嵌入式Linux编程:中断方式及应用

嵌入式Linux编程:中断方式及应用

时间:2023-10-31 理论教育 版权反馈
【摘要】:在中断传送方式下,外围设备具有申请CPU服务的主动权。可见,中断传送方式就是外围设备中断CPU的工作,使CPU停止执行当前程序,而去执行一个为外围设备的数据输入/输出服务程序。中断子程序执行完毕后,CPU又转回来执行原来的程序。在Linux驱动程序中采用中断方式访问外围设备需做到以下几点:1)向系统申请中断。

嵌入式Linux编程:中断方式及应用

从传送方式的工作过程可以看出,查询传送方式实际上是程序循环等待方式,即利用程序循环检测外围设备的状态,直到外围设备准备好时才能进行数据传送操作。在这种方式下,CPU的大部分资源被用来循环执行查询程序,而其他任务被搁置了,因此这种工作方式效率很低。另外,用查询方式工作时,如果系统有多个外围设备,那么CPU只能轮流对每个外围设备进行查询,而这些外围设备的速度往往并不相同,这时CPU就不能很好地满足各个外围设备随机地对CPU提出输入/输出服务的要求。

在中断传送方式下,外围设备具有申请CPU服务的主动权。当输入设备已将数据准备好或者输出设备可以接收数据时,便可以向CPU发出中断请求,使CPU暂时停下目前的工作而和外围设备进行一次数据传输。等输入操作完成后,CPU继续进行原来的工作。可见,中断传送方式就是外围设备中断CPU的工作,使CPU停止执行当前程序,而去执行一个为外围设备的数据输入/输出服务程序。该服务程序称为中断处理子程序或中断服务子程序。中断子程序执行完毕后,CPU又转回来执行原来的程序。被外界中断时,程序中的下一条指令所在处称为断点,从中断服务程序返回时,从断点处继续执行被中断的程序。

在中断传送时,CPU和外围设备处在并行工作的状态下,CPU不必在两个输入/输出过程之间对接口进行状态测试和等待,可以去做别的处理,因为每当外围设备准备就绪时,会主动向CPU发中断请求,由此而进入一个传输过程。此过程完成后,CPU可以执行别的任务,而不是处在等待状态,这样大大提高了CPU的效率。

采用这种方式访问外围设备的前提是该外围设备能发出操作系统可识别的中断。在Linux驱动程序中采用中断方式访问外围设备需做到以下几点:(www.xing528.com)

1)向系统申请中断。Linux提供了request_irq()函数来实现申请中断。申请成功与否的关键在于此函数的一个参数irq,它是希望申请的中断号。如果外围设备可以发中断2,那么该参数就填2。需要考虑的是,如果想申请的中断号己被别的设备占用,那就需要想办法协调这两个设备了。可以使用命令cat/proc/interrupts来查看操作系统中现有中断号的使用情况。当然是否申请成功,也可以通过这条命令来查看。

2)释放中断。free_irq()函数可以实现这个功能。

3)实现中断函数。申请完中断号后,希望系统响应该中断后做些什么全依赖于此函数。其实,该函数也没有特别的地方,无非就是做些读写设备的动作和采集需要的数据。需要说明的是,该函数应尽量的短,因为此时在独占CPU资源,系统很难响应别的事件。该函数的末尾应该调用函数wake_up_interruptible()来唤醒该设备队列中的其他进程。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈