zoukankan      html  css  js  c++  java
  • arm异常与中断

    1 swi中断的处理步骤:

    1) 进中断时pc->lr, cpsr->spsr, cpsr_mode置为特权模式,均由硬件完成。

    2)注册中断向量表由软件完成,可以用B指令,也可以用ldr跟dcd表的方式,在中断向量处放置一条跳转指令,跳到中断处理handler处。

    3)一级中断处理程序主要目的是根据arm或者thumb状态获取swi号,期间注意保存寄存器和返回。

    4)二级中断处理程序可以用C或者汇编,主要是一个分支结构,根据中断号做相应的事,可以用函数指针方式实现。

    -----应用程序中使用软中断时,可以使用__swi (仅armcc)关键字声明软中断函数,调用时自动获取中断号。

    2 基于s3c2410的irq中断

    先上个直接从芯片手册里截的图

    前面的subsrcpnd srcpnd intpnd都是三星提供的sfr,是做到芯片里面的,它们的清零方式比较特殊,是对相应的位赋1,联想到外部中断的置一方式只能由外部事件驱动,所以这个也不难理解。

    当中断被送到irq时处理步骤如下:

    1 查跳到异常向量表0x18处,取一条跳转指令,跳转到一级irq中断处理函数中。

    2 一级中断处理函数的任务是通过intoffset寄存器,查的中断源的偏移号,然后根据偏移号和基地址得到二级中断处理函数的地址,将此地址赋给pc,然后跳转到二级中断处理函数处。

    3 二级中断处理函数可能还要查相应的寄存器,得到具体的中断源,然后进行相应的处理。

    4 中断返回,因为进入中断时用户态的cpsr已经压入spsr中,所以可以直接用subs pc, lr, 4这种格式恢复。恢复原来的寄存器模式和状态。

    to be continue。。。

  • 相关阅读:
    Java Web学习笔记3
    Java学习笔记11
    diff 比较两个文件的差异
    Java学习笔记10
    appium——如何导出夜神模拟器下载“微信”app的apk
    python之文件操作模块(os和shutil)
    浅谈HTTP和HTTPS
    LUNIX命令集
    ubuntu软件管理工具的使用——dpkg和apt
    CSS学习—day1
  • 原文地址:https://www.cnblogs.com/liujiahi/p/2196360.html
Copyright © 2011-2022 走看看