中断优先级以及中断嵌套

中断优先级以及中断嵌套

中断优先级以及中断嵌套

中断优先级有两种,叫默认优先级和嵌套优先级,假如A,B两个中断,如果A比B 嵌套优先级(通过优先级寄存器设置)更高,就不需要看默认优先级了,A、B同时发生中断时A中断先执行而B后执行,而且B中断执行之间A可以抢断(嵌套)B的中断服务程序,B不可以抢断A;而如果嵌套优先级一样的话,只是A默认优先级比B更高(不需要设置),只能支持A、B同时中断时A先执行,而A不能嵌套B了,有的CPU甚至硬件上不支持嵌套,需要模拟嵌套,这个跟CPU平台有关。

关于嵌套的寄存器备份是这样进行的,进入一级中断便进行一次全套寄存器的压栈操作,压栈是把寄存器里面的值保存到栈区(属于内存区域,而并非你说的后背状态寄存器SPSR,其实后背状态寄存器SPSR也要一起压入栈区),每压入一个寄存器,SP会移动相应的距离,不会重叠;每退出一级中断便进行一次全套寄存器的出栈操作,这样就实现了保护现场和恢复现场。可以通过编译器反汇编码窗口查看中断压栈、出栈的实现。

中断管理函数

中断管理函数 CM3内核支持256个中断,其中包含了16个内核中断和240个外部中断,并且具有256级的可编程中断设置。但STM32并没有使用CM3内核的全部东西,而是只用了它的一部分。STM32有76个中断,包括16个内核中断和60个可屏蔽中断,具有16级可编程的中断优先级。而我们常用的就是这60个可屏蔽中断,所以我们就只针对这60个可屏蔽中断进行介绍。 在MDK内,与NVIC相关的寄存器,MDK为其定义了如下的结构体: typedef struct { vu32 ISER[2]; u32 RESERVED0[30]; vu32 ICER[2]; u32 RSERVED1[30]; vu32 ISPR[2]; u32 RESERVED2[30]; vu32 ICPR[2]; u32 RESERVED3[30]; vu32 IABR[2]; u32 RESERVED4[62]; vu32 IPR[15]; } NVIC_TypeDef; STM32的中断在这些寄存器的控制下有序的执行的。了解这些中断寄存器,你才能方便的使用STM32的中断。下面重点介绍这几个寄存器: ISER[2]:ISER全称是:Interrupt Set-Enable Registers,这是一个中断使能寄存器组。上面说了STM32的可屏蔽中断只有60个,这里用了2个32位的寄存器,总共可以表示64个中断。而STM32只用了其中的前60位。ISER[0]的

bit0~bit31分别对应中断0~31。ISER[1]的bit0~27对应中断32~59;这样总共60个中断就分别对应上了。你要使能某个中断,必须设置相应的ISER位为1,使该中断被使能(这里仅仅是使能,还要配合中断分组、屏蔽、IO口映射等设置才算是一个完整的中断设置)。具体每一位对应哪个中断,请参考 stm32f10x_nvic..h里面的第36行处。 ICER[2]:全称是:Interrupt Clear-Enable Registers,是一个中断除能寄存器组。该寄存器组与ISER的作用恰好相反,是用来清除某个中断的使能的。其对应位的功能,也和ICER一样。这里要专门设置一个ICER来清除中断位,而不是向ISER写0来清除,是因为NVIC的这些寄存器都是写1有效的,写0是无效的。具体为什么这么设计,请看《CM3权威指南》第125页,NVIC概览一章。 ISPR[2]:全称是:Interrupt Set-Pending Registers,是一个中断挂起控制寄存器组。每个位对应的中断和ISER是一样的。通过置1,可以将正在进行的中断挂起,而执行同级或更高级别的中断。写0是无效的。 ICPR[2]:全称是:Interrupt Clear-Pending Registers,是一个中断解挂控制寄存器组。其作用与ISPR相反,对应位也和ISER是一样的。通过设置1,可以将挂起的中断接挂。写0无效。 IABR[2]:全称是:Active Bit Registers,是一个中断激活标志位寄存器组。对应位所代表的中断和ISER一样,如果为1,则表示该位所对应的中断正在被执行。这是一个只读寄存器,通过它可以知道当前在执行的中断是哪一个。在中断执行完了由硬件自动清零。 IPR[15]:全称是:Interrupt Priority Registers,是一个中断优先级控制的寄存器组。这个寄存器组相当重要!STM32的中断分组与这个寄存器组密切相关。IPR寄存器组由15个32bit的寄存器组成,每个可屏蔽中断占用8bit,这样总共可以表示15*4=60个可屏蔽中断。刚好和STM32的可屏蔽中断数相等。IPR[0]的[31~24],[23~16],[15~8],[7~0]分别对应中中断3~0,依次类推,总共对应60个外部中断。而每个可屏蔽中断占用的8bit并没有全部使用,而是只用了高4位。这4位,又分为抢占优先级和子优先级。抢占优先级在前,子优先级在后。而这两个优先级各占几个位又要根据SCB->AIRCR中中断分组的设置来决定。 这里简单介绍一下STM32的中断分组:STM32将中断分为5个组,组0~4。该分组的设置是由SCB->AIRCR寄存器的bit10~8来定义的。具体的分配关系如下表所示:

易错试题

