ImageVerifierCode 换一换
格式:PPT , 页数:43 ,大小:1.49MB ,
资源ID:10302025      下载积分:10 金币
验证码下载
登录下载
邮箱/手机:
图形码:
验证码: 获取验证码
温馨提示:
支付成功后,系统会自动生成账号(用户名为邮箱或者手机号,密码是验证码),方便下次登录下载和查询订单;
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/10302025.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请。


权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4009-655-100;投诉/维权电话:18658249818。

注意事项

本文(NVIC与中断控制.ppt)为本站上传会员【xrp****65】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

NVIC与中断控制.ppt

1、单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,*,NVIC,与中断控制,NVIC,概览,中断配置基础,中断使能与除能,中断的悬起与解悬,中断建立全过程的演示,软件中断,再论,SysTick,定时器,NVIC,概览,正如前文已经多次提到的,向量中断控制器,简称,NVIC,,是,CortexM3,不可分离的一部分,它与,CM3,内核的逻辑紧密耦合,有一部分甚至水乳交融在一起。,NVIC,与,CM3,内核同声相应,同气相求,相辅相成,里应外合,共同完成对中断的响应。,NVIC,的寄存器以存储器映射的方式来访问,除了包含控制寄存器和中断处理的控制逻辑之外,

2、NVIC,还包含了,MPU,的控制寄存器、,SysTick,定时器以及调试控制。本章中,我们将体检,NVIC,的中断处理控制逻辑。,MPU,与调试控制逻辑在后续章节中讨论。,NVIC,共支持,1,至,240,个外部中断输入(通常外部中断写作,IRQs,)。具体的数值由芯片厂商在设计芯片时决定。此外,,NVIC,还支持一个“永垂不朽”的不可屏蔽中断(,NMI,)输入。,NMI,的实际功能亦由芯片制造商决定。在某些情况下,,NMI,无法由外部中断源控制。,NVIC,的访问地址是,0 xE000_E000,。所有,NVIC,的中断控制,/,状态寄存器都只能在特权级下访问。不过有一个例外,软件触发中

3、断寄存器可以在用户级下访问以产生软件中断。所有的中断控制状态寄存器均可按字半字字节的方式访问。此外,有几个中断屏蔽寄存器也与中断控制密切相关,它们是第三章中讲到的“特殊功能寄存器”,只能通过,MRS/MSR,及,CPS,来访问。,中断配置基础,每个外部中断都在,NVIC,的下列寄存器中“挂号”:,使能与除能寄存器,悬起与“解悬”寄存器,优先级寄存器,活动状态寄存器,另外,下列寄存器也对中断处理有重大影响,异常掩蔽寄存器(,PRIMASK,FAULTMASK,以及,BASEPRI,),向量表偏移量寄存器,软件触发中断寄存器,优先级分组位段,中断的使能与除能,中断的使能与除能分别使用各自的寄存器来

4、控制,这与传统的,使用单一比特的两个状态来表达使能与除能是不同的。,CM3,中可以有,240,对使能位除能位,每个中断拥有一对。这,240,个对子分布在,8,对,32,位寄存器中(最后一对没有用完)。欲使能一个中断,你需要写,1,到对应,SETENA,的位中;欲除能一个中断,你需要写,1,到对应的,CLRENA,位中;如果往它们中写,0,,不会有任何效果。通过这种方式,使能除能中断时只需把“当事位”写成,1,,其它的位可以全部为零。再也不用像以前那样,害怕有些位被写入,0,而破坏其对应的中断设置(写,0,没有效果),从而实现每个中断都可以自顾地设置,而互不侵犯,只需单一的写指令,不再需要读,改

5、写。,如上所述,,SETENA,位和,CLRENA,位可以有,240,对,对应的,32,位寄存器可以有,8,对,因此使用数字后缀来区分这些寄存器,如,SETENA0,SETENA1SETENA7,,如表,8.1,所示。但是在特定的芯片中,只有该芯片实现的中断,其对应的位才有意义。因此,如果你使用的芯片支持,32,个中断,则只有,SETENA0/CLRENA0,才需要使用。,SETENA/CLRENA,可以按字,/,半字,/,字节的方式来访问。又因为前,16,个异常已经分配给系统异常,故而中断,0,的异常号是,16,,(回顾第,7,章中的表,7.2,),SETENAs,:xE000_E100

