精华内容
下载资源
问答
  • 以设置外部中断2(EINT2)为例,进行ARM7中断寄存器的设置,并编写其相应的中断程序如下: //设置中断类型 rEXTINT = 0x22221122 ; //EINT2高电平触发中断 //给定中断服务程序入口 pISR_EINT2 = (unsigned)...

    以设置外部中断2(EINT2)为例,进行ARM7中断寄存器的设置,并编写其相应的中断程序如下:

    //设置中断类型
    rEXTINT = 0x22221122 ;  //EINT2高电平触发中断 
    
    //给定中断服务程序入口
    pISR_EINT2 = (unsigned)Encoder_int;
    
    //打开全局中断和eINT2中断
    rINTMSK &= ~(BIT_GLOBAL|BIT_EINT2); 

    /*
    当ExINT2为高电平时,旋转编码器有新值,你先读低字节,再读高字节。其中低15位为旋转编码器的值,最高位为其按键的状态。
    */

    //定义编码器的低地址
    #define ENCODER_LOW_ADDR  (*(volatile unsigned char *)(0x06000000 + 0x400004))
    
    //定义编码器的高地址
    #define ENCODER_HIGH_ADDR  (*(volatile unsigned char *)(0x06000000 + 0x400005))
    
    //编码器的中断服务程序实现
    void __irq Encoder_int(void)
    {
        unsigned int encoderVal = 0;
    
        rPCONG = rPCONG & (~0x30);//INPUT
    
       if(rINTPND & BIT_EINT2) {
      //encoder flag is true, means the status of rotate encoder is changed;      
            encoderVal = ENCODER_HIGH_ADDR<<8|ENCODER_LOW_ADDR;
            debugprintf("the rotate encoder value is :%x\n", encoderVal);
        }
        rI_ISPC = BIT_EINT2;//置位时,标志此中断请求已经被处理了.
        rPCONG =rPCONG | 0x30;//EINT2
    }
    
    同理,其它的中断也可照样完成。
    

    转载于:https://www.cnblogs.com/qianggezhishen/p/7349461.html

    展开全文
  • 在AM9200中,中断寄存器分为2个层次,一个是用来设置某个功能允许哪些中断产生,另一个是AIC中断寄存器,用来设置是否允许该功能产生中断。当AIC对应中断产生时,需要读取相应功能中断状态寄存器,以判断产生...
    AM9200中,中断寄存器分为2个层次,一个是用来设置某个功能允许哪些中断产生,另一个是AIC中断寄存器,用来设置是否允许该功能产生中断。当AIC对应的中断产生时,需要读取相应功能的中断状态寄存器,以判断产生中断的具体原因。

     

    对于USB接口,首先需要设置UHP_HcInterruptEnableUHP_HcInterruptStatus寄存器(关于这两个寄存器的功能,请参见OHCI规范)。这两个寄存器属于USB功能寄存器,确定允许哪些USB中断。代码如下:
    //设置USB Host中断寄存器

    pUhp->UHP_HcInterruptEnable =   OHCI_HC_INTR_MIE |

                                    OHCI_HC_INTR_RHSC |

                                    OHCI_HC_INTR_UE |

                                    OHCI_HC_INTR_WDH |

                                    OHCI_HC_INTR_FNO;

    pUhp->UHP_HcInterruptStatus =   OHCI_HC_INTR_RHSC |

                                    OHCI_HC_INTR_UE |

                                    OHCI_HC_INTR_WDH |

                                    OHCI_HC_INTR_FNO;

    //设置AIC中断信息

    AT91F_AIC_ConfigureIt(   AT91C_BASE_AIC,

                             AT91C_ID_UHP,//AT91C_ID_TC1,

                             AT91C_AIC_PRIOR_HIGHEST,

                             AT91C_AIC_SRCTYPE_INT_EDGE_TRIGGERED,                                        AT91F_ASM_UHP_Handler);

    AT91F_AIC_EnableIt(AT91C_BASE_AIC,AT91C_ID_UHP);





    本文转自 tywali 51CTO博客,原文链接:http://blog.51cto.com/lancelot/261074,如需转载请自行联系原作者
    展开全文
  • 把前面那些中断基本搞懂之后,突然出现了这个外部中断控制寄存器,找了好多资料都只是泛泛而谈,根本不知道具体是干什么,搞我一头雾水,后来知道了这个是设置EINT0~EINT23触发方式,但又没讲怎么去...

    把前面的那些中断基本搞懂之后,突然出现了这个外部中断控制寄存器,找了好多资料都只是泛泛而谈,根本不知道具体是干什么的,搞的我一头雾水,后来知道了这个是设置EINT0~EINT23的触发方式的,但又没讲怎么去设置。就连芯片的数据手册上面都没有,晕菜了。后来终于在网上收到了如何设置这几个寄存器。

        EXTINT[2~0]:设置24个外部中断源的中断信号的触发类型。

        EXTINT0:设置EINT0~EINT7的中断触发类型。

            bit0~bit2:设置EINT0的中断触发类型。bit3不用

            bit4~bit6:设置EINT1的中断触发类型。bit7不用        

            bit8~bit10:设置EINT2的中断触发类型。bit11不用,依次往下推就行了·······

            bit28~bit30:设置EINT7的中断触发类型。bit31不用

            Setting the signaling method of the EINT0:

                 000=低电平(Low level)              001=高电平(High level)

              01x=下降沿触发(Falling edge triggered) 10x=上升沿触发(Rising edge triggered)    

              11x=两个都可以触发(Both edge triggered)

        EXTINT1:设置EINT8~EINT15的中断触发类型。触发类型和设置方式同上 

            bit0~bit2:设置EINT8的中断触发类型。bit3是设置filter enable for EINT8,0=Filter Disable,1=Filter Enable,依次类推

            bit28~bit30:设置EINT15的中断触发类型。bit31是设置filter enable for EINT15,0=Filter Disable,1=Filter Enable。   

        EXTINT2:设置EINT16~EINT23的中断触发类型。触发类型和设置方式同上 

            bit0~bit2:设置EINT16的中断触发类型。bit3是设置filter(过滤) enable for EINT8,0=Filter Disable,1=Filter Enable,依次类推

            bit28~bit30:设置EINT23的中断触发类型。bit31是设置filter enable for EINT15,0=Filter Disable,1=Filter Enable。   

        EINTMASK:外部24个中断源屏蔽寄存器。

        bit0~bit3,reserved(保留);

        bit4:  0,EINT4 available(使能);1,EINT4 masked(屏蔽)

        bit5:  0,EINT5 available(使能);1,EINT5 masked(屏蔽) 依次类推

        bit23:  0,EINT23 available(使能);1,EINT23 masked(屏蔽)

        EINTPEND:外部24个中断源指示寄存器(中断等待寄存器)。发生过后会被置1

        bit0~bit3,reserved(保留);

        bit4:  0,EINT4 not occurred(没有发生过);1,EINT4 occurred(发生过)  

             bit5:  0,EINT5 not occurred(没有发生过);1,EINT5 occurred(发生过)依次类推

        bit23:  0,EINT23 not occurred(没有发生过);1,EINT23 occurred(发生过) 

    综上所述:EINT0~EINT3不受EINTMASK和EINTPEND寄存器控制,他们是独立的,他们的中断在SRCPND中显示

    展开全文
  • NVIC模块的中断寄存器简介 嵌套式向量中断控制器(NVIC)是Cortex内核不可分割一部分,它与CPU紧密结合,可对系统异常和外设中断进行控制。如图1所示,NVIC右端连接到各个外围模块,负责对外设中断进行处理;左...

    NVIC模块的中断寄存器简介
    嵌套式向量中断控制器(NVIC)是Cortex内核不可分割的一部分,它与CPU紧密结合,可对系统异常和外设中断进行控制。如图1所示,NVIC右端连接到各个外围模块,负责对外设中断进行处理;左端连接到内核,负责对内核系统异常进行处理。本文重点介绍NVIC对外围模块的中断控制。通常,在配置某个外围模块的中断功能时,除了需要设置此模块本身的寄存器中的中断使能位外,还需要配置NVIC模块中对应的中断控制寄存器,系统才会响应此外围模块的中断请求。
    这里写图片描述
    ARM Cotex-M4的NVIC模块中相关寄存器的地址、名称、功能描述如图2所示,它们可分为两种类型:非优先级中断寄存器(non-IPR register)和优先级中断寄存器(IPR register)。其中,非优先级中断寄存器有以下几种:
    NVICISERx:中断使能设置寄存器;
    NVICICERx:中断使能清除寄存器;
    NVICISPRx:中断挂起设置寄存器;
    NVICICPRx:中断挂起清除寄存器;
    NVICIABRx;中断激活状态寄存器;
    其中x为0 - 7,称为寄存器的组号,表示每种寄存器都有8个。这些寄存器都是32位的。因此,如果每一位控制一个中断源,则可以分别控制256个中断源。通常, NVICISERx(中断使能设置寄存器)用于去使能某个中断,而NVICICPRx(中断挂起清除寄存器)用于配合NVICISERx寄存器来使能这个中断;NVICIABRx(中断激活状态寄存器)为只读寄存器,用于判断某个中断是否处于激活的状态。这里写图片描述
    而优先级中断寄存器只有一种: NVICIPRx,用于设定每个中断源的优先级。从图3可以看到,每个中断源的优先级控制字要占用4位,再加上保留位,则每个32位的寄存器可以配置4个中断源的优先级。因此,如果要配置256个中断源的优先级,则需要256 ÷ 4 = 64个32位的寄存器。但是Kinetis系列MCU的中断源一般都没有这么多,也就不需要这么多的寄存器。
    这里写图片描述
    下面以K60为例进行具体说明。K60支持16级中断控制,所以在NVIC中,对应于不同的中断源,在优先级中断寄存器NVICIPRx中都有4个相应的位来控制其优先级,另外还有4位是保留位,如图3所示。
    从图2可以看出,每种非优先级中断寄存器都是一个包含8个32位寄存器的寄存器组。那么在应用过程中,对应于K60的90多种不同的中断源,应该配置这些寄存器组中的哪一个寄存器(组号)和该32位寄存器的那一位(位号)呢?简单来说,就是组号和位号的确定。例如NVICICER2[21],它的组号就是2,位号就是21。这就需要借助芯片厂商在CPU中为不同中断源定义的中断请求号IRQ。需要特别注意的是,中断向量号和中断请求号IRQ号不同,中断请求号IRQ = 中断向量号-16,因为有16个ARM内核中断请求是没有分配IRQ号的。在K60的Reference Manual 的P74页可以看到CPU中断向量分配表,定义了各种不同的中断源所对应的中断入口地址、中断向量号、中断请求号、寄存器号以及彼此之间的关系,如图4所示。这里写图片描述
    这里结合K60的中断向量分配表,以LPTMR(低功耗定时器)模块为例介绍一下NVIC寄存器的配置。LPTMR模块的中断向量分配如图4所示,可以看到LPTMR中断入口地址为0x0000_0194,中断向量号为101,中断请求号IRQ为85。那么如何确定配置LPTMR中断所对应的NVIC寄存器的组号和位号呢?即LPTMR使用NVIC寄存器组中的哪一个寄存器,以及该寄存器的哪个位呢?它们又和中断向量号 IRQ有什么关系呢,下面分非优先级中断寄存器和优先级中断寄存器分别介绍。
    对于非优先级中断寄存器,如上面提到的NVICISERx、NVICICERx、NVICSPRx、NVICCPRx以及NVICABRx,组号的计算公式为IRQ / 32,所以可以得到LPTMR的NVIC非优先级中断寄存器的组号为85 / 32 = 2,从而得到LPTMR需要使用的非优先级中断寄存器为 NVICISER2、 NVICICER2、 NVICISPR2、NVICICPR2、NVICIABR2。这些寄存器都是32位的,所以对应于LPTMR的位号计算公式为IRQ % 32,得到85 % 32 = 21。确定完了组号和位号,便得到了需要设置的LPTMR的非优先级中断控制寄存器及相应的位为:NVICISER2[21]、 强调内容NVICICER2[21]、 NVICISPR2[21]、NVICICPR2[21]、NVICIABR2[21]。
    对于优先级中断寄存器IPR,如上所述,因为每一个IPR寄存器可以设置4个中断源的优先级,所以组号计算公式为IRQ / 4 = 21。下面确定位号,前面讲到优先级控制需要4位,另外还有4位保留位,所以每个中断源需要8位,因此位起始号的计算公式为8 * (IRQ % 4) + 4,得到LPTMR的位起始号为8 * (85 % 4) + 4 = 12。确定完了组号和位号,便得到了LPTMR的优先级中断寄存器及相应的位为:NVICIPR21[15:12]。
    通常,中断程序的处理流程为:关闭系统总中断、开启外设模块并使能该外设模块中断、配置NVIC模块中的中断寄存器、开总中断等几个过程。
    第一步,关闭系统总中断。一般采用宏定义DisableInterrupts,其本质是在内部调用一句汇编代码“CPSID i”。同样,打开总中断一般采用EnableInterrupts,本质是在内部调用一句汇编代码“CPSIE i”。
    第二步,开启外设模块并使能其中断。需要设置外设模块的寄存器中的中断使能位。对于LPTMR,需要置位控制状态寄存器LPTMRx_CSR的TIE位。 SIM_SCGC5|=SIM_SCGC5_LPTIMER_MASK; //开LPT模块时钟 LPTMR0_CSR|=LPTMR_CSR_TIE_MASK; //使能LPT定时器中断
    第三步,配置NVIC模块的中断寄存器。需要设置NVIC中相关的中断控制寄存器,如上面提到的NVICISERx、NVICICERx、NVICSPRx、NVICCPRx、NVICABRx以及NVICIPRx。值得注意的是,使能一个外设的中断需要完成两个步骤,首先置位 NVICICPRx(中断挂起清除寄存器),然后再置位NVICISERx(中断使能设置寄存器)。其原因在于,在完成第二步开启并使能外设模块中断后,外设模块便可以被触发产生中断请求,这时如果置位NVICISERx(中断使能设置寄存器),程序便可以进入中断服务程序,而这并非程序编写者的本意。所以为避免出现这种情况,需要首先置位NVICICPRx(中断挂起清除寄存器),清除已经挂起的中断,然后再置位NVICISERx(中断使能设置寄存器),等待下一个中断的发生。

    展开全文
  • 原创作品,允许转载,转载时...在AM9200中,中断寄存器分为2个层次,一个是用来设置某个功能允许哪些中断产生,另一个是AIC中断寄存器,用来设置是否允许该功能产生中断。当AIC对应中断产生时,需要读取相应功能
  • 寄存器的设置要注意

    2016-07-09 20:48:21
    在写 单片机是对 寄存器的设置要注意,有很多外设可能用这一个寄存器,在外设初始化的时候或对寄存器修改是可能会影响到其他外设的正常工作,今天就遇到这样一个蛋疼的问题,  这是我初始化程序中的一段代码...
  • 51单片机中断寄存器组选择

    千次阅读 2012-11-14 09:42:00
     通过设置PSW寄存器的第3位和第4位可以任意切换寄存器组。在进入中断前,切换寄存器组,可以方便的保护原寄存器组的数据不被中断里的语句破坏,很方便。 RS1 RS0 字节地址  0 0 0组寄存器 00H~07H  0 1...
  • STM32中断设置相关寄存器的分析

    千次阅读 2015-03-03 11:34:14
    1.中断设置使能和清除寄存器分析 地址 名称 描述 0xE000 E100 SETENA 设置使能中断0到31,写1将位置1,写0无作用 0xE000 E180 CLRENA 写1将位置0,禁能中断,写0无作用 __ASM void SET_CLEAR_IRQ(void) ...
  • 中断控制寄存器

    2012-08-01 15:31:00
    用S3C2410的中断方式来控制I/O端口或部件操作时,除了要对I/O端口或者部件的相应寄存器进行初始化设置外,还需对中断控制器的...下面分别是5个寄存器的合适进行介绍。 1、源未决寄存器 SRCPND寄存器由32位构成,每...
  • 要正确应用ARM处理器必须首先对它系统寄存器进行正确配置,下面简要介绍一下ARM寄存器,包括一些中断寄存器设置如中断状态(0x8000.0240,0x8000.1240,0x8000.2240)和中断屏蔽寄存器(0x8000.0280,0x8000....
  • 设置中断优先级寄存器,当有外部中断0请求中断时,中断程序执行发光二极管程序,在此过程中,外部中断1也有中断请求,外部中断0的中断程序将被中断去执行外部中断1的中断程序(数码管加1显示程序)。 #include<...
  • ARM7串口通信【中断寄存器

    千次阅读 2012-12-28 15:46:50
    解决方法:设置芯片PLL 过程:程序不是自己所写,波特率原先被调置为38400,用示波器观测波形,发现脉宽非计算所需值,查找资料 参考:http://blog.sina.com.cn/s/blog_6035432c0100tyg1.html 开发环境:...
  • stm不是有HAL库吗,为啥写寄存器版本? 在arm里面可没有HAL库一说,都是直接操控寄存器,所以理解芯片手册很重要,当然HAL库很好用 这次解读stm32 使用外部中断按键控制led灯代码 开始使用源码分析 先进个main函数 ...
  • 外部中断使用指南(寄存器设置

    千次阅读 2016-09-11 21:51:01
    实验板子:tiny210(芯片:s5pv210) ...实验目的:通过外部中断操作两个按键实现对LED灯亮灭控制 步骤:①初始化GPIO端口,使GPIO为外部中断状态;(寄存器:GPxxCON)  例:    ②配置
  • ARM中断及相关寄存器

    千次阅读 2010-01-22 16:44:00
    ARM中断寄存器主要包括: ·中断模式寄存器可以设置2个中断源为IRQ或FIQ方式。 ·中断挂起寄存器,当有中断请求产生时,相应位会被硬件置1,处于挂起状态。当进入中断处理程序时,必须通过软件清除这个标志位,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,708
精华内容 683
关键字:

中断寄存器的设置