精华内容
下载资源
问答
  • 也有机器把中断服务程序入口跳转指令构成一张表,称为中断向量跳转表。 中断地址 中断向量表或中断向量跳转表中每个表项所在内存地址或表项索引值,称为向量地址或中断类型号。 向量中断 是指一种识别...

    中断向量

    每个中断源都有对应的处理程序,这个处理程序称为中断服务程序,其入口地址称为中断向量。所有中断的中断服务程序入口地址构成一个表,称为中断向量表;也有的机器把中断服务程序入口的跳转指令构成一张表,称为中断向量跳转表。

    中断地址

    中断向量表或中断向量跳转表中每个表项所在的内存地址或表项的索引值,称为向量地址或中断类型号。

    向量中断

    是指一种识别中断源的技术或方式。识别中断源的目的就是要找到中断源对应的中断服务程序的入口地址的地址,即获得向量地址。

     

     

    展开全文
  • S3C44B0的向量中断模式概念   注:arm7工作模式是arm7这个内核提供,而厂商在生产时,在arm7这个内核基础上,外扩了各种中断及其相关的中断控制器,而这些中断发生一般会进入IRQ模式,这点很好理解...
    S3C44B0向量中断模式概念

     

    注:arm7的工作模式是arm7的这个内核提供的,而厂商在生产时,在arm7这个内核的基础上,外扩了各种中断及其相关的中断控制器,而这些中断发生一般会进入IRQ模式,这点很好理解。

     

    (1)向量中断模式(IRQ支持,FIQ不支持)
          
     当系统发生IRQ中断时候,cpuPC会读取位于0x18处的IRQ中断指令(也就是说跳到地址0x18处去执行指令),然后CPU自动读取对应于该中断源确定地址上的指令取代0x18处的指令(这个过程是由系统自动完成的,不需要用户编程),通过跳转指令,系统就直接跳转到对应地址,这样节省了中断处理时间,提高中断处理速度。——通俗点说,如果采用了向量中断模式,一旦发生中断,CPU就会跳到相应的地址来执行指令。例如ADC中断的向量地址为0xC0,一旦发生ADC中断,PC就先跳到了地址0x18再跳到0xC0上来执行命令,但对于用户来说,就跟一发生中断就直接跳到了0xC0上没有区别,这个先跳到0x18的过程可以忽略不计,由系统自动完成。如果在0xC0处放如下代码: ldr  PC , =HandlerADC ,当ADC中断产生的时候系统会自动跳转到HandlerADC函数中。


    2)非向量中断模式

    这种模式处理方式是一种传统的中断处理方法,当系统产生中断的时候,系统将interrupt pending寄存器中对应标志位置位(当然向量中断模式也有这步发生),然后跳转到地址0x18处。用户需要在地址0x18处写一个统一中断函数,该函数通过读取interrupt pending寄存器中对应标志位,来判断中断源,并根据优先级关系再跳到对应中断源的处理代码中。

     

     

    二、向量中断模式的启动代码分析及编程。

     

    1、中断向量模式中,具体实现如下:

    中断服务入口地址处,写入一个调用宏的指令(类似于子程序),这个宏是一个“加载程序”,把中断服务的首地址装载于pc中。具体调用一个框图来表示,结合以下的程序理解,接下来还有一个针对框图的具体的讲解。以ADC中断为例子:

    启动代码44binit.s定义了一个宏:$HandlerLabel HANDLER。

    启动代码44binit.s把“ldr  PC , =Handler***”装入了对应的地址中(在0x0为首的一系列地址中),例如“ldr PC , =HandlerADC”这条指令被装入了0x000000c0地址中。

    启动代码44binit.s开辟了一些在SDRAM>0x0c000000)上的以_ISR_STARTADDRESS(我的板子程序定义为0x0c7fff00)为基址的一些地址中,每个地址用一个标号表示,用于存放中断服务程序的地址。例如,HandleADC   #   4 ,可以HandleADC认为是_ISR_STARTADDRESS+0x20的这个地址的标号。详见代码。

    main.c包含的头文件44b.H中,对于_ISR_STARTADDRESS+0x20”有如下定义,#define  pISR_ADC  (*(unsigned *)(_ISR_STARTADDRESS+0x20))pISR_ADC这是一个指针,在上一个步骤中,开辟出来空间就是给这个指针用的。

     在main.C或者其他的c文件里,包含44b.H这个头文件的前提下,可以编写一个中断处理函数,void __IRQISR_ADC(){……},然后再加入语句pISR_ADC=unsigndeISR_ADC,这样就把ISR_ADC()这个函数的地址写入了_ISR_STARTADDRESS+0x20)这个地址。值得注意的是,是地址被写入了地址。

    ADC中断发生,PC跳转到执行0x 000000C0处。

    CPU执行存放在地址0x000000C0上的“ldr  PC , =HandlerADC”这条指令。

    PC再跳至执行宏指令“HandlerADC  HANDLER  HandleADC”,此宏指令(实质上就是一个子程序)执行完的结果,就是把(_ISR_STARTADDRESS+0x20)这个地址上存放的子程序ISR_ADC()地址给PCPC就执行ISR_ADC()。

    执行完毕,返回。

     

     

    注:(1)步骤①②③在出现在44binit.s,详见我的启动代码中的注释。

        2_ISR_STARTADDRESS的定义在option.inc中:_ISR_STARTADDRESS   EQU   0xc7fff00

        3)步骤④在44b.H中定义:#define  pISR_ADC     (*(unsigned *)(_ISR_STARTADDRESS+0x20))

    (4)main.C或者其他的c文件里,写入:

    void __IRQ ISR_ADC(){……}pISR_ADC=unsigndeISR_ADC

        (5)必须加入在中断服务程序中__IRQ,以高速编译器这个是一个中断服务程序,这样编译器会在编译时候加上返回用户模式的代码,以实现中断后程序的自动返还。

    http://blog.sina.com.cn/s/blog_4e0fe0510100hzvm.html

    http://blog.sina.com.cn/s/blog_4e0fe0510100i018.html

    展开全文
  • 说到中断号和中断向量,也许你并不陌生,这两个概念也可以将中断原理解释个大概了。但是当你深究下去时候你会碰到另一个东西——IRQ,之后自然而然对从硬件级开始到中断向量表整个中断过程产生好奇,然后继续...
      说到中断号和中断向量,也许你并不陌生,这两个概念也可以将中断原理解释个大概了。但是当你深究下去的时候你会碰到另一个东西——IRQ,之后自然而然的对从硬件级开始到中断向量表的整个中断过程产生好奇,然后继续研究,就能学到下文中所包含的内容了。
    

         你没有硬件基础?我也没有!所以让咱们从零开始。

         IRQ(Interrupt ReQuest),中文翻译应该为“中断请求”,但实际上一些文档中说到IRQ时一般就是指“中断请求信号线”——8259A的一个引脚,一个8259A有8个这样的引脚IRQ0~IRQ7。那8259A又是什么?好问题!想到问题后咱们就来解决它,其实咱们这此普通人跟牛人的区别就在这儿。

    IRQ、中断号与8259A    

         我们都知道计算机可以挂接上许多外部设备,比如键盘、磁盘驱动器、鼠标、声卡……等等一系列设备,而这些设备都可能在同一时刻向CPU发出中断信号(也就是外部中断),那么CPU到底应当响应哪一个设备的中断信号呢?这都通过另外一个芯片来控制,在IBM PC机中,这个芯片常常被称作:可编程中断控制器(PIC)8259A,说它可编程,是因为我们可以通过编程来改变它的功能。比如我可以通过编程设定CPU应当优先响应哪一个中断,屏蔽哪些中断等等一系列事件。它的结构图如下。

    365790-piclogic      从图中可以看到,一个8259A芯片的组成可以分为5个主要的逻辑控件:中断屏蔽寄存器(IMR)、中断请求寄存器(IRR)、优先级仲裁单元(Prioriry Resolver)、中断向量寄存器(ISR)和控制逻辑单元(Control Logic)。一个8259A芯片有IRQ0~IRQ7七个IRQ引脚,一个IRQ对应着一个中断号,一个中断号对应着一个中断向量,一个中断向量对应着一个中断处理子程序(ISR,注意这个ISR是Interrupt Service Routine的缩写)。

          也许你已经对硬件级的中断处理过程猜到个大概了,当一个IRQ接收到一个外部中断信号后处理的流程应该是以下几个步骤:

          1.IMR判断该中断是否被屏蔽掉(IMR中相应的位置1)了,如果被屏蔽掉了结束处理,否则跳转到第2步;

          2.将收到的中断请求保存到IRR中(IRR中相应的位置1,IRR相当于一个缓存,用来保存等待CPU处理的中断信号),等待CPU当前指令执行结束后向8259A发送INTA信号,表示现在CPU可以处理中断请求了,此时IRR相应位被reset,然后跳转到第3步;

          3.PR根据等待处理的中断信号对应的IRQ,选择最高优先级的中断信号进行处理,IRQ0优先级最高,接着是IRQ1、IRQ2……然后跳转到第4步;

          4.CPU向8259A发送INTA信号,要求被告知IRQ对应的中断号,然后根据中断号到IDT中找到相应的中断向量,跳转到对应的中断处理子程序(中断向量和中断处理了程序是什么?后面会说到,这里你只把它们当成是一个函数调用就可以了)入口地址开始执行,此时中断号对应的ISR中位被set(IRR被reset和ISR被set的过程是对应的),如果此时有更高优先级的中断信号等待处理,跳转到第3步。

          值得注意的是,第2步中有个细节“等待CPU当前指令执行结束后……”,往常我们理解的中断是,当CPU接收到一个中断信号时会立即响应。其实不完全是这样的,CPU需要将当前正在执行的指令执行完毕才会响应中断。

          罗罗嗦嗦到现在,IRQ跟中断号到底有什么区别啊?你能想到这个问题说明你的思考过程还没跑题,比我强多了!一般我看东西时,看着看着就把初衷给忘了……

          如果IRQ还算能好理解点,那么中断号就稍稍抽象一点,中断号是可编程的,也就是说一个IRQ对应着哪个中断号由咱们程序员说得算(一种God的感觉油然而生)。默认情况下,IRQ对应的中断号是由BIOS初始化的,IRQ0~IRQ7对应着中断号0x8~0xF。而可编程表现在,我们可以将IRQ0对应的中断号修改成0~255中的任意一个数,我们设为INT_NUM,然后IRQ1~IRQ7对应的中断号就跟着变成INT_NUM+1~INT_NUM+7了。举个例子,我们将IRQ0对应的中断号改到0x10,那么IRQ1对应的中断号就是0x11、IRQ2的是0x12……IR7的是0x17。

          说到这里,你应该明白了IRQ和中断号是个什么,以及它们之关的关系了。然后你又有问题了,我们可以设置IRQ对应的中断号,but how?你爷爷的,又跟我想一块儿去了,咱俩可以去拜把子了!

     

          既然8295A是个芯片,那么自然需要程序员来做一起配置的工作,当然修改IRQ对应的中断号也算一种配置了!对8259A的编程是通过向其相应的端口发送一系列的ICW(初始化命令字)完成的。总共需要发送四个ICW,它们都分别有自己独特的格式,而且必须按次序发送,并且必须发送到相应的端口,主片的端口号为0x20,从片的端口号为0xA0。那么从片又是啥?咋这么多不懂的呢,唉……

    从片是个啥?怎么设置IRQ与中断号的对应关系?

          一个8259A芯片的可以接最多8个中断源,但由于可以将2个或多个8259A芯片级连(cascade),并且最多可以级连到9个,所以最多可以接64个中断源。早期,IBM PC/XT只有1个8259A,. 但设计师们马上意识到这是不够的,于是到了IBM PC/AT,8259A被增加到2个以适应更多外部设备的需要,其中一个被称作Master,另外一个被称作Slave,Slave以级连的方式连接在Master上。如今绝大多数的PC都拥有两个8259A,这样最多可以接收15个中断源。两个8259A芯片级连如下图所示。

    365795-irq_cascade

          从片弄明白了,IBM的工程师原来也是有时代局限性的,不会用发展的眼光看问题啊……言归正传,上面说了我们可以通过4个ICW1~ICW4可配置8259A,IRQ与中断号的对应就是通过ICW2(一个8位的数)来完成的。

    ICW2:发送到0x21(主片)及0xA1(从片)端口

       7       6      5      4       3      2      1      0  
      A7   A6   A5   A4   A3   0   0    0


         ICW2用来指示出IRQ0使用的中断号是什么,因为最后三位均是零,因此要求IRQ0的中断号必须是8的倍数,这又是一个很巧妙的设计。因为IRQ1的中断号就是IRQ0的中断号+1,IRQ2的中断号就是IRQ0的中断号+2,……,IRQ7的中断号就是IRQ0的中断号+7,刚好填满一个8个的中断向量号空间。

         到这里,基本弄明白中断硬件级的原理了,至于其他的三个ICW,各位看官可以参考张昆藏的《IBM PC/XT微型计算机接口技术》,不错的一本书。

         最后一个问题了,中断向量是个什么东西?

    我所理解的中断向量

         中断向量实际上就是中断号,一般是可以这么理解的,但是按我的习惯(请允许我修改下概念),我把中断向量理解为中断号与中断服务子程序的一个映射,如果用y表示中断服务子程序、x表示中断号,那么y=f(x)中的运算法则f就是中断向量了。中断向量实际上就是一个程序入口,很多时候中断向量就是一个jmp指令(看官可以思考一下,这里为什么不用call),例如jmp isrClock,跳转到相应的中断处理子程序(例子里的isrClock);而中断向量表就是所有中断向量组成的一张表,对应到代码就是N个jmp指令。当CPU根据IRQ获得中断号的时候,就会计算“中断向量表的起始地址+中断号”得到相应的中断向量,然后进行跳转。

        好了,说到这里各位看官也许已经看烦了,其实学习的过程是很枯燥的,但是成功的人会很享受这种枯燥,这也是我们差的那一步!

        一句话,学习的过程中应该能够“耐得住寂寞,经得起诱惑……”

     

    注:以下源自张昆藏的《IBM PC/XT微型计算机接口技术》,讲了下模块设计规则,大家可以看下。他就把中断号和中断向量理解为一个概念,很多书中也都是这么讲的,千万不要因为我的理解而出现混淆。

    这里出现了一个中断向量的概念,其实它就是一个被送往CPU数据线的一个整数。CPU给每个IRQ分配了一个类型号,通过这个整数,CPU来识别不同类型的中断。这里可能很多朋友会寻问为什么还要弄个中断向量这么麻烦的东东?为什么不直接用IRQ0~IRQ15就完了?比如就让IRQ0为0,IRQ1为1……,这不是要简单的多么?其实这里体现了模块化设计规则以及节约规则。

    首先我们先谈谈节约规则,所谓节约规则就是所使用的信号线数越少越好,这样如果每个IRQ都独立使用一根数据线,如IRQ0用0号线,IRQ1用1号线……这样,16个IRQ就会用16根线,这显然是一种浪费。那么也许马上就有朋友会说:那么只用4根线不就行了吗(24=16)?

    对于这个问题,则体现了模块设计规则。我们在前面就说过中断有很多类,可能是外部硬件触发,也可能是由软件触发,然而对于CPU来说中断就是中断,只有一种,CPU不用管它到底是由外部硬件触发的还是由运行的软件本身触发的,因为对于CPU来说,中断处理的过程都是一样的:中断现行程序,转到中断服务程序处执行,回到被中断的程序继续执行。CPU总共可以处理256种中断,而并不知道,也不应当让CPU知道这是硬件来的中断还是软件来的中断,这样,就可以使CPU的设计独立于中断控制器的设计,因为CPU所需完成的工作就很单纯了。CPU对于其它的模块只提供了一种接口,这就是256个中断处理向量,也称为中断号。由这些中断控制器自行去使用这256个中断号中的一个与CPU进行交互。比如,硬件中断可以使用前128个号,软件中断使用后128个号,也可以软件中断使用前128个号,硬件中断使用后128个号,这于CPU完全无关了,当你需要处理的时候,只需告诉CPU你用的是哪个中断号就行,而不需告诉CPU你是来自哪儿的中断。这样也方便了以后的扩充,比如现在机器里又加了一片8259芯片,那么这个芯片就可以使用空闲的中断号,看哪一个空闲就使用哪一个,而不是必须要使用第0号,或第1号中断。其实这相当于一种映射机制,把IRQ信号映射到不同的中断号上,IRQ的排列或说编号是固定的,但通过改变映射机制,就可以让IRQ映射到不同的中断号,也可以说调用不同的中断服务程序,因为中断号是与中断服务程序一一对应的,这一点我们将在随后的内容中详细描述。8259A将中断号通知CPU后,它的任务就完成了,至于CPU使用此中断号去调用什么程序它就不管了。

    本文出自 “New World” 博客,请务必保留此出处http://snower.blog.51cto.com/2918921/557678

    展开全文
  • STM32(Cortex-M3)中有两个优先级的概念——抢占式优先级和响应优先级,有人把响应优先级称作'亚优先级'或'副优先级',每个中断源都需要被指定这两种优先级。
  • ...STM32(Cortex-M3)中有两个优先级的概念:抢占式优先级和响应优先级,也把响应优先级称作“亚优先级”或“副优先级”,每个中断源都需要被指定这两种优先级。 1. 何为占先式优先级(pre-empt...

    转自:http://www.21ic.com/embed/jiaocheng/sheji/201209/5634.html

    一、STM32 (Cortex-M3) 中的优先级概念

    STM32(Cortex-M3)中有两个优先级的概念:抢占式优先级和响应优先级,也把响应优先级称作“亚优先级”或“副优先级”,每个中断源都需要被指定这两种优先级。

    1. 何为占先式优先级(pre-emption priority)

    高占先式优先级的中断事件会打断当前的主程序/中断程序运行—抢断式优先响应,俗称中断嵌套。

    2. 何为副优先级(subpriority)

    • 在占先式优先级相同的情况下,高副优先级的中断优先被响应;
    • 在占先式优先级相同的情况下,如果有低副优先级中断正在执行, 高副优先级的中断要等待已被响应的低副优先级中断执行结束后才能得到响应—非抢断式响应(不能嵌套)

    3. 判断中断是否会被响应的依据

    首先是占先式优先级,其次是副优先级;

    占先式优先级决定是否会有中断嵌套;

    Reset、NMI、Hard Fault 优先级为负(高于普通中断优先级)且不可调整。

    4. 优先级冲突的处理

    具有高抢占式优先级的中断可以在具有低抢占式优先级的中断处理过程中被响应,即中断的嵌套,或者说高抢占式优先级的中断可以嵌套低抢占式优先级的中断。

    当两个中断源的抢占式优先级相同时,这两个中断将没有嵌套关系,当一个中断到来后,如果正在处理另一个中断,这个后到来的中断就要等到前一个中断处理完之后才能被处理。如果这两个中断同时到达,则中断控制器根据他们的响应优先级高低来决定先处理哪一个;如果他们的抢占式优先级和响应优先级都相等,则根据他们在中断表中的排位顺序决定先处理哪一个。

    5. Cortex-M3中对中断优先级的定义

    既然每个中断源都需要被指定这两种优先级,就需要有相应的寄存器位记录每个中断的优先级;在Cortex-M3中定义了8个比特位用于设置中断源的优先级这8个比特位可以有8种分配方式,如下:

    所有8位用于指定响应优先级

    • 最高1位用于指定抢占式优先级,最低7位用于指定响应优先级
    • 最高2位用于指定抢占式优先级,最低6位用于指定响应优先级
    • 最高3位用于指定抢占式优先级,最低5位用于指定响应优先级
    • 最高4位用于指定抢占式优先级,最低4位用于指定响应优先级
    • 最高5位用于指定抢占式优先级,最低3位用于指定响应优先级
    • 最高6位用于指定抢占式优先级,最低2位用于指定响应优先级
    • 最高7位用于指定抢占式优先级,最低1位用于指定响应优先级

    这就是优先级分组的概念。

    6. stm32中对中断优先级的定义

    Cortex-M3允许具有较少中断源时使用较少的寄存器位指定中断源的优先级,因此STM32把指定中断优先级的寄存器位减少到4位,这4个寄存器位的分组方式如下:

    • 第0组:所有4位用于指定响应优先级
    • 第1组:最高1位用于指定抢占式优先级,最低3位用于指定响应优先级
    • 第2组:最高2位用于指定抢占式优先级,最低2位用于指定响应优先级
    • 第3组:最高3位用于指定抢占式优先级,最低1位用于指定响应优先级
    • 第4组:所有4位用于指定抢占式优先级

     

     

    AIRC(Application Interrupt and Reset Register)寄存器中有用于指定优先级的 4 bits。这4个bits用于分配preemption优先级和sub优先级,在STM32的固件库中定义如下:

    /* Preemption Priority Group */
    #define NVIC_PriorityGroup_0 ((u32)0x700) /* 0 bits for pre-emption priority
    4 bits for subpriority */
    #define NVIC_PriorityGroup_1 ((u32)0x600) /* 1 bits for pre-emption priority
    3 bits for subpriority */
    #define NVIC_PriorityGroup_2 ((u32)0x500) /* 2 bits for pre-emption priority
    2 bits for subpriority */
    #define NVIC_PriorityGroup_3 ((u32)0x400) /* 3 bits for pre-emption priority
    1 bits for subpriority */
    #define NVIC_PriorityGroup_4 ((u32)0x300) /* 4 bits for pre-emption priority
    0 bits for subpriority */

     

    可以通过调用STM32的固件库中的函数NVIC_PriorityGroupConfig()选择使用哪种优先级分组方式,这个函数的参数有下列5种:

    • NVIC_PriorityGroup_0 => 选择第0组
    • NVIC_PriorityGroup_1 => 选择第1组
    • NVIC_PriorityGroup_2 => 选择第2组
    • NVIC_PriorityGroup_3 => 选择第3组
    • NVIC_PriorityGroup_4 => 选择第4组

    接下来就是指定中断源的优先级,下面以一个简单的例子说明如何指定中断源的抢占式优先级和响应优先级

    // 选择使用优先级分组第1组
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
    // 使能EXTI0中断
    NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQChannel;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; // 指定抢占式优先级别1
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; // 指定响应优先级别0
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);
    // 使能EXTI9_5中断
    NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQChannel;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; // 指定抢占式优先级别0
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; // 指定响应优先级别1
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);

     

    --------------------------------------------------------------------------------

    要注意的几点是:

    1. 如果指定的抢占式优先级别或响应优先级别超出了选定的优先级分组所限定的范围,将可能得到意想不到的结果;

    2. 抢占式优先级别相同的中断源之间没有嵌套关系;

    3. 如果某个中断源被指定为某个抢占式优先级别,又没有其它中断源处于同一个抢占式优先级别,则可以为这个中断源指定任意有效的响应优先级别。

    二、开关总中断

    在STM32/Cortex-M3中是通过改变CPU的当前优先级来允许或禁止中断。

    PRIMASK位:只允许NMI和hard fault异常,其他中断/异常都被屏蔽(当前CPU优先级=0)。

    FAULTMASK位:只允许NMI,其他所有中断/异常都被屏蔽(当前CPU优先级=-1)。

    在STM32固件库中(stm32f10x_nvic.c和stm32f10x_nvic.h) 定义了四个函数操作PRIMASK位和FAULTMASK位,改变CPU的当前优先级,从而达到控制所有中断的目的。

    • 下面两个函数等效于关闭总中断
    void NVIC_SETPRIMASK(void);
    void NVIC_SETFAULTMASK(void);

     

    • 下面两个函数等效于开放总中断
    void NVIC_SETPRIMASK(void);
    void NVIC_SETFAULTMASK(void);

     

    上面两组函数要成对使用,但不能交叉使用。

    例如:

    • 第一种方法:
    NVIC_SETPRIMASK(); //关闭总中断
    NVIC_RESETPRIMASK();//开放总中断

     

    • 第二种方法:
    NVIC_SETFAULTMASK(); //关闭总中断
    NVIC_RESETFAULTMASK();//开放总中断

     

    • 常常使用:
    NVIC_SETPRIMASK(); // Disable Interrupts
    NVIC_RESETPRIMASK(); // Enable Interrupts

     

    -------------------------------------------------------------------------------------------------

    补充:

    • 可以用:
    #define CLI() __set_PRIMASK(1)
    #define SEI() __set_PRIMASK(0)

     

    来实现开关总中断的功能

    转载于:https://www.cnblogs.com/aaronLinux/p/11108182.html

    展开全文
  • 目录 几个概念: 1、USART初始化 2、USART中断配置---内嵌中断向量控制器 3、一种串口发送格式化数据方法 ...几个概念: ...内嵌向量中断控制器:Nested Vectored Interrupt ...中断向量是指早期微机系统中将由硬件...
  • 中断的概念

    2017-02-16 20:09:16
    向量中断:cpu为不同的中断分配中断号,当中断发生时,自动调到中断号相应地址执行; 非向量中断:共享一个入口地址,进入后通过软件中断标志来识别到底是哪个中断。 非向量中断程序 int int_src = read_int_...
  • STM32(Cortex-M3)中有两个优先级的概念——抢占式优先级和响应优先级,有人把响应优先级称作'亚优先级'或'副优先级',每个中断源都需要被指定这两种优先级。 具有高抢占式优先级的中断可以在具有低抢占式优先级的...
  • 文章目录前言一、NVIC 简介1.NVIC 寄存器简介2.NVIC 中断配置...NVIC 是嵌套向量中断控制器,控制着整个芯片中断相关功能,它跟内核紧密耦合,是内核里面一个外设。 1.NVIC 寄存器简介 NVIC 结构体定义,来自固件.
  • 本章为系列指南第三章,这一章将会在正式进入以太网配置和使用之前,复习一下STM32中断以及中断向量,因为我们以后要在中断中响应以太网收包。 中断—嵌入式中多线程 从51单片机到ARM架构32位微芯片,到...
  • STM32中断的概念

    2020-08-07 09:09:07
    中断,个人理解即为一个突发任务打断了正在进行任务。 中断分为两类:1.系统中断,体现在内核。 2.外部中断,体现在外设...NVIC(向量中断控制器),是一个内核外设,通过NVIC管理内核以及片上外设的中断。 ...
  • IAR环境下编写STM8的中断函数,对于中断向量的概念、以及编程处理方法不太好理解,这篇文章总结了几个关键的中断编程技巧,知此文可以不用看搜索其他相关文章了。 1. STM8 中断向量表 首先清楚stm8的中断向量表,下...
  • STM32 中断相关概念

    2020-10-16 14:09:24
    STM32中断有两个密切的概念:中断优先级和中断向量的优先级组。 优先级 抢占式优先级和响应优先级。响应优先级也称作亚优先级或副优先级。高抢占式优先级的中断可以嵌套进低抢占式的中断。 两个库函数的设置: 抢占...
  • 嵌套的向量中断控制器(NVIC)

    千次阅读 2017-02-27 18:53:17
    1.ARM cortex_m3 内核支持 256 个中断(16 个内核+240 外部)和可编程 256 级中断优先级设置,与其相关的中断控制和中断优先级控制寄存器(NVIC、SYSTICK 等)也都属于cortex_m3 内核部分。...
  • 中断概念

    千次阅读 2010-12-04 13:59:00
     确定与中断或异常关联的向量i (0£i£255)2. 寻找向量对应处理程序3. 保存当前“工作现场”,执行中断或异常处理程序4. 处理程序执行完毕后,把控制权交还给控制单元5. 控制单元恢复现场,返回继续执行...
  • STM32(Cortex-M3)中有两个优先级的概念:抢占式优先级和响应优先级,也把响应优先级称作“亚优先级”或“副优先级”,每个中断源都需要被指定这两种优先级。
  • 框前面数字是中断向量号 这个图并不完整,比如计时器/定时器功能设置没画出来 看外部中断 串口中断标志位必须通过软件置0,其他好像是自动,不嫌麻烦就都用软件置0 外部中断代码 低电平触发 #include <...
  •  STM32(Cortex-M3)中有两个优先级的概念:抢占式优先级和响应优先级,也把响应优先级称作“亚优先级”或“副优先级”,每个中断源都需要被指定这两种优先级。 1. 何为占先式优先级(pre-emption priority)  高...
  • STM32(Cortex-M3)中有两个优先级的概念:抢占式优先级和响应优先级,也把响应优先级称作“亚优先级”或“副优先级”,每个中断源都需要被指定这两种优先级。 1. 何为占先式优先级(pre-emption priority) 高占先式...
  • STM32 嵌套向量中断控制器NVIC学习

    千次阅读 2016-12-10 13:27:32
    STM32中有两个优先级的概念:抢占式优先级和响应优先级(也叫副优先级)。 他们的特性是: 1:高抢占式优先级的中断可以嵌套在低抢占式优先级的中断中:,即低抢占式优先级的中断可以被高抢占式优先级的中断打断; 2...
  • STM32 的中断向量具有两个属性,一个为抢占属性,另一个为响应属性, 其属性编号越小,表明它优先级别越高。 抢占,是指打断其它中断属性,即因为具有这个属性,会出现嵌套中断 (在执行中断服务函数 A 过程...
  • 中断系统8.1 中断基本概念8.1.1 中断概念的引入及描述中断方式示意(以输入中断为例)**中断**定义8.1.2 中断源及中断分类中断分类8.1.3 中断类型码中断类型码中断向量中断向量表中断向量表设置**中断向量表...
  • 虽说接触了好久单片机或者说嵌入式开发,不过对于有些概念还是比较模糊,因此此系列将会从一些零碎小知识点出发,慢慢遍历整张嵌入式开发地图。这次先来看一下中断向量表。至于为什么会提到中断向量表,主要...

空空如也

空空如也

1 2 3 4 5 ... 11
收藏数 217
精华内容 86
关键字:

中断向量的概念