本文主要说明了在uboot中添加FIQ中断时遇到的问题以及对应的解决办法。

首先交代一下项目的软硬件环境。硬件方面,使用s3c2440作为主控芯片,外接串口、网卡等设备。软件方面,主控芯片上电后运行uboot程序,之后通过网口在线烧写应用程序至RAM中运行。为了使设备始终处于可控状态,需要分别在uboot及应用程序之中添加遥控程序,遥控程序使用FIQ中断来实现。uboot程序的修改主要在\arch\arm\cpu\arm920t\start.s文件及arch\arm\lib\board.c文件中。

问题:

一、发生FIQ中断之后处理器做了哪些事情?

发生中断之后ARM处理器需要处理完当前的指令,然后自动完成以下事情:

1.将当前程序状态寄存器CPSR保存到FIQ模式下的备份程序状态寄存器SPSR_fiq之中(执行中断返回时其逆过程不能自动完成)。

2.将程序计数器PC(R15)值减4存入FIQ模式下的链接寄存器R14_fiq之中(也就是lr)。

3.将PC的值强制改为ox0000001c(异常向量表中FIQ的入口地址),并跳转到该地址执行。

说明:

1.ARM处理器定义了undefined_instruction(0x00000004)、software_interrupt(0x00000008)、prefetch_abort(0x0000000c)、data_abort(0x00000010)、irq(0x00000018)、fiq(0x0000001c)等几种异常,当异常发生时,芯片会自动完成上述操作并跳转到相应的地址去执行,其中芯片上电后自动跳转至0x00000000这个地址执行,一般会在这些异常的地址处存放跳转指令,以实现后续的操作。

1 _start: b start_code2 ldr pc, _undefined_instruction3 ldr pc, _software_interrupt4 ldr pc, _prefetch_abort5 ldr pc, _data_abort6 ldr pc, _not_used7 ldr pc, _irq8 ldr pc, _fiq

其中start_code为启动代码。

二、跳转至异常向量表后需要做那些事情?

处理器将PC强制指向0x0000001c之后,再次跳转至_fiq标号处,接下来用户需要编写程序完成以下事情:

1.计算程序的返回地址。因为ARM9采用5级流水线结构,且程序的执行阶段处在流水线的第3级,那么PC始终指向正在执行指令的下两条指令处,也就是正在执行的指令地址为PC-8(程序向高地址方向执行)。由于FIQ发生时处理器会处理完正在执行的指令,这时PC值也被更新,也就是PC=PC+4,然后处理器自动将PC值减4存入R14_fiq寄存器之中。程序返回的地址应该是FIQ发生时正在处理的指令的下一条指令处,所以将R14_fiq中的地址减4就是程序应该返回的地址。

2.根据需要,有选择地保存寄存器lr(使用bl指令时会更改该值)、r0-r12(均为通用寄存器,若被更改则无法恢复至FIQ发生前的状态,一般将这些寄存器的值进行入栈保护,这就要求事先在启动代码中设置FIQ模式的堆栈)。

3.跳转至中断处理函数运行,注意使用bl(保存下一条指令地址,可以返回),而不能使用b(不保存下条指令地址,不能返回)。

4.在执行完中断处理函数之后,需要将lr、r0-r12出栈恢复。