单片机应用习题 一.选择题 1.若单片机的振荡频率为6MHz,设定时器工作在方式1需要定时1ms,则定时器初值应为 ( C )。 A.500 B.1000 C.216-500 D.216-1000 2.定时器1工作在计数方式时,其外加的计数脉冲信号应连接到( D )引脚。 A.P3.2 B.P3.3 C.P3.4 D.P3.5 3.当外部中断请求的信号方式为脉冲方式时,要求中断请求信号的高电平状态和低电平状态都应至少维持( A )。 A.1个机器周期 B.2个机器周期 C.4个机器周期 D.10个晶振周期 4.定时器若工作在循环定时或循环计数场合,应选用( C )。 A.工作方式0 B.工作方式1 C.工作方式2 D.工作方式3 5.串行口每一次传送( A )字符。 A.1个 B.1串 C.1帧 D.1波特 6. 单片机应用程序一般存放在( B ) a)RAM b)ROM c)寄存器 d)CPU 7. .8031单片机中既可位寻址又可字节寻址的单元是( A) a)20H b)30H c)00H d)70H 8. 、在串行通信中, 8031中发送和接收的寄存器是( B) 。 A.TMOD B. SBUF C. SCON D. DPTR 9. 波特的单位是(B) A. 字符/秒 B. 位/秒 C. 帧/秒 D. 字节/秒 10. 存储器的地址范围是0000H~0FFFH,它的容量为( D )。 (A)1KB (B) 2KB (C) 3KB (D) 4KB 11. MCS-51的相对转移指令的最大负跳变距离(B ) A.2KB B. 128B C. 127B D. 256B 12. 某种存储器芯片是8KB*4/片,那么它的地址线根数是( C ) A.11根 B.12根 C. 13根 D. 14根 13. 关于MCS-51的堆栈操作,正确的说法是( C ) A.先入栈,再修改栈指针 B.先修改栈指针,再出栈 C. 先修改栈指针,在入栈 D.以上都不对 14 .PC中存放的是( A ) A.下一条指令的地址 B. 当前正在执行的指令 C.当前正在执行指令的地址 D.下一条要执行的指令 15. 控制串行口工作方式的寄存器是( C ) A.TCON B.PCON C.SCON D.TMOD 16. MCS-51上电复位后,SP的内容应为( B ) A.00H B.07H C.60H D.70H 17. 使用8255可以扩展出的I/O口线是(B) (A)16根(B)24根(C)22根(D)32根

中断

填空题 (1)51系列单片机5个中断源的中断入口地址分别是INT0:;INTl:;T0:;T1:;串行口:; (2)在CPU未执行同级或更高优先级中断服务程序的情况下,中断响应等待时间最少需要个机器周期,最长需要个机器周期。 (3)中断嵌套与子程序嵌套的区别在于:一是子程序嵌套是在程序中事先安排好的;而中断嵌套是:二是子程序嵌套无次序限制,而中断嵌套只允许。 (4)CPU未执行中断程序,中断响应时间最短需个机器周期,最长需个机器周期. 选择(1)CPU响应中断后,必须用软件清除中断请求标志的有( )。 A. INT0/INT1采用电平触发方式B.INT0/INT1采用边沿触发方式 C.定时/计数器T0/T1中断D.串行口中断TI/RI (2)下列中断优先顺序排列,不可能实现的有( )。 A.T1、T0、。INT0、INT1、串行口B.INT0、T1、T0、INT1、串行口C.INT0、INT1、串行口、T0、T1 D.INT1、串行口、INT0、T0、T1 提示:将中断请求排序分成两部分,如果每部分都满足同级优先次序,则设置能实现,否则设置不能实现。 判断对错 (1)不同中断源之间可以互相中断。( ) (2)不同优先级的中断源之间可以互相中断。( ) (3)INT0、INT1、T0、串行口、T1中断优先排列顺序不能实现。( ) (4)T0、Tl、INT0、INT1、串行口中断优先排列顺序能实现。( ) (5)串行口、TO、INT0、INT1、T1中断优先排列顺序不能实现。( ) (6)串行口、INT0、T0、INTl、T1中断优先排列顺序能实现。( ) (7)INT0、INT1、串行口、T0、T1中断优先排列顺序不能实现。( ) (8)INT0、T1、INT1、T0、串行口中断优先排列顺序能实现。( ) 简答 (1)编写中断程序时,通常需要在中断入口地址区间设置一条跳转指令,跳转到中断服务程序的实际入口处。为什么要这样做? (2)什么叫中断嵌套?中断嵌套有什么限制?中断嵌套与子程序嵌套有什么区别? (3)在51系列单片机5个中断源中,中断请求标志是如何清除的? (4)在5l系列单片机中,哪几个特殊功能寄存器与中断控制有关? (5)中断源中断优先级别设置能否实现,取决于什么因素?并说明理由。 (6)51系列单片机中断优先级和中断优先权有什么区别?如何设置中断优先级? (7)在5l系列单片机中,中断是如何嵌套的? (8)在5l系列单片机中,如果CU正在执行RETI或访问IE、IP指令,则中断不能立即响应,为什么? (9)在51系列单片机中,外中断的触发方式有哪几种?如果采用电平触发方式,需要注意什么?

实验四单片机中断优先级实验

实验四单片机中断优先级实验 一、实验目的 1.理解AT89C51单片机中断优先级和优先权。 2.用PROTEUS设计、仿真基于AT89C51单片机的中断优先级实验。 3.掌握中断编程。 4.掌握发光二极管的控制方法。 二、实验要求 单片机主程序控制P0口数码管循环显示0~8;外中断(INT0)、外中断(INT1)发生时分别在P2、P1口依次显示0~8;INT1为高优先级,INT0为低优先级。 三、电路设计 1.从 ① ②RES、 ③ ④CAP、CAP-ELEC:电容、电解电容; ⑤CRYSTAL:晶振; ⑥BUTTON:按钮。 2.放置元器件 3.放置电源和地 4.连线 5.元器件属性设置 6.电气检测 四、源程序设计、生成目标代码文件 1.流程图 2.源程序设计

