嵌入式Linux应用开发完全手册(三)中断

嵌入式Linux应用开发完全手册 第9章 中断
摘要由CSDN通过智能技术生成

9 中断体系结构

9.1 ARM中断体系

ARM CPU工作模式和状态
  • 工作模式,7种,1种用户模式,其他6选中特权模式
    • usr 用户模式,ARM处理器正常的工作模式
    • fiq 快速中断模式,高速数据传输或者通道处理
    • irq 中断模式,通用中断处理
    • svc 管理模式,操作系统使用的保护模式
    • abt 数据访问终止模式,数据或指令预取终止时进入该模式,用于虚拟存储及存储保护
    • sys 系统模式,运行具有特权的操作系统任务
    • und 未定义指令终止模式,未定义的指令得到执行的时候进入该模式,可用于支持硬件协处理器的软件仿真
      大多数程序运行于用户模式,进入特权模式是为了处理中断、异常,或者访问被保护的系统资源。
  • 工作状态,2种
    • ARM状态,处理器执行32位的ARM指令
    • Thumb状态,处理器执行16位的Thumb指令
      CPU一上电就处于ARM状态,无需关心CPU状态。
  • 寄存器
    • 同一时刻可见的寄存器有17个
      • r0 - r12
      • r13 sp
      • r14 lr
      • r15 PC
    • 不同模式下并不会复用所有的寄存器
      • fiq r8 - r14 是独立的
      • svc,abt,irq,und r13, r14 是独立的
      • fiq,svc,abt,irq,und SPSR是独立的
    • CPSR各位含义,详见CPSR
      • N 结果是否为负数
      • Z 运算结果是否为0
      • C 进位/错位/移位溢出
      • V 溢出
      • I,F IRQ中断禁止,FIQ中断禁止
      • T Thumb状态
      • mode CPU当前工作模式
异常进入和返回流程
  • 异常进入
    1. 异常工作模式下的lr保存进入前的下一个指令地址
    2. CPSR复制到SPSR
    3. 设置CPSR到当前异常的工作模式
    4. 设置PC到这个异常的异常向量表入口地址
  • 异常返回
    1. 异常模式下的LR,减去适当的值,设置到PC
    2. SPSR的值恢复到CPSR
中断处理过程
  1. 中断控制器汇集各类外设发出的中断信号,通知CPU
  2. CPU保存当前程序运行环境,调用中断服务程序ISR来处理这些中断
  3. ISR中通过读取中断控制器、外设的相关寄存器识别中断源,进行相应处理
  4. 清除中断,读写中断控制器和外设寄存器
  5. 恢复被打断的程序
    Markdown
2440中断处理流程

Markdown

  • 中断源
    • 含有自子中断的中断源,上图可以看到,子中断先过一遍mask,再设置SRCPND
    • 不含有子中断的中断源,直接设置SRCPND
    • 中断屏蔽
    • 子中断先经过INTSUBMASK判断
    • 不含有子中断和经过判断的子中断,再过一遍INTMASK
    • 优先级
    • 如果是FIQ,INTMOD是1,不用经过优先级选择,直接执行。FIQ只能分配一个。
    • 如果是IRQ,需要经过优先级选择,最高优先级的中断,被设置到INTPND
    • 中断执行
    • ISR(中断处理程序)读INTPND或者INTOFFSET确定中断源

9.2 2440中断控制寄存器

SUBSRCPND

Markdown

  • 2440有15个子中断源,能看到分为5组,分别是这5个中断的子中断
    • INT_WDT_AC97 看门狗
    • INT_CAM 摄像头
    • INT_ADC 触摸板
    • INT_UART0, UART1, UART2 串口
  • 发生中断的时候相应的位被自动设置成1
  • 想要清除的话,需要再写入对应位置的1,请注意不是清零,是写1
INTSUBPND

Markdown
某位被置1的时候,对应中断被屏蔽

SRCPND

Markdown
Markdown
处于pending状态的中断源。
来源有两类,参考上文,带有子中断的,和不带有子中断的。
清除某一位,需要对某一位写1而不是清0.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值