5.将lr的值传递给PC,跳转至FIQ发生时的下一条指令(使用subs pc, lr, #0的目的是为了将SPSR_fiq中的值恢复至CPSR中)。

1 fiq:2 subs lr, lr, #4

3 stmfd sp!, {r0-r12,lr}4 bl roger_test5 ldmfd sp!,{r0-r12,lr}6 subs pc, lr, #0

三、中断处理函数的位置?

处理器在上电之后跳转至启动代码处运行,按顺序进行相关寄存器及外设的初始化工作。在arch\arm\lib\board.c的board_init_r( )函数的末尾打开FIQ中断,此时处理器的初始化工作已经完成且已处于C语言环境。

fiq中断的入口地址_uboot中添加FIQ中断及相关问题相关推荐

  1. fiq中断的入口地址_嵌入式技巧:ARM的三种中断调试方法介绍

    嵌入式软件开发流程 参照嵌入式软件的开发流程.第一步:工程建立和配置.第二步:编辑源文件.第三步:工程编译和链接.第四步:软件的调试.第五步:执行文件的固化. 在整个流程中,用户首先需要建立工程并对工 ...

  2. fiq中断的入口地址_ARM 之FIQ(快速中断) IRQ(中断)

    IRQ,FIQ定义:  这就是个普通中断,当我们程序定义了该中断,并且在程序运行的时候产生了IRQ中断,则此时的芯片是这样运行的------中断处理器吧利用IRQ请求线来高速ARM,ARM就知道有个I ...

  3. fiq中断的入口地址_FIQ和IRQ区别

    FIQ 和 IRQ 区别 FIQ 和 IRQ 是两种不同类型的中断, ARM 为了支持这两种不同 的中断,提供了对应的叫做 FIQ 和 IRQ 处理器模式( ARM 有 7 种处 理模式) .一般的中 ...

  4. optee中添加一个中断以及底层代码的相关解读

    optee.中断.gic.gicv3.itr_add.安全中断.tee.trustzone.ATF ★★★ 个人博客导读首页-点击此处 ★★★ . 说明: 在默认情况下,本文讲述的都是ARMV8-aa ...

  5. html的段落标志中 标注行中断,?HTML的段落标志中,标注行中断的是?

    A:,B:,C: ,D: 答案 查看答案 ?HTML的段落标志中,标注行中断的是? 解析 [单选题]下列关于元素在网页中的叠放顺序描述,不正确的是? [单选题]HTML代码表示? [单选题]创建选项菜 ...

  6. 中断工作原理在现代计算机中的应用,中断、DMA、通道

    一.轮询方式 对I/O设备的程序轮询的方式,是早期的计算机系统对I/O设备的一种管理方式.它定时对各种设备轮流询问一遍有无处理要求.轮流询问之后,有要求的,则加以处理.在处理I/O设备的要求之后,处理 ...

  7. fiq中断的入口地址_ARM中断模式(IRQ)和快速中断模式(FIQ)区别比较

     概念 IRQ(Interrupt Request):指中断模式. FIQ(Fast Interrupt Request):指快速中断模式. IRQ与FIQ是ARM处理器的两种不同编程模式(ARM有7 ...

  8. fiq中断的入口地址,是什么FIQ和IRQ中断系统之间的区别?

    I want to know the difference between FIQ and IRQ interrupt system in any microprocessor, e.g: ARM92 ...

  9. 中断向量表 异常相量表 中断向量(中断函数入口地址)ARM和X86异常向量表不同

    STM32的中断向量表是干什么的?到底有什么用?它放在哪里? 一.中断向量表里有什么?它放在那里?到底有什么用? 1.中断向量表实际上就是存放在Code区(也就是STM32内部的Flash区)从0x0 ...

最新文章

  1. svn 第一次使用注意事项
  2. 如何阻止ajax自动重定向_重发和重定向有什么区别与重定向应用
  3. 01python入门一
  4. 终端、虚拟控制台与伪终端
  5. 前端学习(1859)vue之电商管理系统电商系统之梳理项目结构
  6. slider获取点击 unity_Unity基础 | 70分钟带你轻松入门
  7. DTS开发记录(5)-- 挑战增量导出
  8. 在windows XP下如何用Vmware装Linux操作系统
  9. python并行计算for循环_在python中并行化这个嵌套的for循环
  10. java.securti_springboot集成springsecurity 使用OAUTH2做权限管理的教程
  11. POJ NOI MATH-7829 神奇序列求和
  12. 第一次使用博客,略激动。
  13. linux 下拉式 终端,Gnome桌面的下拉式终端: Guake
  14. java 时间计算_Java程序运行时间计算
  15. 深度解析工业机器人主流离线编程软件
  16. 计算机打印机图标删除吗,故障之:打印图标消失及打印任务无法取消
  17. WanderAndLogData
  18. MapReduce名词解释
  19. 我的翻转课堂教学实践
  20. Linux - 零拷贝技术

热门文章

  1. 移远无线网络通讯模块的使用
  2. Say Hello 一下
  3. 图形数据库Neo4J简介
  4. 腰围ndows怎么管理员删除,电脑里面本地连接的IP地址怎样设置啊?我设置不来.开机起来都慢的要死...
  5. 网站后台 英文用户名不区分大小写都可以登录...
  6. 拿到月薪20k的前端工程师简历是什么样的?
  7. 永远年轻,永远热泪盈眶
  8. 华为NAT地址转换配置
  9. 变频器生产技术 变频器220v转380V方案
  10. [Expression Blend 4] [SketchFlow系列] Chapter 2 瞭解SketchFlow Map (中)