基于ARM9芯片S3C2410异常中断程序设计.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于ARM9芯片S3C2410异常中断程序设计

基于ARM9芯片S3C2410异常中断程序设计 [日期:2008-1-16] 来源:微计算机信息 ? 作者:范书瑞 于明 刘剑飞 苏彦莽 [字体:大 中 小]   摘要:验证的代码详细分析了基于ARM嵌入式系统的异常处理流程。然后阐明关键字“-irq”的作用,设计出中断处理函数。最后,通过设置中断控制寄存器,设计外部中断EINT3的初始化程序,并给出主程序流程图。实践证明程序运行稳定可靠。 关键字:S3C2410?异常?–irq?中断 引言 计算机体系结构中,异常或者中断是处理系统中突发事件的一种机制,几乎所有的处理器都提供这种机制。异常主要是从处理器被动接受的角度出发的一种描述,指意外操作引起的异常。而中断则带有向处理器主动申请的意味。但这两种情况具有一定的共性,都是请求处理器打断正常的程序执行流程,进入特定程序的一种机制。若无特别说明,对“异常”和“中断”都不作严格的区分。本文结合经过实际验证的代码对ARM9中断处理流程进行分析,并设计出基于S3C2410芯片的外部中断处理程序。 1.异常中断响应和返回 系统运行时,异常可能会随时发生。当一个异常出现以后,ARM微处理器会执行以下几步操作: 1)??????? 将下一条指令的地址存入相应连接寄存器LR,以便程序在处理异常返回时能从正确的位置重新开始执行。 2)??????? 将CPSR复制到相应的SPSR中。 3)??????? 根据异常类型,强制设置CPSR的运行模式位。 4)??????? 强制PC从相关的异常向量地址取下一条指令执行,从而跳转到相应的异常处理程序处。 这些工作是由ARM 内核完成的,不需要用户程序参与。异常处理完毕之后,ARM微处理器会执行以下几步操作从异常返回: 1)??????? 将连接寄存器LR的值减去相应的偏移量后送到PC中。 2)??????? 将SPSR复制回CPSR中。 3)??????? 若在进入异常处理时设置了中断禁止位,要在此清除。 这些工作必须由用户在中断处理函数中实现。为保证在ARM处理器发生异常时不至于处于未知状态,在应用程序的设计中,首先要进行异常处理。采用的方式是在异常向量表中的特定位置放置一条跳转指令,跳转到异常处理程序。当ARM处理器发生异常时,程序计数器PC会被强制设置为对应的异常向量,从而跳转到异常处理程序。当异常处理完成以后,返回到主程序继续执行。可以认为应用程序总是从复位异常处理程序开始执行的,因此复位异常处理程序不需要返回。 2.异常处理程序设计 2.1?? 异常响应流程 由于向量表的限制,只能有一条指令B完成32MB范围内的跳转,并不能保证所有的异常处理函数都位于32MB范围内。为了扩展跳转范围,需要二次跳转才能把异常处理函数的地址传送给PC。异常处理调用关系如图1所示。 三星公司网站提供了test2410_r11软件包,其中2410init.s有如下代码: HandlerXXX sub??? sp,sp,#4 ??;减少sp,保存跳转地址 stmfd? sp!,{r0}??? ;将工作寄存器压入堆栈 ldr?? r0,=HandleXXX ;将HandleXXX地址放入r0 ldr???? r0,[r0]? ?;将中断程序入口地址放入r0 str?? r0,[sp,#4]? ;将中断程序入口地址压入堆栈 ldmfd?? sp!,{r0,pc}? ;将工作寄存器和中断程序入口地址弹出到r0和PC 图1异常处理调用 并且在RAM中定义了存有中断程序入口地址表_ISR_STARTADDRESS: AREA RamData, DATA, READWRITE ??????? ^?? _ISR_STARTADDRESS HandleReset???????????????? #?? 4 HandleUndef ???? ???????? #?? 4 HandleSWI?? ??? ???????? #?? 4 HandlePabort??? ?????? #?? 4 HandleDabort??? ?????? #?? 4 HandleReserved? ?????? #?? 4 HandleIRQ?? ??? ???????? #?? 4 HandleFIQ?? ??? ???????? #?? 4 通常HandlerXXX位于程序入口地址32MB范围内,HandleXXX是以_ISR_STARTADDRESS为基地址的RAM中地址。该代码主要实现跳转功能,把异常处理程序地址HandleXXX送到PC中。例如产生IRQ中断时,PC会被强制设置为0x18,执行指令:b? HandlerIRQ 在HandlerIRQ程序段内,处理器做一些必要的处理,就会将_ISR_STARTADDRESS表中存放的IRQ

文档评论(0)

qwd513620855 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档