zoukankan      html  css  js  c++  java
  • 转:6410中断控制详解

    S3C6410的中断主要改进是.
     
      增加中断向量控制器,这样在S3C2440里需要用软件来跳转的中断处理机制,在S3C6410完全由硬件来跳转。你只要把ISR地址是存在连续向量寄存器空间,而不是象S3C2440自行分配空间自行管理。
     
      换句话说,在S3C2440下是由CPU触发IRQ/FIQ异常,由异常处理函数里再查找相关中断寄存器来跳到指定的ISR,而可以全部由S3C6410的VIC硬件来自动处理。 这个大大简化中断处理编程。
     
     另一个是外部中断加入滤波电路,这样原来需要软件去毛刺的地方均可以采用硬件来进行滤波了,这样大大简化外部中断处理。
     
     
     
     
    S3C6410 中断操作
     --------------------------------------------------------------------  
     
    S3C6410 中断号
     
     
     
    64个中断按硬件分组分成VIC0, VIC1两个组,各组由一个相应寄存器来处理。
    中断号为0-31是VIC0组
    中断号为32-63是VIC1组
     
    S3C6410中断操作很简单。
     
    打开中断 VICxINTENABLE 
      x为0,1,0-31中断使用VIC0INTENABLE,32-63中断使用VIC1INTENABLE.以下各寄存器均同,不再重复.
     
    对应位为1表示这个中断可用,如0号中断有效,是VIC0INTENABLE的第0位为1
     
     
    关闭一个中断
        向VICxINTENCLEAR对应位置1表示关闭这个中断.
     这个是三星比较明智的改进,不会让开发感到比较迷惑的地方

    设置中断类型
      设置某一个中断是IRQ还是FIQ,注意只有一个中断才能FIQ.设置对应位1表示设为FIQ模式。

     
     
    设置S3C6410的向量地址(ISR地址)
       注意在S3C6410自已从了各用32个地址连续的寄存器然成两个寄存器数组。首地址分别是0x71200100和0x71300100.你可以象指针数组一样来操作它们,数组的下标就是中断号。
       这样设置让开发者大大简单化ISR的向量组织。
     
    设置中断优先级
       这个也采用用32*2寄存器形成两个优先级数组。每一个寄存器对应优先级别,取值范围在0-15之间.
     
     
     
    中断运行后指示
       这个因为了用VIC,现在省掉了S3C2440一大堆的SRCPND,INTPND,INTOFFSET,SUBSRCPND等寄存器。直接由VICxADDRESS来指示当前的ISR地址。  
     
      注意这个VICxADDRESS的寄存器,在S3C6410里称为在System BUS.调用。这种方式不建议调用,因为这种模式相当于S3C2440的用软件进行ISR跳转.
       这三星的给的参考流程。
     
     
     
     
     更为简单的调用方式.是VIC port 模式,是我强烈推荐的模式,它是系统产生中断后,将由VIC直接去执行相应的ISR。这不仅上编程变成简单,而且效率上更快,因为它没有访问VICxADDRESS和在System BUS执行的时间
    使用这种模式,只需要在启动加上特定的代码
     
     
     
    外部中断编程
    ----------------------------------------------------------
       
       除INT_EINT0-INT_EINT4以外,全部中断是由S3C6410内部的模块触发的。称为内部中断

      INT_EINT0-INT_EINT4是外部中断,是由CPU外的外设来触发的,它的触发哪一个中断取决外设联接哪一个GPIO中断脚。 
       象开发板的网络控制器,按钮等都是挂在某一些GPIO脚上。它们都是使用典形外部中断.
     
    外部中断脚
    S3C6410 分9组GPIO脚来充当外部中断脚
      第0组,共28脚.GPN0-GPN15 (16脚),GPL8-GPL14(7脚),GPM0-GPM4 (5脚)
      第1组,由GPA0-GPA7,共8个中断脚
      第2组,由GPC0-GPC0,共8个中断脚…
         …
      第8组,由GPP0-GPP14,共15个中断脚
      第9组,由GPQ0-GPQ8,共9个中断脚
     
    外部中断号
     
    第0组的第0脚到第3脚的设备将触INT_EINT0=0中断
    第0组的第4-11脚将触发INT_EINT1=1中断
    第0组的第12-19脚将触发INT_EINT2=32中断
    第0组的第20-27脚将触发INT_EINT3=33中断
    第1组-第9组所有设备只触发INT_EINT4=53中断
     
    我们可以看到,每一个组都是多个中断脚共享一个中断号的。其中第0组比较常用。占用了3个中断.
     
     
    在ISR中,如何判断是哪一个中断脚的产生中断?
     
    不同的IO脚上多个设备产生同一个中断,软件如何知道是哪一个脚?
    由External Interrupt Pending Register 来判断
        第0组由EINT0PEND来判断
      第1,2组由EINT12PEND来判断
     
    依此类推,EINT34PEND,EINT56PEND, 一直到EINT9PEND 来指示
     
    外部中断信号类型
     
      这里设置中断产生何种信号才会被捕获。主要是五种,低电平,高电平,上升沿,下降沿或者两者均可,
    第0组用 EINT0CON0/EINT0CON1两个寄存器来设定.
     
    第1,2组采用 EINT12CON ,
    第3,4组采用EINT34CON,
    依此类推

    临时关闭外部中断
    EINTxMask是临时性关闭中断
    为1表示关闭某一个中断,为表示打开0,一般只要需要使用中断才会打开。 

    EINT0MASK是第0组的使用

    EINT12MASK是第1,2组的中断掩码

     依次类推...

    定义硬件滤波类型

      对于一些波形不规整的外部中断信号,可以通过滤波电路让其变成规整,这样会简化软件的编写.

     S3C6410有两种滤波电路,一种延时滤波(如按钮类中断可以采用这一类型),一种是数字采样滤波.第二种滤波电路还要设采样宽度。

      第0组的滤波用EINT0FLTCON0,EINT0FLTCON1, EINT0FLTCON2, EINT0FLTCON3配置.

     FLTEN表示是否打开滤波功能,FLTSEL是设置滤波方式,EINTn表示数字滤波采校的宽度

    第1,2组的滤波采用 EINT12FLTCON
    第3,4组的滤波采用 EINT34FLTCON

    第9组滤波 采用EINT9FLTCON
     
    外部中断编程
     
      外部中断除了中断编程所有流程外,
      一般额外配置相应的GPxCON配置成中断脚。
       还要配置滤波方式和中断信号方式。
      还要打开外部中断掩码
     
      在ISR中,在最后除了要把VICxADDRESS清0外,还需要清除 VICxSOFTINTCLEAR相应位。
  • 相关阅读:
    between…and…用法
    as用法
    as the saying goes 常言道
    share with用法
    know about用法
    *[topcoder]LCMSetEasy
    5生鲜超市(商品列表页功能,restful api基础以及vue项目结构介绍,drf的APIView、GenericView、viewsets和route)
    1生鲜超市(项目介绍)
    11生鲜超市(首页、商品数量、缓存和限速功能开发)
    Aplix助NEC/松下Linux手机平台建设
  • 原文地址:https://www.cnblogs.com/chd-zhangbo/p/5286538.html
Copyright © 2011-2022 走看看