ImageVerifierCode 换一换
格式:DOCX , 页数:13 ,大小:22.30KB ,
资源ID:8544419      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-8544419.html】到电脑端继续下载(重复下载不扣费)。

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

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(cortexm3异常和中断Word文档下载推荐.docx)为本站会员(b****6)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

cortexm3异常和中断Word文档下载推荐.docx

1、 * 4: * param priMask PriMask 5: 6: * Set the priority mask bit in the priority mask register 7: */ 8: static _INLINE void _set_PRIMASK(uint32_t priMask) 9: 10: register uint32_t _regPriMask _ASM(primask); 11: _regPriMask = (priMask); 12: 使用_set_PRIMASK(1)关闭中断;_setPRIMASK(0)开启中断。一些说明:_INLINE是宏定义,对应_

2、inline,这是keil编译器自定义关键字,表示这个函数是内联函数,但并不是强制性内联,编译器最终决定是否内联。_ASM(“primask”): _ASM也是一个宏,对应_asm,这是keil编译器自定义关键字,关于这个关键字,有相当多的用法,可以在C中内嵌汇编语言、内嵌汇编函数、指定汇编标号以及本代码中的声明一个已命名寄存器变量。这里,已命名的寄存器是(),也就是说寄存器变量_regPriMask等同于编译器已命名的primask。语法为: register type var-name _asm(reg);keil编译器已命名的寄存器变量为:寄存器_asm修饰的字符串处理器APSRapsr

3、All processorsCPSRcpsrbasepriCortex-M3, Cortex-M4BASEPRI_MAXbasepri_maxCONTROLcontrolCortex-M0, Cortex-M1, Cortex-M3, Cortex-M4DSPdspEAPSReapsrEPSRepsrfaultmaskIAPSRiapsrIEPSRiepsrIPSRipsrMSPmspPSPpspPSRpsrr0 to r12r0 to r12r14 or lrr14 or lrr13 or spr13spr15 or pcr15pcSPSRspsrAll processors, apart

4、from Cortex-M series processors.XPSRxpsrXX文库 - 让每个人平等地提升自我XX文库 - 让每个人平等地提升自我Cortex-M0, Cortex-M1, Cortex-M3, Cortex-M41.2 开/关异常 * brief Set the Fault Mask value * param faultMask faultMask value * Set the fault mask register static _INLINE void _set_FAULTMASK(uint32_t faultMask) register uint32_t _r