通过菜单“source→Add/Remove Source Files…”新建源程序文件:。 通过菜单“source→”,打开PROTEUS提供的文本编辑器SRCEDIT,在其中编辑源程序。 程序编辑好后,单击按钮存入文件。 3.源程序编译汇编、生成目标代码文件 通过菜单“source→Build All”编译汇编源程序,生成目标代码文件。若编译失败,可对程序进行修改调试直至汇编成功。 五、PROTEUS仿真 1.加载目标代码文件 2.全速仿真 单击按钮,启动仿真。 (1)低优先级INT0中断主程序:当主程序运行时,单片机控制与P0口相接的数码管循环显示1~8;而P1、P2口的数码管不显示。当前主程序控制P0口显示“8”的时刻单击“低优先级输入”按钮,触发INT0如图所示,INT0服务程序控制P2口依次显示1~8,当前显示“2”。 (2)高优先级INT1中断低优先级INT0;在上一步的基础上,即主程序被INT0中断在P0口输出“8”,而在INT0服务程序在P2口输出“2”的时刻,单击“高优先级输入”按钮,触发高优先级INT1,所在INT0被中断在显示“2”,INT1服务程序控制P1口依次显示1~8。

第三章复习题

1.什么是中断和中断系统?其主要功能是什么?1.解:当CPU正在处理某件事情的时候,外部发生的某一事件请求CPU迅速去处理, CPU 暂时中止当前的工作,转去处理所发生的事件,处理完该事件以后,再回到原来被中止的地方,继续原来的工作。这种过程为中断,实现这种服务的部件称为中断系统。 功能:①实时处理,能对外界异步发生的事件作出及时的处理。②完全消除了CPU在查询方式中的等待现象,大大提高了CPU的工作效率。③实现实时控制。 2.什么是是中断优先级?中断优先级处理的原则是什么?2.解:中断优先级是CPU响应中断的先后顺序。中断优先处理的原则是: (1)先响应优先级高的中断请求,再响应优先级低的中断请求。 (2)如果一个中断请求己被响应,同级的其他中断请求将被禁止。 (3)如果同级的多个中断请求同时出现,CPU则按单片机内部的自然优先级顺序响应各中断请求。 单片机内部自然优先级顺序(由高到低)为: 外部中断0→定时器0中断→外部中断l→定时器1中断→串行接口中断。 3.8051有几个中断优先级?如何对各中断请求进行控制?3.解:(1)80C51有以下中断源: ①外部中断0()请求,低电平有效。 ②外部中断1()请求,低电平有效。 ③ T0:定时器/计数器0溢出中断请求。 ④ T1:定时器/计数器1溢出中断请求。 ⑤ TI/RI:串行接口中断请求。 (2)通过对特殊功能寄存器TCON、SCON、IE、IP的各位进行置位或复位等操作,可实现对各种中断的控制功能。 4.简述MCS51单片机的中断响应过程。4.解:单片机一旦响应中断请求, 就由硬件完成以下功能: (1)根据响应的中断源的中断优先级, 使相应的优先级状态触发器置1; (2)执行硬件中断服务子程序调用, 并把当前程序计数器PC的内容压入堆栈,保护断点,寻找中断源; (3)清除相应的中断请求标志位(串行口中断请求标志RI和TI除外); (4)把被响应的中断源所对应的中断服务程序的入口地址(中断矢量)送入PC, 从而转入相应的中断服务程序。 (5)中断返回,程序返回断点处继续执行。 5.8051怎么管理中断?怎样开放和禁止中断?怎么设置优先级?5.解:(1)由中断源提出中断请求,由中断控制允许控制决定是否响应中断,如果允许响应中断,则CPU按设定好的优先级的顺序响应中断。如果是同一优先级的中断,则按单片机内部的自然优先级顺序(外部中断0→定时器0中断→外部中断l→定时器1中断→串行接口中断)响应中断。 CPU响应中断请求后,就立即转入执行中断服务程序。保护断点、寻找中断源、中断处理、中断返回,程序返回断点处继续执行。(2)由中断允许寄存器IE控制开放和禁止中断。欲开放某一中断,则应先开放总中断允许(EA置1),然后开放相应中断的中断允许(相应位置1);若要要禁止中断,则EA置O即可。 (3)由中断优先级控制寄存器IP控制中断优先级,相应位置1,则设为高级中断,置0则为低级。其中:PS为串行中断优先级,PTl(0)为定时中断1(0)优先级,PXl(0)外部中断1(0)优先级。 6.8051在什么条件下可响应中断?6.解:(1)有中断源发出中断请求。 (2)中断总允许控制位EA=l, CPU开放总中断。 (3)申请中断的中断源的中断允许位为1,即该中断没有被屏蔽。 (4)无同级或更高级中断正在服务。 (5)当前指令周期已经结束。(6)若现行指令为RETI或访问IE或IP指令时,读指令以及紧接着的另一条指令已执行完毕。 满足以上条件,则CPU响应响应中断元的中断请求。 7.请写出为低电平/边沿触发的中断系统初始化程序。 7.解:ORG 0000H LJMP MAIN ORG 0013H LJMP INT1 ORG 0030H MAIN: SETB EA SETB EX1 SETB PX1 CLR IT1 JMP $ INT1: RETI END 8.说明MCS-51单片机响应中断后,中断服务的入口地址。8.解:中断服务程序的入口地址如下表: 中断源中断矢量 外部中断0 0003H 定时器T0中断 000BH 外部中断1 0013H 定时器T1中断 001BH 串行口中断 0023H 9.8051单片机外部中断源有几种触发中断请求的方法?如何实现中断请求?9.解:有两种方式:电平触发和边沿触发。 (1)电平触发方式:CPU在每个机器周期的S5P2期间采样外部中断引脚的输人电平。若为低电平,便置IEl(IEO)为“1” ,申请中断;若外部中断引脚为高电平,则IEl(IEO)清零。 (2)边沿触发方式:CPU在每个机器周期的S5P2期间采样外部中断请求引脚的输人电平。如果在相继的两个机器周期采样过程中,一个机器周期采样到外部中断请求为高电平,接着下一个机器周期采样到外部中断请求为低电平,则使IEl(IEO)置1,申请中断;否则,IEl(1E0)置0。 10.8051单片机内部有几个定时器/计数器?它们是由哪些特殊功能寄存器组成? 10.解:80C51单片机片内设有2个定时器/计数器:定时器/计数器T0和定时器/计数器T1,T0由TH0、TL0组成,T1由TH1、TLl组成。T0、T1由特殊功能寄存器TMOD、TCON控制。 11.8051单片机定时器/计数器作定时和计数使用时,其计数脉冲分别由谁提供? 11.解:作定时器时,计数脉冲来自单片机内部,是由单片机晶振经过12分频后获得的脉冲。作为计数器时,计数脉冲来自单片机的外部,即T0与T1两个引用的输入脉冲。 12.定时器/计数器的4种工作方式个有何特点?如何选择设定? 12.解:(1) 工作方式O: 13位定时器/计数器工作方式。 工作方式0由TH0的全部8位和TL0的低5位构成13位加1计数器,此时TL0的高3位未用。在计数过程中,当TL0的低5位溢出时,都会向TH0进位,而全部13位计数器溢出时,则计数器溢出标志位TF0置位。 (2) 工作方式l: 16位的定时器/计数器方式。 工作方式1由TH0作为高8位,TL0为低8位,在计数过程中,当全部16位计数器溢出时,则计数器溢出标志位TF0置位。 (3) 工作方式2: 自动重新装入计数初值的8位定时器/计数器工作方式。 工作方式2的16位定时器/计数器被拆成两个8位寄存器TH0和TL0,CPU在对它们初始化时必须装入相同的定时器/计数器初值。定时器/计数器启动后,TL0按8位加1计数器计数,当TL0计数溢出时,置位TF0的同时又从预置寄存器TH0中重新获得计数初值并启动计