6、0 xE000_E11C;CLRENAs:0 xE000E180-0 xE000_E19C,中断的悬起与解悬,如果中断发生时,正在处理同级或高优先级异常,或者被掩蔽,则中断不能立即得到响应。此时中断被悬起。中断的悬起状态可以通过“中断设置悬起寄存器,(SETPEND)”,和“中断悬起清除寄存器,(CLRPEND)”,来读取,还可以写它们来手工悬起中断。,悬起寄存器和“解悬”寄存器也可以有,8,对,其用法和用量都与前面介绍的使能,/,除能寄存器完全相同,见表,8.2,。,优先级,每个外部中断都有一个对应的优先级寄存器,每个寄存器占用,8,位,但是允许最少只使用最高,3,位。,4,个相临的优先级寄

7、存器拼成一个,32,位寄存器。如前所述,根据优先级组设置,优先级可以被分为高低两个位段,分别是抢占优先级和亚优先级。优先级寄存器都可以按字节访问,当然也可以按半字,/,字来访问。有意义的优先级寄存器数目由芯片厂商实现的中断数目决定,优先级配置寄存器的详细信息在附录,D,中给出(表,D.18,),活动状态,每个外部中断都有一个活动状态位。在处理器执行了其,ISR,的第一条指令后,它的活动位就被置,1,,并且直到,ISR,返回时才硬件清零。由于支持嵌套,允许高优先级异常抢占某个,ISR,。然而,哪怕一个中断被抢占,其活动状态也依然为,1,(请仔细琢磨前文讲到的“直到,ISR,返回时才清零)。活动状

8、态寄存器的定义,与前面讲的使能,/,除能和悬起,/,解悬寄存器相同,只是不再成对出现。它们也能按字半字字节访问,但他们是只读的,如表,8.4,所示。,PRIMASK,与,FAULTMASK,特殊功能寄存器,PRIMASK,用于除能在,NMI,和硬,fault,之外的所有异常,它有效地把当前优先级改为,0,(可编程优先级中的最高优先级)。该寄存器可以通过,MRS,和,MSR,以下例方式访问:,1.,关中断,MOV R0,#1,MSR PRIMASK,R0,2.,开中断,MOV R0,#0,MSR PRIMASK,R0,此外,还可以通过,CPS,指令快速完成上述功能:,CPSID i;,关中断,C

9、PSIE i;,开中断,FAULTMASK,更绝,它把当前优先级改为,1,。这么一来,连硬,fault,都被掩蔽了。使用方案与,PRIMASK,的相似。但要注意的是,,FAULTMASK,会在异常退出时自动清零。,掩蔽寄存器虽然能一手遮天,却都动不了,NMI,,因为,NMI,是用在最危急的情况下的。因此系统为它开出单行道,无需挂号只是不要迟到。当,NMI,激活时,“谁都是省略号,唯独是你不得了,第一优先谁比你重要”!试想,如果,NMI,被连接到系统的掉电报警线上,且系统是体外循环机的电源管理器,如果因为中断被除能就视而不见,则会使体外循环机因断电而失能,体外循环序列可以被意外终止,病人的生命也

10、将丢失。,BASEPRI,寄存器,在更精巧的设计中,需要对中断掩蔽进行更细腻的控制,只掩蔽优先级低于某一阈值的中断,它们的优先级在数字上大于等于某个数。那么这个数存储在哪里?就存储在,BASEPRI,中。不过,如果往,BASEPRI,中写,0,,则另当别论,BASEPRI,将停止掩蔽任何中断。,例如,如果你需要掩蔽所有优先级不高于,0 x60,的中断,则可以如下编程:,MOV R0,#0 x60,MSR BASEPRI,R0,如果需要取消,BASEPRI,对中断的掩蔽,则示例代码如下:,MOV R0,#0,MSR BASEPRI,R0,另外,你还可以使用,BASEPRI_MAX,这个名字来访问

11、BASEPRI,寄存器,它俩其实是同一个寄存器。但是当你使用这个名字时,会使用一个条件写操作。个中原因如下:尽管它俩在硬件水平上是同一个寄存器,但是生成的机器码不一样,从而硬件的行为也不同:使用,BASEPRI,时,可以任意设置新的优先级阈值;但是使用,BASEPRI_MAX,时则“许进不许出”,只允许新的优先级阈值比原来的那个在数值上更小,也就是说,只能一次次地扩大掩蔽范围,反之则不行。,举例来说,检视下面的程序片断:,MOV R0,#0 x60,MSR BASEPRI_MAX,R0;,掩蔽优先级不高于,0 x60,的中断,MOV R0,#0 xf0,MSR BASEPRI_MAX,R0;

