zoukankan      html  css  js  c++  java
  • 电平触发与边沿触发中断的理解

    关于handle_level_irq与handle_edge_irq的理解:                                                                      
    电平中断处理handle_level_irq:
        (1)mask_ack_irq;
        (2)标记IRQ_INPROGRESS;
        (3)若发生同一中断线上的中断嵌套、则退出;
        (4)中断处理(在驱动程序的中断处理过程中可能会unmask中断);
        (5)unmask中断;
      由于驱动程序中可能unmask中断,因此对于同一中断线上可能发生中断嵌套(假定系统设定为IRQF_SHARED),故需要(2)、(3)步骤;可以看出对于电平触发中断方式而言,在软件上并不支持中断嵌套(硬件上支持)。

    边沿中断处理handle_edge_irq:
        (1)若首次进入,则ack_irq,且标记IRQ_INPROGRESS;
        (2)若非首次进入,则mask_ack_irq,且标记IRQ_PENDING | IRQ_MASK;退出
        (3)执行中断,如果发先当次执行中断为原被阻塞的中断,则清除IRQ_PENDING | IRQ_MASK,并进行unmask;
    可以看出在软件上,对于同一中断线,当被设置为handle_edge_irq时支持中断嵌套(仅可嵌套一级深度)。

    如果用handle_level_irq来处理边沿触发中断:
    由于handle_level_irq中调用了mask,直到中断处理完后才会调用unmask,因此在这器件软件上不会响应中断,此时会发生中断失。

    如果用handle_edge_irq来处理电平触发中断:
    handle_edge_irq首次不会调用mask,只执行了ack,因此在执行handle_IRQ_event过程中若打开中断,此时就会发生中断嵌套,此时第二次进入时虽然没有执行handle_IRQ_event,但是却标记了IRQ_PENDING | IRQ_MASK,结构是:虽然设备只提出一次中断请求,但是却两次执行了handle_IRQ_event。

  • 相关阅读:
    InstallShield用于配置 IIS 的 InstallScrip(转)
    常见的几个.NET 面试题
    工作中常用的SQL语句,随用随加
    memcached系列之1:memcached基础知识简介(为什么要使用memcached做缓存服务器)
    Webbrowser的部分内容
    adox创建access数据文件
    CentOS5(64位)下Apache+SVN+Submin2安装记录
    使用Selenium进行回归测试所遇到的问题
    Maven+Sonar如何让单元测试只跑一次?
    CenOS5 Mysql安装可能出现的问题
  • 原文地址:https://www.cnblogs.com/openix/p/3288956.html
Copyright © 2011-2022 走看看