TIM2定时中断嵌套sytick定时器中断异常

现象: TIM2设置10Ms定时中断,运行delay(2),程序就停滞了 分析: Sytick滴答定时器中断优先级是占线式的(实践的出来的血的经验),因为中断优先级组配置为0时,虽然TIM2的响应式优先级为2,应该说sycik的优先级已经是0了,可以走delay中断的,但是还是不行。 把中断优先级类型配置为4,即全部是抢占式优先级式,TIM2也开始走了,delay也开始走了。 这个折腾很久的,systick在R008文档中说的太少,网友的博客说了很多,只是提到systick 的中断优先级可以改,但是么有说他是抢占式的。 static __INLINE uint32_t SysTick_Config(uint32_t ticks) { if (ticks > SysTick_LOAD_RELOAD_Msk) return (1); /* Reload value impossible */ SysTick->LOAD = (ticks & SysTick_LOAD_RELOAD_Msk) - 1; /* set reload register */ // NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1); /* set Priority for Cortex-M0 System Interrupts */ NVIC_SetPriority (SysTick_IRQn, 0); SysTick->VAL = 0; /* Load the SysTick Counter Value */ SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | SysTick_CTRL_TICKINT_Msk | SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ return (0); /* Function successful */ } NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1 ; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; NVIC_Init( &NVIC_InitStructure);

STM32外部中断以及中断优先级

外部中断的初始化过程: 1.初始化IO为输入(可以设置上拉,下拉,浮空) 2.开启IO复用时钟 3.开启与该IO相对的线上(详解下) 4.配置NVIC,使能中断 5.编写中断服务函数 外部中断: Stm32中总共有19个外部中断 包括: 线0-15:IO输入中断(每条线上最多有7个IO,如GPIOA~GPIOG,但是每一条线每次只允许同时连接到一个IO)

线16:PVD 线17:RTC 线18:USB 关于优先级: CM3中内核支持256个中断(16个内核+240外部)和可编程256级中断优先级的设置

Stm32目前支持84个中断(16个内核+68个外部,注:不是指68个外部中断),16级可编程优先级(优先级设置寄存器中使用了4位)

注意:其中外部中断5-9和中断10-15向量存放在一起 优先级: 数值低的优先级要高于数值高的!!!!!! 上电复位后,系统默认使用的是组0; 一个系统只能使用一组优先级组,不可使用多个,优先级的设置不能超过组的范围,否则会产生不可预计的错误 1.高抢先级的中断可以打断低优先级的中断响应,构成中断嵌套 2.相同抢先级的中断不可以构成嵌套,系统会优先响应子优先级高的

3.当2(n)个相同抢先优先级和相同子优先级的中断出现,STM32首先响应中断通道所对应的中断向量地址低的那个中断 4.0号抢先优先级的中断,可以打断任何中断抢先优先级为非0号的中断;1号抢先优先级的中断,可以打断任何中断抢先优先级为2、3、4号的中断;……;构成中断嵌套。 5.所有外部中断通道的优先级控制字PRI_n也都是0,68个外部中断通道的抢先优先级都是0号,没有子优先级的区分。不会发生任何的中断嵌套行为,谁也不能打断当前正在执行的中断服务。当多个中断出现后,则看它们的中断向量地址:地址越低,中断级别越高,STM32优先响应

STM32中EXTI(外部中断)和NVIC(嵌套向量中断)的关系

STM32中EXTI(外部中断)和NVIC(嵌套向量中断)的关 系 NVIC 是Cortex-M3 核心的一部分,关于它的资料不在《STM32 的技术参 考手册》中,应查阅ARM 公司的《Cortex-M3 技术参考手册》Cortex-M3 的向 量中断统一由NVIC 管理EXTI 是ST 公司在其STM32 产品上扩展的外中断控 制。它负责管理映射到GPIO 引脚上的外中断和片内几个集成外设的中断 (PVD,RTC alarm,USB wakeup,ethernet wakeup),以及软件中断。其输出最终被映射到NVIC 的相应通道。因此,配置EXTI 中断的过程必然包含对 NVIC 的配置,例如下面配置EXTI0 的过程,就要首先配置EXTI 控制器(使 能相应的中断线,选择中断/事件模式,触发边沿极性),然后再配置NVIC 控 制器(EXTI0 映射在NVIC 上的通道号,中断优先级,中断屏蔽状态): GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource0); EXTI_InitStructure.EXTI_Line = EXTI_Line0;EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; // or RisingEXTI_InitStructure.EXTI_LineCmd = ENABLE;EXTI_Init(&EXTI_InitStructure); NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;// EXTI0_IRQn is defined in stm32f10x.hNVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure); EXTI0_IRQn 的值,其实就是EXTI0 中断向量在中断向量表中的位置 (STM32 技术参考手册中断向量表Position 栏中的数值)