5、egFaultMask _ASM( _regFaultMask = (faultMask & 1);使用_set_FAULTMASK(1)来关闭中断和异常;使用_set_FAULTMASK(0)开启中断和异常.1.3 更精确的优先级屏蔽 * brief Set the Base Priority value * param basePri BasePriority * Set the base priority register static _INLINE void _set_BASEPRI(uint32_t basePri) register uint32_t _regBasePri _A

6、SM( _regBasePri = (basePri & 0xff);比如想屏蔽优先级不高于0x60的中断,则使用代码:_set_BASEPRI(0x60);如果想取消中断屏蔽,则使用_set_BASEPRI(0)即可。2.异常/中断和优先级Cortex-M3的异常包括系统异常和外设中断,系统异常是Cortex-M3内核自带的一些异常,比如复位、总线Fault和SysTick等等(见表2-1),外设中断是指制造CPU的厂家加入的,比如串口、定时器中断等等(见表2-2)。关于异常和中断,想要分个清清楚楚实在有点困难。异常和中断都可以“中断”正常执行的代码流,区别在于,异常是Cortex-M3内核

7、产生的“中断”信号,而中断是Cortex-M3内核外部(片上外设或外部中断信号)产生的“中断”信号。希望你看懂了,有时候你心里明白,但要讲的清清楚楚着实难!表2-1:系统异常编号类型优先级简介N/A无1复位-3(最高)2NMI-2不可屏蔽中断(来自外部NMI输入脚)3硬Fault-1只要FAULTMASK没有置位,硬Fault服务例程会被强制执行4存储器管理Fault可编程MPU访问违例以及访问非法位置均可引发。企图在“非执行区”取址也会引发此Fault。5总线Fault总线收到了错误响应,原因可以使预取流产或数据流产,企图访问协处理器也会引发此Fault6用法Fault由于程序错误导致的异常

8、。通常是使用了一条无效指令,或者是非法的状态转换,例如尝试切换到ARM状态710保留11SVCall执行系统服务调用指令(SVC)引发的异常12调试监视器调试器(断点、数据观察点,或者是外部调试请求)1314PendSV为系统设备而设的“可挂起请求”15SysTick系统节拍时钟定时器(SysTick)表2-2:外设中断16IRQ #0外设中断#017IRQ #1外设中断#1.255IRQ #239外设中断#239表2-1和2-2中的“编号”有着特殊的意义,一是特殊功能寄存器IPSR中会记录当前正在服务的异常并给出了它的编号;二是优先级完全相同的多个异常同时挂起时,则先响应异常编号最小的那一个

9、。 一个发生的异常如果不能被立即响应,就称它被“挂起”,值得一提的是,对于被挂起的中断/异常,中断/异常信号不必由其产生者保持,NVIC的挂起状态寄存器会来保持这个信号。所以哪怕后来挂起的中断源释放了中断请求信号,曾经的中断请求也不会丢失。 除了复位、NMI和硬Fault三个异常具有固定的优先级外,其它所有异常和中断的优先级都是可以编程的。这就涉及到优先级配置寄存器。Cortex-M3优先级配置寄存器共8位,所以可以有256级的可编程优先级。但是大多数Cortex-M3芯片都会精简设计。 LPC177x/8x使用了优先级配置寄存器的5位,所以有32级可编程优先级。复位后,对于所有优先级可编程的

10、异常,其优先级都被初始化为0(最高优先级)2.1 设置异常/中断的优先级2.1.1 系统异常优先级设置 SHPR1-SHPR3寄存器用于设置有可编程优先级的系统异常,可设置的优先级为0到31。SHPR1-SHPR3可按字节访问。为了提高软件效率,CMSIS简化了SCB寄存器的表述。在CMSIS中,字节数组SHP0 到SHP12对应于寄存器SHPR1至SHPR3。表2-3:SHPR1寄存器的位分配位名称功能31:24PRI_723:16 PRI_6系统处理程序6的优先级,用法Fault15:8 PRI_5系统处理程序5的优先级,总线Fault 7:0PRI_4系统处理程序4的优先级,存储器管理F

11、aultSHPR2寄存器的位分配PRI_11系统处理程序11的优先级,SVCall0 -表2-4:SHPR3寄存器的位分配PRI_15系统处理程序15的优先级,SysTick 异常PRI_14系统处理程序14的优先级,PendSV每个PRI_N域为8位宽,但是处理器仅实现每个域的位7:3,位2:0读取值为零并忽略写入值。2.1.2 外设中断优先级设置LPC177x/8x微处理器的中断优先寄存器IPR0IPR10用于设置外设中断优先级,控制41个外设中断。每个IPRx可以按字节访问,在CMSIS中,字节数组IP0 到IP40对应于寄存器IPR0IPR10。2.1.3 系统异常/外设中断优先级设置

12、C代码 * brief Set the priority for an interrupt * * param IRQn The number of the interrupt for set priority * param priority The priority to set * Set the priority for the specified interrupt. The interrupt * number can be positive to specify an external (device specific) * interrupt, or negative to s

13、pecify an internal (core) interrupt. * Note: The priority cannot be set for every core interrupt. */ static _INLINE void NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) 13: 14: if(IRQn SHP(uint32_t)(IRQn) & 0xF)-4 = (priority IP(uint32_t)(IRQn) = (priority AIRCR 10:8 PRIGROUP field. Only values

14、from 0.7 are used. * In case of a conflict between priority grouping and available * priority bits (_NVIC_PRIO_BITS) the smallest possible priority group is set. static _INLINE void NVIC_SetPriorityGrouping(uint32_t PriorityGroup) uint32_t reg_value; /* only values 0.7 are used */ uint32_t PriorityG

15、roupTmp = (PriorityGroup & 0x07); reg_value = SCB-AIRCR; /* read old register configuration */ /* clear bits to change */ reg_value &= (SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk); 21: /* Insert write key and priorty group */ 22: reg_value = (reg_value | 23: (0x5FA SCB_AIRCR_VECTKEY_Pos) | 24: (PriorityGroupTmp 8); 25:AIRCR = reg_value; 26: 其中,参数PriorityGroup为要设置的优先级分组(PRIGROUP)段的值,取值范围为07.由于操作AIRCR寄存器需要访问钥匙,所以要把0x05FA写入到该寄存器的bit31:16中,否则写入的值会被忽略。 需要注意的是,在一个设计好的产品中,如

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2