你好,游客 登录 注册 搜索
背景:
阅读新闻

S3C2440-中断体系架构

[日期:2015-12-27] 来源:Kelvin-CnBlogs  作者:Kelvin [字体: ]

1.ARM的体系与架构

    1.1.ARM体系的CPU有以下其中工作模式:

  • 用户模式 (usr)
  • 快速中断模式 (fiq)  
  • 中断模式 (irq)
  • 管理模式 (svc)
  • 数据访问终止模式 (abt)
  • 系统模式 (sys)
  • 未定义指令终止模式 (und)

    1.2.ARM寄存器:

  • 31个通用寄存器 : R0~R7(未备份寄存器) , R8~R14(备份寄存器) , R15( 程序计数器PC ) 
  • 6个状态寄存器   : CPSR( 当前程序状态寄存器) , SPSR(备份程序状态寄存器)

         

 

2.ARM状态下当异常发生时, 处理器将切换进相应的模式:

    2.1. 当异常发生时, 处理器将自动完成以下事情 : 

  • 在异常工作模式的连接寄存器R14中保存前一个工作模式的下一条指令(即将执行)的地址,

        对于ARM状态, 这个值是当前PC值加4或者加8

  • 将CPSR的值复制到异常模式的SPSR
  • 将CPSR的工作模式位设为这个异常对应的工作模式
  • 令PC值等于这个异常模式在异常向量表中的地址 , 即跳转到异常向量表中执行对应的指令     

    2.2. 当从异常模式返回到之前的工作模式时, 则需软件完成以下工作 :

  • 进入异常时, R14保存了前一个工作模式的下一个指令地址 ,所以要将他减去一个适当的值
  • 将SPSR的值复制回CPSR

    2.3. 关于R14在发生异常时保存的地址参考表: 

   

3. 使用中断的步骤 :

    3.1. 设置好中断模式和快速中断模式下的栈 , 它们分别使用自己的栈

    3.2. 准备好中断处理函数 :

  • 异常向量地址 : irq(0x00000018) , fiq(0x0000001c)
  • 中断服务程序(isr) : 对于irq,通过判断INTPND或者INTOFFSET来确定中断源, fiq只有一个中断
  • 清除中断 : 如果不清除中断会让CPU误以为中断又一次发生了

    3.3. 进入、退出中断或快速中断时, 需要保存、回复中断的运行环境

         

 

    3.4. 设置中断涉及到的寄存器 .

   

    3.4.1. 外部中断被分为被SUBSRCPND/SUBMASK寄存器控制的中断,不被

             SUBSRCPND/SUBMASK寄存器控制的中断.

    3.4.2. 外部中断必须经过SRCPND( SOURCE PENDING)寄存器的控制

    3.4.3. 外部中断最终经过INTMASK(中断屏蔽)与INTMODE(中断模式)寄存器

             的控制

    3.4.4. 外部中断经过PRIORITY(优先级寄存器)的仲裁决定优先级

    3.4.5. 通过INTPND寄存器来确认中断的发生以及清除中断 ,同一时间内只有一位

              被置一

本文永久更新链接地址http://www.linuxidc.com/Linux/2015-12/126804.htm

linux
相关资讯       S3C2440 
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数

       

评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款