实验五--单片机中断优先级实验

实验五单片机中断优先级实验 一、实验目的 1.理解AT89C51单片机中断优先级和优先权。 2.用PROTEUS设计、仿真基于AT89C51单片机的中断优先级实验。 3.掌握中断编程。 4.掌握发光二极管的控制方法。 二、实验要求 单片机主程序控制P0口数码管循环显示0~8;外中断(INT0)、外中断(INT1)发生时分别在P2、P1口依次显示0~8;INT1为高优先级,INT0为低优先级。 三、电路设计 ④CAP、CAP-ELEC:电容、电解电容; ⑤CRYSTAL:晶振; ⑥BUTTON:按钮。

2.放置元器件 3.放置电源和地 4.连线 5.元器件属性设置 6.电气检测 四、源程序设计、生成目标代码文件 1.流程图 2.源程序设计 通过菜单“sourc e→Add/Remove Source Files…”新建源程序文件:DZC35.ASM。 通过菜单“sourc e→DZC35.ASM”,打开PROTEUS提供的文本编辑器SRCEDIT,在其中编辑源程序。 程序编辑好后,单击按钮存入文件DZC35.ASM。 3.源程序编译汇编、生成目标代码文件 通过菜单“sourc e→Build All”编译汇编源程序,生成目标代码文件。若编译失败,可对程序进行修改调试直至汇编成功。 五、PROTEUS仿真 1.加载目标代码文件 2.全速仿真 单击按钮,启动仿真。 (1)低优先级INT0中断主程序:当主程序运行时,单片机控制与P0

口相接的数码管循环显示1~8;而P1、P2口的数码管不显示。当前主程序控制P0口显示“8”的时刻单击“低优先级输入”按钮,触发INT0如图所示,INT0服务程序控制P2口依次显示1~8,当前显示“2”。 (2)高优先级INT1中断低优先级INT0;在上一步的基础上,即主程序被INT0中断在P0口输出“8”,而在INT0服务程序在P2口输出“2”的时刻,单击“高优先级输入”按钮,触发高优先级INT1,所在INT0被中断在显示“2”,INT1服务程序控制P1口依次显示1~8。 3.仿真调试 六、思考题: 1.说明单片机中共有哪几种中断,它们的默认优先级是什么? 2.怎样修改中断优先级?例如在本实验中要使TIMER1成为优先级最高的中断,该怎么处理?

STM32 中断优先级理解

