ARM CortexM3处理器故障分析与处理.doc

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
ARM CortexM3处理器故障分析与处理

ARM CortexM3处理器故障分析与处理   【摘要】本文介绍了ARM Cortex-M3处理器的4种故障:总线故障、用法故障、内存管理故障和硬故障。分析了这些故障产生的原因,叙述了如何通过故障状态寄存器找出故障原因,如何在程序开发阶段尽可能的避免故障的产生,以及故障的处理方法。   【关键词】ARM;故障;寄存器;中断       1.引言    在嵌入式领域,ARM Cortex -M3处理器凭借其高性能、低功耗、低成本等优势,得到了广泛的应用。该处理器具有很强的灵活性,在给开发人员较大开发空间的同时,也在一定程度上增加了开发的难度。尤其是当处理器出现故障时,故障原因常常难以找出。本文针对该处理器的以上特点,详细分析了处理器的4种故障,使读者可以对故障进行准确的分析和处理。    2.故障分析    ARM Cortex-M3处理器[1]共有4种故障:总线故障、用法故障、内存管理故障和硬故障。ARM将故障当作特殊的中断来处理,其中,硬故障在所有故障中拥有最高优先级,优先级为-1,其它故障的优先级是可整定的,但必须为非负数,默认优先级是0(ARM中优先级的数值越小,优先级的级别越高,负数拥有最高优先级[2])。总线故障是指指令或数据在AHB总线上传输时出现错误而产生的一种故障,可在指令读取、数据读写以及堆栈的压栈和弹栈时产生。用法故障是指在对CPU的使用上出现错误而导致的故障。内存管理故障是指对内存的读写违反了MPU(内存保护单元)的规定或在不允许执行指令的地址执行指令而产生的一种故障。硬故障一般由其它故障升级导致。下面将对每种故障进行详细分析。    2.1 总线故障    总线故障产生的原因有以下几种:读写错误的内存地址(如对一处内存地址进行读写,但该地址并没有连接内存);对一个设备进行读写,但该设备还没有准备好接受读写操作(如读写外部RAM,但外部RAM还没有初始化);对设备读写的数据类型不符合设备的要求(如某设备只支持32位读写,当对该设备进行8位读写时,便会出现故障);设备由于某种原因无法接受对它的读写操作[3](如在非特权模式下对一个只接受特权模式操作的设备进行读写)。如果想使能总线故障处理,将SCB(系统控制模块)中SHCSR寄存器中的BUSFAULTENA位置1。如果将中断向量表放入RAM中,在置位之前应先确定总线故障处理程序的的初始地址已经在表中设置完毕。总线故障发生后,SCB中的BFSR寄存器提供了关于故障的相关信息,如表1所示:    如果BFARVALID位置1,则SCB中BFAR寄存器中的值便代表了产生总线故障所进行读写操作的内存地址。当总线故障产生时,如果故障处理使能,且此时没有相同或更高优先级的中断在运行,总线故障的处理程序将被执行。如果故障处理使能,但此时有相同或更高优先级的中断正在运行,总线故障将处于等待状态。如果故障处理未使能,或故障出现在相同或更高优先级的中断程序中,则总线故障的处理程序无法被执行,于是总线故障升级为硬故障。    2.2 用法故障    用法故障产生的原因有以下几种:使用未定义的指令;使用协处理器指令(Cortex-M3不支持协处理器);试图从Thumb状态转换到ARM状态;中断返回值错误(LR寄存器中含有错误的返回值);在使用STM或LDM指令时,内存地址未对齐;除以0或读写未对齐的内存地址(可通过对NVIC——可嵌套向量中断控制器相应寄存器的控制位选择是否产生故障)。如果想使能用法故障处理,将SCB中SHCSR寄存器中的USGFAULTENA位置1。如果将中断向量表放入RAM中,在置位之前先确定用法故障处理程序的的初始地址已经在表中设置完毕。用法故障发生后,SCB中的UFSR寄存器提供了关于故障的相关信息,如表2所示:    与总线故障相同,当用法故障产生时,如果故障处理使能,则在没有相同或更高优先级中断运行时,用法故障处理程序被执行,否则处于等待状态。如果故障处理未使能,或故障出现在相同或更高优先级的中断程序中,则升级为硬故障。    2.3 内存管理故障    内存管理故障产生的原因有以下几种:所读写的内存地址超出了MPU的设置范围;对只读区域进行写操作;在非特权状态下对只支持特权读写的区域(由MPU规定)进行读写操作。如果想使能内存管理故障处理,将SCB中SHCSR寄存器中的MEMFAULTENA位置1。如果将中断向量表放入RAM中,在置位之前应先确定内存管理故障处理程序的的初始地址已经在表中设置完毕。内存管理故障发生后,SCB中的MMSR寄存器提供了关于故障的相关信息,如表3所示:    如果MMARVALID位置1,则SCB中MMAR寄存器中的值便代表了产生内存管理故障所进行读写操作的内存地址。与总线故障相同,当内存管

文档评论(0)

189****7685 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档