ARM-Linux 中断分析
| 4 /* Timer 4 interrupt */ #define IRQ_UART2 15 /* UART 2 interrupt */ #define IRQ_LCD 16 /* reserved for future use */ #define IRQ_DMA0 17 /* DMA channel 0 interrupt */ #define IRQ_DMA1 18 /* DMA channel 1 interrupt */ #define IRQ_DMA2 19 /* DMA channel 2 interrupt */ARM-Linux #define IRQ_DMA3 20 /* DMA channel 3 interrupt */ #define IRQ_SDI 21 ARM-Linux /* SD Interface interrupt */ #define IRQ_SPI0 22 /* SPI interrupt */ #define IRQ_UART1 23 /* UART1 receive interrupt */ #define IRQ_RESERVED24 24 #define IRQ_USBD 25 /* USB device interrupt */ #define IRQ_USBH 26 /* USB host interrupt */ #define IRQ_IIC 27 /* IIC interrupt */ #define IRQ_UART0 28 /* UART0 transmit interrupt */ #define IRQ_SPI1 29 /* UART1 transmit interrupt */ #define IRQ_RTC 30 /* RTC alarm interrupt */ #define IRQ_ADCTC 31 /* ADC EOC interrupt */ #define NORMAL_IRQ_OFFSET 32 这些宏定义在文件irqs.h中,大家ARM-Linux可以看到它的定义取自S3C2410的文档。 总结: linux在初始化的时候已经把每个中断向量的地址准备好了!就是说添加中断服务程序的框架已经给出,当某个中断发生时,将会到确定的地址处去找指令,所以我们做驱动程序时,只需要经过request_irq()来挂接自己编写的中断服务ARM-Linux程序即可。 另:对于快速中断,linux在初始化时是空的,所以要对它挂接中断处理程序,就需要单独的函数set_fiq_handler()来实现,此函数在源文件fiq.c中,有兴趣的读者可进一步ARM-Linux研究。 |
