网站大量收购独家精品文档,联系QQ:2885784924

2440的中断跳转详细跟踪(ARM启动代码).doc

2440的中断跳转详细跟踪(ARM启动代码).doc

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

ARM的中断发生时、pc指针跳转到相应的中断服务程序。 复位中断时、pc自动跳转到了服务程序。FIQ也有人这样做。 但是IRQ中断过程中、pc指针的跳转经历了1次硬件自动跳转、3次软件跳转。 这里主要的内容是跟踪IRQ中断过程中pc的跳转。 当有中断源发出中断请求之后、该中断源的请求信息会被记录到源挂起寄存器SRCPEND寄存器。 当然、可能不止一个中断请求,只能先执行优先级最高的中断,也就是需要选出其中优先级最高的中断。 被记录的中断们经过仲裁器裁决(按照约定的仲裁规则),筛选出优先级最高的中断,他将被记录到中断挂起寄存器INTPND和偏移量寄存器INTOFFSET,这是即将被执行的中断。 此时、内核中的中断模块硬件会自动根据该中断的类型使pc跳转到一个与该中断对应的空间,从这个空间开始执行程序,这个特定空间就是该中断向量占据的空间,里面存储的是跳转到该中断服务程序的指令。 至此由硬件完成的记录、筛选和跳转过程结束、后面的由软件完成,(其中、IRQ中断包含很多个中断源、需要判别并转到响应的中断服务函数、这些由软件完成)。 中断模块预先设置了8个(种)中断,从0地址开始、即程序最开始的地方,共有32Byte空间被分配给他们,组成中断向量表,这个向量表空间的位置/地址固定不变。 但是在调试时、映像文件是放入SDRAM中,入口地址被指定为-entry 0 也就是映像文件被放入从0始的空间、不再0x0地址开始的空间。 pc指针也指向这里,因为他是程序的入口。 调试时pc会指向入口地址、即0x3000000,此时CPU没有复位、不会引发复位中断、因而pc不会指向0地址。 但是只要有异常发生、pc就会执行从0地址开始的异常向量表的某个单元,而异常向量表中的内容被放在在0始的地方(如下图) : 所以在有异常发生之前、必须将这些代码复制到0地址处的异常向量表、以恢复异常向量表。 因而在Main函数的第一条语句就是复制语句 : 中断向量表占据的这32B空间被分为8份,每个类型的中断占据4Byte,里面存储的是跳转到相应的中断服务程序的指令,8个向量空间内的指令为(从0地址开始依次为) : b ResetHandler b HandlerUndef b HandlerSWI b HandlerPabort b HandlerDabort b . ;死循环指令(系统保留的空间) b HandlerIRQ b HandlerFIQ ;2440init.s里面在第8个空间后面追加了第9个向量空间 发生某一中断时、pc跳转到这些空间中的某一个、从该处开始执行其中的跳转指令。 b是跳转指令、后面跟的是中断服务函数的函数名,也就是中断函数的入口地址。 比如发生FIQ中断时、pc自动跳转到第8个向量空间、执行 b HandlerFIQ指令。 最常见的是复位中断 : 上电时、触发ResetHandler中断、pc跳到0x0地址处(当然上电时pc本来就是指向0地址的)。 0x0地址处的指令为 b ResetHandler、也就是跳到复位中断服务程序ResetHandler,执行中断处理任务。复位中断程序执行到最后、会进入Main函数执行。 同样、FIQ中断也可以这样、直接跳转到FIQ处理中断服务程序。 不过IRQ不是一个中断、是一类。 假如发生IRQ中的EINT3中断,就需要将他筛选出来,并跳转到EINT3的中断服务程序。 2440init.s中是这样实现的 : 首先为IRQ的每一个中断分配一个4Byte的空间、构成一个IRQ中断向量表,类似异常向量表。 每一个4B空间中存储的不是一条跳转指令、而是相应的中断服务程序的入口地址。 这个表在2440init.s的最后、定义在DATA区 : AREA RamData, DATA, READWRITE ^ _ISR_STARTADDRESS ;IRQ中断向量表起始地址 HandleReset # 4 ;第1个4B空间 HandleUndef # 4 HandleSWI # 4 HandlePabort # 4 HandleDabort # 4 HandleReserved # 4 HandleIRQ # 4 ;存放IsrIRQ的入口 HandleFIQ # 4 HandleEINT0 # 4 ;IRQ中断向量表的首地址是人为指定的 HandleEINT1 # 4 HandleEINT2 # 4 HandleEINT3 # 4 HandleEIN

文档评论(0)

xy88118 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档