12、本次设置被忽略,因为,0 xf0,比,;0 x60,的优先级低,MOV R0,#0 x40,MSR BASEPRI_MAX,R0;Ok,。扩大掩蔽范围到优先级不,;,高于,0 x40,的中断,为了把掩蔽阈值降低,或者解除掩蔽,需要使用“,BASEPRI”,这个名字。上例中,把设置阈值为,0 xf0,的那条指令改用,BASEPRI,,则可以操作成功。,显然,在用户级下是不得更改,BASEPRI,寄存器的。与其它和优先级有关的寄存器一样,系统中表达优先级的位数,也同样影响,BASEPRI,中有意义的位数。如果系统中只使用,3,个位来表达优先级,则,BASEPRI,有意义的值仅为,0 x00,0

13、x20,0 x40,0 x60,0 x80,0 xA0,0 xC0,以及,0 xE0,。,其它异常的配置寄存器,用法,fault,,总线,fault,以及存储器管理,fault,都是特殊的异常,因此给它们开了小灶。其中,它们的使能控制是通过“系统,Handler,控制及状态寄存器,(SHCSR)”,(地址:,0 xE000_ED24,)来实现的。各种,faults,的悬起状态和大多数系统异常的活动状态也都在该寄存器中,如表,8.5,所是。,写这些寄存器时要小心,确保对活动位的修改是经过深思熟虑的,决不能粗心修改。否则,如果某个异常的活动位被意外地清零了,其服务例程却不知晓,仍然执行异常返回指令

14、那么,CM3,将视之为无理取闹,在异常服务例程以外做异常返回,从而产生一个,fault,。,下面讲中断控制及状态寄存器,ICSR,。对于,NMI,、,SysTick,定时器以及,PendSV,,可以通过此寄存器手工悬起它们。另外,在该寄存器中,有好多位段都用于调试目的。在大多数情况下,它们对于应用软件都没有什么用处,只有悬起位对应用程序常常比较有参考价值,如表,8.6,所示。,中断建立全过程的演示,下面给出一个简单的例子,以演示如何建立一个外部中断。,1.,当系统启动后,先设置优先级组寄存器。缺省情况下使用组,0,(,7,位抢占优先级,,1,位亚优先级)。,2.,如果需要重定位向量表,先把硬

15、fault,和,NMI,服务例程的入口地址写到新表项所在的地址中。,3.,配置向量表偏移量寄存器,使之指向新的向量表(如果有重定位的话),4.,为该中断建立中断向量。因为向量表可能已经重定位了,保险起见需要先读取向量表偏移量寄存器的值,再根据该中断在表中的位置,计算出服务例程入口地址应写入的表项,再填写之。如果一直使用,ROM,中的向量表,则无需此步骤。,5.,为该中断设置优先级。,6.,使能该中断,示例汇编代码如下:,LDR R0,=0 xE000ED0C;,应用程序中断及复位控制寄存器,LDR R1,=0 x05FA0500;,使用优先级组,5(2/6),STR R1,R0;,设置优先级

16、组,。,MOV R4,#8;ROM,中的向量表,LDR R5,=(NEW_VECT_TABLE+8),LDMIA R4!,R0-R1;,读取,NMI,和硬,fault,的向量,STMIA R5!,R0-R1;,拷贝它们的向量到新表中,.,LDR R0,=0 xE000ED08;,向量表偏移量寄存器的地址,LDR R1,=NEW_VECT_TABLE,STR R1,R0;,把向量表重定位,.,LDR R0,=IRQ7_Handler;,取得,IRQ#7,服务例程的入口地址,LDR R1,=0 xE000ED08;,向量表偏移量寄存器的地址,LDR R1,R1,ADD R1,R1,#(4*(7+1

17、6);,计算,IRQ#7,服务例程的入口地址,STR R0,R1;,在向量表中写入,IRQ#7,服务例程的入口地址,.,LDR R0,=0 xE000E400;,外部中断优先级寄存器阵列的基地址,MOV R1,#0 xC0,STRB R1,R0,#7;,把,IRQ#7,的优先级设置为,0 xC0,.,LDR R0,=0 xE000E100;SETEN,寄存器的地址,MOV R1,#(17);,置位,IRQ#7,的使能位,STR R1,R0;,使能,IRQ#7,另外,如果优先级组设置使得中断嵌套层次可以很深,则务请确认主堆栈空间足够用。因为异常服务程序总是使用,MSP,,为安全起见,主堆栈的容量

