嵌入式第13讲_第7章嵌入式系统中断控制100页1研讨.ppt

嵌入式第13讲_第7章嵌入式系统中断控制100页1研讨.ppt

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

* ARM处理器向量中断下的可重入的 IRQ/FIQ异常中断处理程序(续) ; 保存用户模式的LR_usr以及被调用者不保存的寄存器 STMFD SP!, {R0-R3, LR} BL C_irq_handler ;跳转到C语言的中断处理程序 LDMFD sp!, {R0-R3, LR} ; 切换到IRQ模式,禁止IRQ中断,FIQ中断仍然允许 MSR CPSR_c, #0x92 ; 恢复工作寄存器和SPSR_irq LDMFD SP!, {R12, R14} MSR SPSR_cf, R14 ; 从IRQ处理程序返回 LDRFD SP!, {PC}^ END * 下面给出了使用I_ISPR寄存器来查询IRQ中断源的代码段例子。这段代码具有非向量中断属性,也是CPU执行IRQ中断服务程序之后的最早执行的代码段。尽管最前面的五条指令属于CPU响应向量中断时转向ISR入口的指令,其中也包括了IRQ类型的中断响应。但是由于发出中断请求的IRQ中断源可能不止一个,也许有多个,需要通过程序进一步判断具体那一个中断源发出了请求中断并且被CPU响应。因此,我们说这是一个非向量中断模式的中断入口程序。 7.1.4 S3C44B0X非向量中断模式处理 * 局部标号的举例--S3C44B0X处理器非向量中断ISR入口地址查找 * S3C44B0X处理器非向量中断ISR入口地址查找的栈操作 栈顶 SP 栈元素 栈顶 SP 栈元素 空 栈顶 SP 栈元素 空 R9 R8 栈顶 SP 栈元素 ISR首地址 R9 R8 栈顶 SP 栈元素 ISR首地址 R9 R8 (a) (b) (c) (d) (e) * 与x86处理器不同,ARM处理器的异常中断向量表(也称为中断向量表)内部并非单纯地存放ISR入口逻辑地址,该表内部存放了8条汇编指令,完成跳转到对应的异常中断处理程序总入口地址。ARM处理器的异常中断向量表指令有两种类型,一种是数据读取型,例如:LDR PC, Reset_Addr;另一种是分支指令型,例如:BL Reset_Handler。 7.1.5 ARM异常中断向量表的特点 * ARM处理器要求异常中断向量表放在ROM的首地址为0x0的连续32个字节空间,有些ARM处理器还可以把异常中断向量表放在高位起始地址。 以下讲解S3C44B0X处理器中断向量表的存放形式和执行机制。其他的ARM处理器的中断向量表的存放形式和执行机制可以类推。 S3C44B0X处理器 中断向量表的存放形式和执行机制 * S3C44B0X的中断控制器是INTCON,位于0x01E00000,R/W属性,共4位,初值是0x7。这4位的定义如下表所示,参看下表: 中断控制器INTCON * INTCON寄存器的位定义(表7-4) INTCON 位 描述 初始值 F 0 允许/禁止快速中断 0:允许,1:禁止 在使用FIQ中断之前,该位必须清零。 FIQ不支持向量中断 1 I 1 允许/禁止普通中断 0:允许,1:禁止 在使用IRQ中断之前,该位必须清零。 1 V 2 允许/禁止向量中断模式 0:允许,1:禁止 1 保留 3 0 0 * I_ISPR是IRQ模式下的中断服务悬挂寄存器,位于0x01E00020,只读属性,初值为0x0。F_ISPR是FIQ模式下的中断服务悬挂(Pending)寄存器,位于0x01E00038,只读属性,初值为0x0。这两个寄存器的26位[bit25-bit0]分别对应26个中断源,标记该中断源是否正处于中断服务状态,称为中断服务悬挂位。请参看表7-3的最右栏。 中断服务悬挂寄存器I_ISPR或F_ISPR * 如果在I_ISPR中的对应位置1,则表明该中断源正在执行IRQ型中断服务程序。如果在F_ISPR中的对应位置1,则表明该中断源正在执行FIQ型中断服务程序。根据INTMOD的设置,显然上述两种情况中只能出现一种。此外,在任何情况下I_ISPR和F_ISPR寄存器中,只有1位被置位。这就是说,I_ISPR和F_ISPR分别只登记一个正在服务的中断。 I_ISPR或F_ISPR的位操作 * I_ISPC是IRQ模式下的中断服务悬挂清除寄存器,位于0x01E00024,只写属性,初值未定义。F_ISPC是FIQ模式下的中断服务悬挂清除寄存器,位于0x01E0003C,只写属性,初值未定义。 I_ISPC或F_ISPC寄存器起清除中断悬挂位(INTPND)的作用。这两个寄存器的26位[bit25-bit0]分别对应26个中断源,只接受写入的数据,称为中断服务悬挂清除位,其作用是标记中断源的中断服务悬挂状态是否被清除。请参看表7-3的最右栏。 中断服

文档评论(0)

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

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

1亿VIP精品文档

相关文档