zoukankan      html  css  js  c++  java
  • ARM异常和中断的总结

    -----------------------------------------------------------------------------------------------------------------------------------

    ARM 920T     S3C2440A

    -----------------------------------------------------------------------------------------------------------------------------------

    异常
      异常类型
               7种,分别是RST,UND,SWI,PRE_ABT,DATA_ABT,IRQ,FIQ
      异常模式
           5种,分别是SVC,UND,ABT,IRQ,FIQ
      异常触发
            SWI指令,SWI 0x4
        异常响应
          硬件做4件事情
              1 保存 PC 到 LR_exp
              2 保存 CPSR 到 SPSR_exp
              3 修改 CPSR 到 exp
              4 修改 PC 到 exp->0x??
      异常向量表
          从 0 地址开始
          一共8个表项,其中0x14地方保留
          每个表项是 一条跳转指令 
           B handler  (0xEAxxxxxx)
           ldr pc, =...  
        保存现场
          压栈保存,stmfd sp!, {r0-r12, lr}
      异常处理
          通常用 C 语言实现,通过 r0, r1, r2, r3 传参
       恢复现场
          出栈保存,ldmfd sp!, {r0-r12, lr}
       异常返回
          要点:地址和模式的返回必须同时完成
          movs pc, lr
          ldmfd sp!, {r0-r12, pc}^
       系统调用的实现
          用汇编SWI,通过 mov r0, r1, r2
          用C实现SWI, int __swi(0x4)  syscall(int,...);
    --------------------------------------------------------------------------------------------------------------------------------------------------

    -------------------------------------------------------------------------------------------------------------------------

    中断 
          中断源
          使能 enable
               触发方式 trigger method  
         中断控制器
          屏蔽位 mask
          悬挂位 pending
          模式选择 IRQ/FIQ
         ARM内核
          IRQ禁止位 CPSR I-bit
        中断的初始化流程
          设置好 0x18 处的跳转指令 b irq_handler
          设置 IRQ 模式下的栈指针 sp
          设置 SVC 模式下的栈指针 sp
          初始化中断源 GPIO
                    设置 GPF0 管脚的功能复用模式为 EINT0
                    设置 EINT0 功能触发方式为 Falling Edge Trigger
          初始化中断控制器 Interrupt Controller
               设置 INTMSK 屏蔽位 打开unmask
               设置 INTMOD 模式为 触发IRQ异常
               清除 INTPND, SRCPND 已有的bit
          设置CPSR的I-bit ,清除禁止位
               汇编语言,用 MSR 特权指令
          满足中断触发条件,制造出一个下降沿  
         中断处理
          清除 Pending Bit 悬挂位
               1 先清除,再处理(为了防止丢失在处理过程中再来的同源中断)
               2 先清除SRCPND,再清除INTPND(否则就会重复一次中断,来2次)
               3 写1清0,写0则无效 PDN = 1<<0
        中断返回 (IRQ&FIQ)
          subs pc, lr, #4
    --------------------------------------------------------------------------------------------------------------------------------------------------------------------- 

  • 相关阅读:
    sleep(),wait(),yield(),notify()
    (三)终结任务
    (二)共享受限资源
    (一)基本的线程机制
    (十八)多线程
    (十七)泛型程序设计
    视频监控中带宽及存储容量的计算
    turtle实例
    python ——钟表
    Python Tkinter Grid布局管理器详解
  • 原文地址:https://www.cnblogs.com/sunzl1987/p/2323036.html
Copyright © 2011-2022 走看看