对于操作系统内核有些了解的朋友应该对DSR不会感到陌生——Deferred Interrupt Service Routine,即延迟的中断服务例程。
对于一些操作较复杂、耗时的操作我们往往想将它从中断服务例程中拿出来,放在外面完成。这样可以加快中断响应时间,对于一些紧迫的事件处理则显得更为重要。因此应该提供一个DSR这样的机制。这个在Windows和Linux中均有体现。
下面我将谈谈在Blackfin DSP处理器系列中对DSR的一种处理方法。
其实对于一些并不紧急、完全可以拖后操作的事情甚至可以通过一个任务(线程)专门处理这些事件。在Linux中,DSR的处理分为三个不同的机制,其中有一个实际上是在某些检查点(如系统中断处理结束后、定时中断处理结束后、任务调度结束后等等)检查是否有DSR事件,如果有则处理它们。那么下面我将基于这种情况作出处理。

























以上是一个C文件。这里对Blackfin的中断控制器做一下简单介绍:Blackfin中断控制器分为16个中断优先级,0~4是非屏蔽中断,7到13属于外部系统中断,14、15属于软件中断。
下面贴出核心的汇编部分代码:































































































以上是对中断处理一结束马上处理DSR的情况。