- 1、本文档共101页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
R14寄存器注意要点 当发生异常嵌套时,这些异常之间可能会发生冲突。 例如:如果用户在用户模式下执行程序时发生了IRQ中断,用户模式寄存器不会被破坏。但是如果允许在IRQ模式下的中断处理程序重新使能IRQ中断,并且发生了嵌套的IRQ中断时,外部中断处理程序保存在R14_irq中的任何值都将被嵌套中断的返回地址所覆盖。 2.5 寄存器组织 R14寄存器注意要点 R14 R14_irq 用户模式下的程序 IRQ模式下的程序A a return B ... X A 地址A 地址A 1.执行用户模式下的程序; 2.发生IRQ中断,硬件将某个地址存入IRQ模式下的R14_irq寄存器,用户模式下的R14没有被破坏; 3. IRQ服务程序A执行完毕,将R14_irq寄存器的内容减去某个常量后存入PC,返回之前被中断的程序; 未被破坏 R14寄存器注意要点 R14 R14_irq 用户模式下的程序 IRQ模式下的程序A a B ... X A 地址A 地址A 1.执行用户模式下的程序; 2.发生IRQ中断,硬件将某个地址存入IRQ模式下的R14_irq寄存器,用户模式下的R14没有被破坏; 3. IRQ服务程序A执行完毕,将R14_irq寄存器的内容减去某个常量后存入PC,返回之前被中断的程序; 未被破坏 IRQ模式下的程序B a return B ... X A 地址B 地址B 4. 如果在IRQ处理程序中打开IRQ中断,并且再次发生IRQ中断,或者调用子程序; 5. 硬件将返回地址保存在R14_irq寄存器中,原来保存的返回地址将被覆盖,造成错误; 被破坏 6. 在程序B返回到程序A,然后在返回到用户模式下被中断的程序时,发生错误,将不能正确返回; return return 解决办法是确保R14的对应版本在发生中断嵌套时不再保存任何有意义的值(将R14入栈),或者切换到其它处理器模式下。 2.5 寄存器组织 中断嵌套的处理 IRQ_Handler STMFD SP!,{R0-R12,LR} ;保护现场, BL Irqhandler ;进入中断处理函数 ;并允许中断重入 LDMFD SP!,{R0-R12,LR} ;恢复现场 SUBS PC,LR,#4 ;中断返回 中断嵌套的处理 BL Foo - Foo ADD … STMFD SP!,{R0-R3,LR} … LDMFD SP!,{R0-R3,LR} 恰好子程序在保存子程序返回地址 (STMFD SP!,{R0-R3,LR})时,发生中断嵌套? 中断嵌套的处理 中断嵌套的处理 新中断使能之前,必须要保护好前一个中断的现场信息,比如 LR_irq,SPSR_irq. 中断处理过程中,对BL的保护 中断嵌套的处理 1.进入普通不可重入中断处理 2.保护寄存器:LR、SPSR等 3.与中断控制器通信(需要的话) 4.切换到System状态,开中断使能 5.中断处理(现在中断可重入) 6.关闭中断使能,切换回IRQ状态 7.恢复寄存器:PC,CPSR等 8.结束一次可重入中断处理. ARM状态和THUMB状态之间切换,不影响处理器的模式和寄存器的内容. ARM微处理器在复位或上电时处于ARM状态,发生异常时处于ARM状态。 ARM支持7种类型的异常,表列出异常的类型以及处理这些异常的处理器模式,异常出现后,强制从异常类型对应的固定存储器地址开始执行程序,这些固定的存储器地质称为异常向量. ARM体系程序执行流程 1.正常程序执行 每执行一条ARM指令,PC值加4.每执行一条THUMB指令,PC值加2 2.通过跳转指令 跳到特定的地址标号,或特定的子程序,有四种情况,B、BL、BX、BLX。 3.当异常发生时 系统执行完当前指令,将跳到相应的异常服务程序处执行,当异常服务程序执行完后,处理器返回到发生中断的指令的下一条指令处执行. 简介 只要正常的程序流被暂时中止,处理器就进入异常模式。例如响应一个来自外设的中断。在处理异常之前,ARM7TDMI内核保存当前的处理器状态,这样当处理程序结束时可以恢复执行原来的程序。 如果同时发生两个或更多异常,那么将按照固定的顺序来处理异常,详见“异常优先级”部分。
文档评论(0)