FreeBSD 系统结构手册
上一页 | 第10章 　ISA设备驱动程序 | 下一页

# 10.12 xxx_intr

当收到来自特定设备的中断时就会调用中断处理函数。ISA总线不支持 中断共享（某些特殊情况例外），因此实际上如果中断处理函数被调用， 几乎可以确信中断是来自其设备。然而，中断处理函数必须轮询设备 寄存器并确保中断是由它的设备产生的。如果不是，中断处理函数应当 返回。

ISA驱动程序的旧约定是取设备单元号作为参量。现在已经废弃，当 调用`bus_setup_intr()`时新驱动程序接收任何 在连接例程中为他们指定的参量。根据新约定，它应当是指向结构 softc的指针。因此中断处理函数通常像下面那样开始：

              static void
              xxx_intr(struct xxx_softc *sc)
              {

它运行在由`bus_setup_intr()`的中断类型参数指定 的中断优先级上。这意味着禁用所有其他同类型的中断和所有软件中断。

为了避免竞争，中断处理例程通写成循环形式：

              while(xxx_interrupt_pending(sc)) {
                  xxx_process_interrupt(sc);
                  xxx_acknowledge_interrupt(sc);
              }

中断处理函数必须只向设备应答中断，但不能向中断控制器应答，后者由 系统负责处理。

上一页 | 起始页 | 下一页
xxx_isa_shutdown | 上一级 | PCI设备

本文档和其它文档可从这里下载：ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

如果对于FreeBSD有问题，请先阅读文档，如不能解决再联系<questions@FreeBSD.org>.
关于本文档的问题请发信联系 <doc@FreeBSD.org>.