CM3 内核支持256 个中断,其中包含了16 个内核中断和240 个外部中断,并且具有256级的可编程中断设置。但STM32 并没有使用CM3 内核的全部东西,而是只用了它的一部分。STM32 有84 个中断,包括16 个内核中断和68 个可屏蔽中断,具有16 级可编程的中断优先级。而我们常用的就是这68 个可屏蔽中断,但是STM32 的68 个可屏蔽中断,在STM32F103 系列上面,又只有60 个 (在107 系列才有68 个)。 在MDK 内,与NVIC 相关的寄存器,MDK 为其定义了如下的结构体: 点击(此处)折叠或打开 1.typedef struct 2.{ 3.vu32 ISER[2]; 4.u32 RESERVED0[30]; 5.vu32 ICER[2]; 6.u32 RSERVED1[30]; 7.vu32 ISPR[2]; 8.u32 RESERVED2[30]; 9.vu32 ICPR[2]; 10.u32 RESERVED3[30]; 11.vu32 IABR[2]; 12.u32 RESERVED4[62]; 13.vu32 IPR[15]; 14.} NVIC_TypeDef; STM32 的中断在这些寄存器的控制下有序的执行的。只有了解这些中断寄存器,才能了解STM32 的中断。下面简要介绍这几个寄存器: ISER[2]:I SER 全称是:Interrupt Set-Enable Registers,这是一个中断使能寄存器组。上面说了STM32F103 的可屏蔽中断只有60 个,这里用了 2 个32 位的寄存器,总共可以表示64 个中断。而STM32F103 只用了其中的前60 位。ISER[0]的bit0~bit31 分别对应中断0~31。ISER[1]的bit0~27 对应中断32~59;这样总共60 个中断就分别对应上了。你要使能某个中断,必须设置相应的ISER 位为1,使该中断被使能(这里仅仅是使能,还要配合中断分组、屏蔽、IO 口映射等设置才算是一个完整的中断设置)。具体每一位对应哪个中断,请参考stm32f10x_nvic..h 里面的第36 行处。 ICER[2]:全称是:Interrupt Clear-Enable Registers,是一个中断除能寄存器组。该寄存器组与ISER 的作用恰好相反,是用来清除某个中断的使能的。其对应位的功能,也和ICER 一样。这里要专门设置一个ICER 来清除中断位,而不是 向ISER 写0 来清除,是因为NVIC 的这些寄存器都是写 1 有效的,写0 是无效的。 ISPR[2]:全称是:Interrupt Set-Pending Registers,是一个中断挂起控制寄存器组。每个位对应的中断和ISER 是一样的。通过置1,可以将正在进行的中断挂起,而执行同级或更高级别的中断。写0 是无效的。

中断嵌套

中断嵌套 是指中断系统正在执行一个中断服务时,有另一个优先级更高的中断提出中断请求,这时会暂时终止当前正在执行的级别较低的中断源的服务程序,去处理级别更高的中断源,待处理完毕,再返回到被中断了的中断服务程序继续执行,这个过程就是中断嵌套。其实就是更高一级的中断的“加塞儿”,处理器正在执行着中断,又接受了更急的另一件“急件”,转而处理更高一级的中断的行为! 中断优先级?? ?在说到中断之前,我先来定义一下优先级,明白了什么是优先级,后面的阐述就容易明白了。实际上很多人都是混淆了优先级的含义,所以才觉得糊里糊涂。优先级高的中断源可以中断优先级低的中断服务程序,这就形成了中断服务程序中套着中断服务程序的情况,即形成了所谓的中断嵌套。MCU暂停现行程序而转去响应中断请求的过程称为中断响应;为使系统能及时响应并处理发生的所有中断,系统根据引起中断事件的重要性和紧迫程序,硬件将中断源分为若干个级别,称作中断优先级;中断的优先级有两个:查询优先级和执行优先级。什么是查询优级呢?我们从datasheet或书上看到的默认(IP寄存器不做设置,上电复位后为00H)的优先级:外部中断0> 定时/计数器0 > 外部中断1 > 定时/计数器1 > 串行中断或int0,timer0,int1,timer1,serial port 或INT0、T0、INT1、T1、UART 或PX0>PT0>PX1>PT1>PS>...... 其实都是查询优级。首先查询优先级是不可以更改和设置的。这是一个中断优先权排队的问题。是指多个中断源同时产生中断信号时,中断仲裁器选择对哪个中断源优先处理的顺序。而这与是否发生中断服务程序的嵌套毫不相干。当CPU查询各个中断标志位的时候,会依照上述5个查询优先级顺序依次查询,当数个中断同时请求的时候,会优先查询到高优查询先级的中断标志位,但并不代表高查询优先级的中断可以打断已经并且正在执行的低查询优先级的中断服务。例如:当计数器0中断和外部中断1(按查询优先级,计数器0中断>外部中断1)同时到达时,会进入计时器0的中断服务函数;但是在外部中断1的中断服务函数正在服务的情况下,这时候任何中断都是打断不了它的,包括逻辑优先级比它高的外部中断0计数器0中断。而中断的执行优先级就是你对IP寄存器的设置了。在2个优先级的情况下,某位为1,则相应的中断源为高优先级;为0,则为低优先级。关于中断的优先级有三条原则:1、CPU同时接收到几个中断时,首先响应优先级最高的中断请求;2、正在进行的中断过程不能被新的同级或低行优优先级的中断请求所中断;3、正在进行的低行优优先级中断服务,能被高行优优先级中断请求中断;若:同一执行优先级中的中断申请不止一个时,则有一个中断优先权排队问题。同一执行优先级的中断优先权排队,由中断系统硬件确定的自然优先级形成,优先权自高到低的顺序即:外部中断0>定时/计数0>外部中断1>定时/计数1>串行接口例如:设置IP =0x10,即设置串口中断为最高优先级,则串口中

单片机简答题

