分类: LINUX
2011-05-19 12:54:48
问题一 假设是level trigger。一般是高电平触发中断的话,我们在driver中是不是必须会有一个动作就是写设备的某某寄存器,让把这个触发中断的电平拉低,不然,它就会一直会触发中断
回答:這個部份會根據芯片的設計有關. 有分為 read ACK 以及 write ACK. 我們的 chip 是屬於 read ack,
也就是當讀走 IIR (Interrupt Indication Register), chip 自己就會將 BUS 上的 INTR 那一根線給拉低, 因此 CPU 就不會被會被中斷.
问题二 假设是mips, 现在某段代码
Spin_lock_irqsave
…
… B中断发生了,此时是关中断。
…
Spin_lock_irqrestore
1 1 B中断不会被丢失吧,应该是一个pending的状态吧,因为它没有被读走,应该一直为高
2 2 是不是当spin_lock_irqrestore执行后,此时开中断了,下一个语句就是CPU被B中断,然后执行B的irq
3 回答:
1. 是的, 正如你所說的. 因為 B 的 ISR 並沒有被執行, 因此裝置 B 的 IIR 並沒有被 ACK (Read or Write), 因此屬於裝置 B 的 INTR 會一直拉住 (一直為高).
2. 是的, 我覺得應該是如此. 因為 CPU 的中斷已經開啟了.