ARM中断的的处理

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

what? when?
庖丁教育,成就未来
14/20
复位时安装中断处理程序(静态的方式安装):方法一
area init,code,readonly entry b ResetHandler b UndefHandler b SwiHandler b PabortHandler b DataHandler b . 复位异常的处理代码非常重 b IRQHandler 要,系统上电复位是执行, b FIQHandler ResetHandler ;复位异常处理代码 UndefHandler ;未定义指令处理异常代码 SwiHandler ;软中断异常处理代码 PabortHandler ;指令预取异常代码 DataHandler ;数据访问异常代码 IRQHandler ;普通外部中断处理代码 FIQHandler ;快速中断处理代码 end
0x0c 预取指令中止 0x10 预取数据终止 0x14 0x18 0x1c
irq_handler iqr中断处理 中断返回
庖丁教育,成就未来
7/20
ARM中断的响应过程
• 分析: 当发生irq中断时,如果cpu打算响应该中断(是不是有时候还 不响应呢?有,以后再讲)时,硬件会强迫pc指向中断向量表 irq的入口,即pc的值变成0x18,此时cpu会从0x18取指令执行, 这一切都是由硬件来完成,但我现在希望是一旦发生irq中断, cpu能够执行irq中断处理程序, irq中断产生pc:0x18
发生了某类型异常,则pc就指向 对应的地址,强迫cpu从对应地址 取指令执行,例如:发生复位异 常,cpu会从0地址取指令执行。
地址
0x00 0x04
0x08
怎样才能让 irq中断 异常 内存单元 复位 发生后, pc能够指 未定义指令 向软中断 irq_handler?
保留 IRQ FIQ
假设下面为irq中断处理程序:
假设下面为irq中断处理程序:
irq_handler iqr中断处理 中断返回
ldr pc,=irq_handler
庖丁教育,成就未来
13/20
问题的提出
• 安装ARM的中断处理 程序需要解决两个问 题:
① 在各异常向量对应 的表项处填入什么 指令可以让发生异 常时cpu可以最终 跳转到异常处理程 序; ② 什么时候安装中断 处理程序;
ARM中断的响应过程
• 当八种类型的异常(严格说了只有七种)发生时,硬件能够保 证cpu执行中断向量表对应入口处的指令,尽管这个过程由硬件 完成,但为了当中断处理完成后程序员能够编写正确的返回指 令,有必要对该硬件过程作一解释:
(1)拷贝当前CPSR到对应模式的SPSR寄存器中以存储当前程序状态, 这些信息包括当前处理器模式、中断屏弊位以及控制标识。 (2)改变CPSR寄存器的模式位使当前处理器工作于对应模式、禁止 中断位,其中,在任何异常情况下都将禁止IRQ请求位,当复位中 断和FIQ中断发生时将禁止FIQ请求位。 (3)保存返回地址到对应模式链接寄存器(LR)。 (4)设置当前程序PC寄存器到中断向量地址以处理异常。这将强制 跳转到相应的中断处理程序中。
17/20
庖丁教育,成就未来
庖丁教育,成就未来
10/20
• 到目前为止,解决了当异常发生时,cpu如何跳转到异常处理程序问 题;当异常处理结束了,我们还得让cpu返回到被中断的地方继续做 未完成的工作,这一工作必须全部有程序员完成,一般遵循如下规则: 当一个中断异常处理后,将执行以下操作以从中断异常处理程序中返 回: (1)从相应模式的SPSR寄存器中恢复CPSR寄存器内容。 (2)从相应模式的链接寄存器LR中恢复PC寄存器以使程序从中断处 重新执行。 • 如果在进入中断时没有使用栈空间来存储普通寄存器数据,则只需要 执行以上操作即可。如果在进入中断时使用了栈空间来存储普通寄存 器数据,则需要重新加载这些数据,例如使用以下指令: LDMFD sp!,{r0-r12,pc}^ 以上指令将从SP(堆栈寄存器)所指堆栈空间中恢复R0~R12寄存 器数据,并从LR寄存器恢复PC寄存器,从SPSR_mod中恢复CPSR寄存器。
Reset_Handler ;复位异常处理代码 Undef_Handler ;未定义指令处理异常 代码 Swi_Handler ;软中断异常处理代码 Pabort_Handler ;指令预取异常代码 Data_Handler ;数据访问异常代码 IRQ_Handler ;普通外部中断处理代 码 FIQ_Handler ;快速中断处理代码 end
硬件完成 0x18

