- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
讲稿-09-S3C2410A的中断机制,java的中断机制,linux中断机制,中断机制,软中断机制,java中断机制,windows中断机制,中断处理机制,armlinux中断机制,x86中断机制
S3C2410A的中断机制 S3C2410A的中断硬件原理 和中断控制相关的寄存器 S3C2410A的中断控制器包括6类寄存器: 中断源状态寄存器 中断模式寄存器 中断屏蔽寄存器 优先级寄存器 中断状态寄存器 中断偏移寄存器 中断源状态寄存器 该寄存器的32位中每一位对应一个中断源。如果相应中断源产生中断请求,则其对应位被置1。该寄存器中的位将自动由中断请求置位,而不管是否被屏蔽。另外,该寄存器不受中断控制器的优先级逻辑影响。 在中断服务程序中,该寄存器的相应位必须进行清零处理,清零的方法是将该位写入1 寄存器内容描述 中断模式寄存器 用于设置相应中断的工作模式,是IRQ模式还是FIQ模式。显然FIQ是快于IRQ的,但处理成本高。 同样是一位对应一个中断。 中断屏蔽寄存器 和同学们熟悉的其他类型CPU一样,每个中断都可以用软件进行屏蔽。 同样是一位对应一个中断。 中断优先级寄存器 2410A的中断优先控制比较复杂。按两级方式进行控制。 所有中断分成六组,每一组包含4-6个中断。 中断组和中断组之间可以进行优先级别控制,如果1组的优先级别高于2组,则1组任一中断的优先级别都高于2组的任一中断。 每个组内的中断也有优先级别的。 组间的优先级别和组内的优先级别是可以用软件设置的。 优先级寄存器PRIORITY就是用来设置优先级别的。由于优先级别设置比较复杂,这里就不介绍了。我们记住处理器复位后的默认状态,那就是:中断偏移值越小,该中断的优先级越高。 中断状态寄存器 该寄存器的32位中每一位分别对应一个中断源。如果相应的中断源产生中断请求,且该寄存器中相应位没有屏蔽,同时具有最高优先级别,则对应位被置1。 和SRCPND寄存器一样,在中断服务中,该寄存器的相应位必须进行清零处理,清零的方法是将该位写入1。 中断偏移寄存器 该寄存器的值表示在IRQ模式下,INTPND寄存器中哪一个中断请求产生。也就是该寄存器的值是当前正在被服务的中断源的偏移值。它将在SRCPND和INTPND寄存器后被自动清除。 S3C2410A中断的软件设计 2410A的中断机制比较复杂,所以其中断的软件设计也有不同之处。 2410A的所有中断都属于ARM的一种异常。也就是处理器在处理中断时候,首先要确定进入哪一种异常处理程序,然后在异常处理程序中,跳转到对应的中断处理程序。 所以:2410A的中断处理过程是一个两级跳过程,第一步跳到对应的异常处理程序,第二步跳到对应的中断程序。 中断异常的响应过程 硬件自动保存处理器当前状态寄存器CPSR的值到中断异常模式的SPSR中。 硬件自动设置当前CPSR的值,主要是将模式设置为中断模式 硬件自动设置设置LR寄存器的值。将当前PC的值赋予LR,由于ARM的流水技术,LR的值是当前被中断的指令地址加8,所以LR-4 是中断返回地址。 在异常处理程序中,查询一个中断向量表,根据对应中断的偏移值,得到对应中断的中断向量 中断服务程序的编写 我们在开发时候,真正要编写的是中断服务程序。2410A的中断服务程序编写要注意以下两点。 第一是编写完中断服务程序后,要将对应的程序首地址写入到中断向量表的相应项中。 第二是中断程序结尾,并不是返回到中断异常处理程序那里(尽管是从那里跳出来的)。而是跳回到发生异常时的下条指令。 中断异常处理程序举例 sub sp, sp, #4 ;栈顶向下一个单元,在栈中给PC挪出地方 stmfd sp!, {r8-r9} ;将r8-r9入栈,后面要使用这两个寄存器 ldr r9, =INTOFFSET ;将中断偏移值寄存器的地址送入r9 ldr r9, [r9] ;这个操作后r9就是当前中断的中断偏移值 中断向量表 ;IntVectorTable HandleEINT0 # 4 HandleEINT1 # 4 HandleEINT2 # 4 HandleEINT3 # 4 HandleEINT4_7 # 4 HandleEINT8_23 # 4 HandleRSV6 # 4 HandleBATFLT # 4 中断向量表实际上是用伪指令生成的一段内存,其中#就是伪指令FIELD的同义词。可以看出HandleEINT0是一个标号,这个标号代表了外部中断0的中断向量的地址,后面的各个标号都有相似的含义。 中断处理程序 下面是一个外部中断3的处理程序例子 sub lr, lr, #4 ;LR减去4才是返回地址 stmfd sp!, {r0-r12,lr} ;将所有寄存器和返回地址全部保存在栈中 ldr r0, = GPFDAT ;将并口F的数据口地址赋于r0 ldr r
文档评论(0)