18、应是最大可能需求的量(嵌套最深时需要的量)。,如果应用程序储存在,ROM,中,并且不需要改变异常服务程序,则我们可以把整个向量表编码到,ROM,的起始区域(从,0,地址开始的那段)。在这种情况下,向量表的偏移量将一直为,0,并且中断向量一直在,ROM,中,因此上例可以大大简化,只需,3,步:,1.,建立优先级组,2.,为该中断指定优先级,3.,使能该中断,如果在,I/O,密集型系统中,软件需要控制大量的硬件设备,则可能必须要考虑如下因素:,该芯片支持的中断数,该芯片中表达优先级的位数,在,CM3,的,NVIC,中,有一个名为“中断控制器类型寄存器”,它提供了该芯片中支持的中断数目,粒度是,32

19、的整数倍,(如表,8.7,所示),如果你嫌它太粗枝大叶,也可以通过对每个,SETENA,位进行先写后读的测试,来获取支持的中断的精确数目(往各,SETENA,中写,1,,不支持的中断将永远读回,0,,求出第,1,个,0,的位置即可),亦可使用,SETPEND,等其它位来做此测试。这主要用于需要适应不同芯片的程序。如果已经确定使用固定的芯片,则无需多此一举。,为了判定正在使用的芯片使用了多少位来表达优先级,也可使用类似的方法:往某个优先级寄存器中写入,0 xFF,,再读回来。则从,MSB,开始,有多少位是,1,就有多少位表达优先级。最少要使用,3,个位,此时你读回的是,0 xE0,。,软件中断

20、软件中断,包括手工产生的普通中断,能以多种方式产生。最简单的就是使用相应的,SETPEND,寄存器;而更专业更快捷的作法,则是通过使用软件触发中断寄存器,STIR,,如表,8.8,所示。,注意:系统异常(,NMI,,,faults,,,PendSV,等),不能用此法悬起。而且缺省时就不允许用户程序改动,NVIC,寄存器的值。如果确实需要,必须先在,NVIC,的配置和控制寄存器,(0 xE000_ED14),中,把比特,1,(,USERSETMPEND,)置位,才能允许用户级下访问,NVIC,的,STIR,。,SysTick,定时器,SysTick,定时器被捆绑在,NVIC,中,用于产生,SY

21、STICK,异常(异常号:,15,)。在以前,大多操作系统需要一个硬件定时器来产生操作系统需要的滴答中断,作为整个系统的时基。例如,为多个任务许以不同数目的时间片,确保没有一个任务能霸占系统;或者把每个定时器周期的某个时间范围赐予特定的任务等,还有操作系统提供的各种定时功能,都与这个滴答定时器有关。因此,需要一个定时器来产生周期性的中断,而且最好还让用户程序不能随意访问它的寄存器,以维持操作系统“心跳”的节律。,CortexM3,处理器内部包含了一个简单的定时器。因为所有的,CM3,芯片都带有这个定时器,软件在不同,CM3,器件间的移植工作得以化简。该定时器的时钟源可以是内部时钟(,FCLK,

22、CM3,上的自由运行时钟),或者是外部时钟(,CM3,处理器上的,STCLK,信号)。不过,,STCLK,的具体来源则由芯片设计者决定,因此不同产品之间的时钟频率可能会大不相同,你需要检视芯片的器件手册来决定选择什么作为时钟源。,SysTick,定时器能产生中断,,CM3,为它专门开出一个异常类型,并且在向量表中有它的一席之地。它使操作系统和其它系统软件在,CM3,器件间的移植变得简单多了,因为在所有,CM3,产品间对其处理都是相同的。,有,4,个寄存器控制,SysTick,定时器,如表,8.9,至表,8.12,所示。,校准值寄存器提供了这样一个解决方案:它使系统即使在不同的,CM3,产品

23、上运行,也能产生恒定的,SysTick,中断频率。最简单的作法就是:直接把,TENMS,的值写入重装载寄存器,这样一来,只要没突破系统极限,就能做到每,10ms,来一次,SysTick,异常。如果需要其它的,SysTick,异常周期,则可以根据,TENMS,的值加以比例计算。只不过,在少数情况下,,CM3,芯片可能无法准确地提供,TENMS,的值(如,,CM3,的校准输入信号被拉低),所以为保险起见,最好在使用,TENMS,前检查器件的参考手册。,SysTick,定时器除了能服务于操作系统之外,还能用于其它目的:如作为一个闹铃,用于测量时间等。要注意的是,当处理器在调试期间被喊停(,halt,)时,则,SysTick,定时器亦将暂停运作。,

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服