cpu执行该指令
pc: irq_handler
我们希望irq中断发生时的pc的值
ldr pc,=irq_handler
庖丁教育,成就未来
8/20
ARM中断的响应过程
• 当某一类型的异常发生时,ARM处理器 能够跳转到异常处理程序的秘密就在于 ARM处理器的中断向量表!
发生了某类型异常,则pc就指向 对应的地址,强迫cpu从对应地址 取指令执行,例如:发生复位异 常,cpu会从0地址取指令执行。
16/20
庖丁教育,成就未来
复位时安装中断处理程序(静态的方式安装):方法三
area init,code,readonly entry ldr pc,=ResetHandler ldr pc,=UndefHandler ldr pc,=SwiHandler ldr pc,=PabortHandler ldr pc,=DataHandler b . ldr pc,=IRQHandler ldr pc,=FIQHandler ResetHandler ;复位异常处理代码 UndefHandler ;未定义指令处理异常代码 SwiHandler ;软中断异常处理代码 PabortHandler ;指令预取异常代码 DataHandler ;数据访问异常代码 IRQHandler ;普通外部中断处理代码 FIQHandler ;快速中断处理代码 end
耳朵
中断的概念;
• 按信号源分类,中断可以分为: 外中断:一般称为中断,是指来自处理器和主存外部的中断, 与现行指令无关。 内中断 :一般称为异常,是指来自处理器和主存内部的中断, 与现行指令相关。
庖丁教育,成就未来
2/20
ARM处理器中断的分类
复位异常:当处理器的复位管脚复位电平有效 未定义指令异常:执行了一条未定义的指令 ARM处理器共支持8路中断,其中
中断的概念;
• 通俗地说,中断就是打断,你在专心某件事情的时候,突然出 现了一件意想不到的事情,这个意想不到的事情就是中断。例 如:你在图书馆自习的时候,突然手机响了。 • 我们人具有很好的感知”中断的能力“,请看:
“四路中断监听能力” 当你专注与某件事情时,就依靠 对你重要吗?可以没有 它们来感知外界异步的事件—— 眼睛 吗? 中断;你可以同时监听4路中断。 鼻子 重要!不能没有! cpu是对人脑的模拟,同 皮肤 样需要具有对异步事 件——中断进行感知的 能力,ARM处理器也不例 外。 庖丁教育,成就未来 1/20
ARM中断的响应过程
庖丁教育,成就未来
11/20
ARM中断的响应过程
中断产生 执行中断处理程序: • 进行必要的现场保护; • 处理中断事件 程 序 员 完 成
硬 件 完 成
1. cpu中止正在执行的事件; 2. 自动将PC备份到lr; 3. 自动备份当前的cpsr寄存 器到spsr寄存器
中断返回: • 恢复现场; • pc跳转到原中断位置的下 条指令
1. 自动修改CPU的模式; 2. 自动跳转到中断向量处;
庖丁教育,成就未来
12/20
ຫໍສະໝຸດ Baidu
• 在每一个向量处填入什么样的指令 当某一类型的异常发生时,ARM处理器 可以使当发生异常时cpu会真正跳转 能够跳转到异常处理程序的秘密就在于 到异常中断处理程序? ARM处理器的中断向量表!
问题的提出
发生了某类型异常,则pc就指向 对应的地址,强迫cpu从对应地址 取指令执行,例如:发生复位异 常,cpu会从0地址取指令执行。
???
异常到来
pc ? 当异常处理程序执行完后,cpu又如何 返回接着做原来被中断的工作呢?也 即异常处理完后,如何让pc指向cmp r0,r1指令?
异 常 处 理 程 序 ISR
庖丁教育,成就未来
6/20
ARM中断的响应过程
• 当某一类型的异常发生时,ARM处理器 能够跳转到异常处理程序的秘密就在于 ARM处理器的中断向量表!
地址
异常
内存单元
0x00 0x04
0x08 0x0c 0x10 0x14 0x18 0x1c
复位 未定义指令
软中断 预取指令中止 预取数据终止 保留 IRQ FIQ
ldr pc,=irq_handler
假设下面为irq中断处理程序:
irq_handler iqr中断处理 中断返回
庖丁教育,成就未来
9/20
15/20
完成的主要功能包括:关看 门狗、关中断、设置系统时 钟、初始化sdram存储控制 器、设置栈指针。
庖丁教育,成就未来
复位时安装中断处理程序(静态的方式安装):方法二
area init,code,readonly entry ldr pc,ResetHandler ldr pc,UndefHandler ldr pc,SwiHandler ldr pc,PabortHandler ldr pc,DataHandler b . ldr pc,IRQHandler ldr pc,FIQHandler ResetHandler dcd Reset_Handler UndefHandler dcd Undef_Handler SwiHandler dcd Swi_Handler PabortHandler dcd Pabor_tHandler DataHandler dcd Data_Handler IRQHandler dcd IRQ_Handler FIQHandler dcd FIQ_Handler
一路是保留的,即目前 ARM处理 软中断:执行软中断指令 swi
ARM处理器
器家族还没有指明其用于哪种类 预取指令异常:在一个未知内存取指令 型的中断。 ARM处理器正是通过这8路中断来 预取数据异常:在一个未知内存取数据 监听指令执行过程中的异常事件。
保留(暂未使用) IRQ外部中断:当处理器的外部中断请求引脚有效, 且CPSR中的I位为0时,产生IRQ中断 FIQ外部中断:当处理器的快速中断请求引脚有效, 且CPSR中的F位为0时
庖丁教育,成就未来
3/20
ARM处理器中断的分类
• 当异常发生时,ARM处理器会进入相应的异常模式(在不同的模 式下ARM处理器有什么区别?)
庖丁教育,成就未来
4/20
庖丁教育,成就未来
ARM中断的响应过程
当然ARM处理器获知异常事件发生后,接下来做的工作就应该暂 当异常产生后, cpu如何跳转到异常处理程序呢? 停当前的工作转去对异常事件进行处理,而异常处理完毕后再 也即当中断产生后如何让指令指针寄存器 pc指向 接着做原来被中断的工作。 cpu所要做的 ? pc 异常处理程序的第一条指令呢 工作
相关文档
最新文档