简答题: 1.MCS51的中断系统有几个中断源?几个中断优先级?中断优先级是如何控制的?在出现同级中断申请时,CPU按什么顺序响应(按由高级到低级的顺序写出各个中断源)?各个中断源的入口地址是多少? 答:MCS51单片机有5个中断源,2个中断优先级,中断优先级由特殊功能寄存器IP控制,在出现同级中断申请时,CPU按如下顺序响应各个中断源的请求:INT0、T0、INT1、T1、串口,各个中断源的入口地址分别是0003H、000BH、0013H、001BH、0023H。 2.已知单片机系统晶振频率为6MHz,若要求定时值为10ms时,定时器T0工作在方式1时,定时器T0对应的初值是多少?TMOD的值是多少?TH0=?TL0=?(写出步骤) 答:定时值为10ms时,定时器T0工作在方式1时,定时器T0对应的初值是1388H TMOD的值是00000001B,TH0=13H;TL0=88H。 3.MCS51系列单片机的内部资源有哪些?说出8031、8051和8751的区别。 答:MCS51系列单片机上有1个8位CPU、128B的RAM、21个SFR、4个并行口、1个串行口、2个定时计数器和中断系统等资源。8031、8051和8751的区别是8031内无ROM;8051内有4KB的掩膜ROM;8751内有4KB的EPROM。 1.如何正确使用P3口? 1.要点: (1)说明P3口有第一功能和第二功能的使用。 (2)P3口的第二功能各位线的含义。 (3)使用时应先按需要选用第二功能信号,剩下的口线才作第一功能I/O线用。 (4)读引脚数据时,必需先给锁存器输出“1”。 2.简述累加器的ACC的作用。 2.(1)8位专用寄存器。 (2)运算时存放一个操作数。 (3)运算后存放运算结果,所以称它为累加器。 3.简述寄存器间接寻址方式及其寻址范围。 3.(1)寄存器中存放的是操作数的地址,操作数是通过寄存器间接得到,这种寻址方式称为寄存器间接寻址方式。 (2)寻址范围: ①内部RAM低128单位,形式@Ri(i=0,1)。 ②外部RAM64K使用DPTR作间址寄存器,形式为@DPTR。 4.简述MCS-51单片机的中断入口地址。 4.中断入口地址为中断响应后PC的内容即中断服务的入口地址。 它们是:外部中断0 0003H 定时器T0中断000BH 外部中断1 0013H 定时器T1中断001BH 串行口中断0023H 5.简述串行数据传送的特点。 5.(1)传送按位顺序进行,速度慢。

关于ARM9的中断嵌套

NoInt EQU 0x80 //禁止IRQ中断 USR32Mode EQU 0x10 //用户模式 SVC32Mode EQU 0x13 //管理模式 SYS32Mode EQU 0x1f //系统模式 IRQ32Mode EQU 0x12 //中断模式 FIQ32Mode EQU 0x11 //快速中断模式 ;引入的外部标号在这声明 //IMPORT表示引用外部的信息 IMPORT OSIntCtxSw ;任务切换函数//引用外部的函数 IMPORT OSIntExit ;中断退出函数 IMPORT OSTCBCur ;UC/OS II正在运行的任务指针 IMPORT OSTCBHighRdy ; UC/OS II任务就绪表中级别最高的优先级 IMPORT OSIntNesting ;中断嵌套计数器 IMPORT StackUsr ;用户模式堆栈 IMPORT OsEnterSum ;开关中断的次数 CODE32 AREA IRQ,CODE,READONLY MACRO $IRQ_Label HANDLER $IRQ_Exception_Function EXPORT $IRQ_Label ; 输出的标号 IMPORT $IRQ_Exception_Function ; 引用的外部标号 $IRQ_Label SUB LR, LR, #4 ; 计算返回地址 //进入中断后,它的返回地址该怎么计算呢,可以这样来理解,因为它的指令流水线是3级的,即执行进入中断函数时,PC已经指向欲取值的指令即当前执行的地址+8;当已进入中断时,LR里面装的是PC,所以要想中断返回到正确的地址处,就必须把LR-4。 STMFD SP!, {R0-R3, R12, LR} ; 保存任务环境 //这里面为什么只把R0-R3,R12,LR保存呢,其它不用吗,是这样的,我们可以从你装的ADS1.2目录下的PDF文件夹里面的ADS_DeveloperGuide_D.PDF文件的2.2就可以发现r4-r11装的是局部变量,在进行函数跳转时,编译器它会自动保护它们的。 MRS R3, SPSR ; 保存状态 STMFD SP, {R3, SP, LR}^ ; 保存用户状态的R3,SP,LR,注意不能回写,前面一个SP 是IRQ模式的,后面一个SP是用户模式的,为什么不能回写呢,如果你回写的话,那么它保存的是用户的SP,显然是不行的。不知这样理解对不对。这里保存SP和LR的目的是为了嵌套, ; 正是因为没有回写,所以后面调整了SP ,调整指令是SUB SP, SP, #4*3 LDR R2, =OSIntNesting ; OSIntNesting++ 中断嵌套数+1 ;(相当于调用了一次中断进入函数OSIntEnter(),与后面的BL OSIntExit 形成呼应)LDRB R1, [R2] ADD R1, R1, #1 STRB R1, [R2] SUB SP, SP, #4*3 ;由于前面SP没有回写,保存了3个32位的寄存器,这里调整指针 ;做好弹出这三个数据的准备

简答

