Chinaunix首页 | 论坛 | 博客
  • 博客访问: 34757
  • 博文数量: 9
  • 博客积分: 246
  • 博客等级: 二等列兵
  • 技术积分: 100
  • 用 户 组: 普通用户
  • 注册时间: 2007-10-07 20:46
文章分类

全部博文(9)

文章存档

2011年(7)

2008年(2)

我的朋友

分类: 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 的中斷已經開啟了.


阅读(2213) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~