1.MCS51的中断系统有几个中断源?几个中断优先级?中断优先级是如何控制的?在出现同级中断申请时,CPU 按什么顺序响应(按由高级到低级的顺序写出各个中断源)?各个中断源的入口地址是多少? 答:MCS51单片机有5个中断源,2个中断优先级,中断优先级由特殊功能寄存器IP控制,在出现同级中断申请时,CPU按如下顺序响应各个中断源的请求:INT0、T0、INT1、T1、串口,各个中断源的入口地址分别是0003H、000BH、0013H、001BH、0023H。 3.MCS51系列单片机的内部资源有哪些?说出8031、8051 和8751的区别。 答:MCS51 系列单片机上有1 个8 位CPU、128B的RAM、21 个SFR、4 个并行口、1 个 串行口、2 个定时计数器和中断系统等资源。8031、8051和8751 的区别是8031内无ROM;8051 内有4KB的掩膜ROM;8751 内有4KB的EPROM。 1.如何正确使用P3 口?(1)说明P3口有第一功能和第二功能的使用。(2)P3口的第二功能各位线的含义。(3)使用时应先按需要选用第二功能信号,剩下的口线才作第一功能I/O 线用。(4)读引脚数据时,必需先给锁存器输出“1”。 2.简述累加器的ACC的作用。 (1)8位专用寄存器。(2)运算时存放一个操作数。(3)运算后存放运算结果,所以称它为累加器。 3.简述寄存器间接寻址方式及其寻址范围。 (1)寄存器中存放的是操作数的地址,操作数是通过寄存器间接得到,这种寻址方式称为寄存器间接寻址方式。 (2)寻址范围:①内部RAM 低128 单位,形式@Ri(i=0,1)。②外部RAM64K 使用DPTR作间址寄存器,形式为@DPTR。 1.单片机的特性主要有哪些? 答:单片机具有体积小、可靠性高、控制功能强、使用方便、性能价格比高、容易产品化等特点。 2.8031、8051、8751有何异同? 答:8051、8751 和8031均为8 位单片机,其内部结构是基本相同的。

多级嵌套的中断试验

一.实验目的 (1)掌握中断在计算机系统中的作用; (2)了解可以响应中断请求的条件和时刻,响应中断的过程和实现方案;理解使用中断隐指令的必要性; (3)了解中断处理的完整过程,开中断,关中断操作的作用,保存现场信息和恢复现场信息必须确保完整完成的含义和可行措施; (4)掌握确定中断向量,设计中断处理程序的操作步骤和实现方法;二.实验原理 1.1中断电路 TH-union教学机中断电路的总体组成,如下图所示: 图中IRQ0—IRQ2是3个中断请求源信号,分别对应实验箱上的三个中断请求 按钮,实验时,按下某个按钮表示发出相应的中断请求信号。这三级中断的 优先次序从低到高为IRQ0到IRQ2。 1.2中断处理在教学机中的具体实现 教学机的中断线路主要包括2片GAL、3个无锁按键、2片74LS374和若干插针。下面分别对这几部分进行简要介绍。 (1)3个无锁按键,提供中断请求的源信号 教学机支持3级中断发,这3个无锁按键作为3个中断源,从右到左依次为一、二、三级中断,对应的中断优先级编码P1、P0依次为01、10、11,优先级也依次升高。这3个无锁按键的引脚作为INTS GAL 和INTP GAL 的输入。

(2)INTS GAL,接受并记忆通过无锁按键给出的中断请求源信号 该芯片的输入信号除了3个无锁按键的6个引脚外,还有控制信号DC23、/GIR及系统时钟CK1。输出信号只有3个分别表示取指时3个无锁按键是否被按下,如果被按下,则相应的输出信号为高电平,否则为低电平。这3个输出信号被送至INTP GAL 。 该芯片实现的功能是,在每次取指前一拍(用DC2-3=1指示),将3个输出信号全部置零;在每次取指时(/GIR信号指示),都检测是否有中断请求(即是否有无锁按键被下),并用这3个输出引脚表示;在取指后以及整个指令执行过程中,这3个输出信号都将保持不变。 (3)INTP GAL,在条件成立时,向CPU 发出中断请求信号/INT(低电平有效) 该芯片实现的功能是: 1)对INTS GAL 送来的3个信号进行中断优先级编码,得到新请求的中断优先级,并与当前中断优先级P1、P0比较; 2)设置中断允许位INTE,该信号高电平表示允许中断,低电平表示禁止中断。当控制信号DC12~DC10=110时,INTE被置为1;DC12~DC10=111 时,INTE被置为0。 3)产生中断请求信号/INT,该信号低电平表示有(更高优先级)中断请求需要响应。 在中断允许位INTE=1时,如果新的中断优先级比当前中断优先级高,则给出中断请求信号/INT=0,否则/INT=1。 P1、P0也是状态寄存器的2个输入信号,可随同状态标志(C、Z、V、S)压入/弹出栈。 P1、P0也是INTVTL74LS374的2个输入信号,用来形成当前中断优先级在中断向量表中的首地址。 4)通过中断向量寄存器INTVTH 74LS374、INTVTL 74LS374硬性设置的中断向量分别为16进制的2104、2108和210C,对应的中断优先级分别是1、2、3。 三.实验内容及步骤 1.实验内容 (1)读懂教材中有关中断的概念,中断响应和中断处理的内容,了解这些功能在教学计算机中是如何实现的; (2)如果所用的教学计算机的基本指令集合中尚未实现中断隐指令,与处理中断有关的EI,DI和IRET三条指令,则需要首先实现中断隐指令和扩 展这三条指令;如果在基本指令集中已经实现了上述内容,则直接跳过 这一实验步骤。 (3)确定中断向量表地址。这个向量表是以XXX4为首地址的一段内存区(为每一个中断保留4个字的空间),用于存放对应每一个中断源的中 断处理程序的首地址,要在中断隐指令中把这里的选定的一个地址传送 到程序计数器PC中,之后就进入响应中断处理程序的执行过程。常用 的可行方案是在这里保存一条转移指令,实现依据不同的中断源转移到 不同的中断处理程序。教学机设置了3个中断源并为每个中断源分配了 不同的优先级,则3个终端程序入口地址分别为16进制的XXX4,XXX8

相关文档
最新文档