第06课 中断控制器

 第6课 中断体系结构

1. ARM中断体系结构 

        7种工作模式

       异常

2. S3C2440中断体系结构

       中断处理过程

       相关寄存器

       源码分析

 

 

7种工作模式

 

每种工作模式有:

 不同的寄存器

 不同的权限 (配合mmu)

 不同的触发条件

  1. 上电后位于 svc
  2. 发生中断,IRQ模式

 

 

中断

比如你在家里看电视,怎么知道有客人来

  1. (查询)每过5分钟去看看有没有人来
  2. (中断)客人按门铃

程序想知道key被按下

  1. 查询
  2. 中断,中断是一种异常,(数据访问中止是一种异常,未定义指令中止也是一种异常)

 

发生异常之后

  1. CPU进入异常模式,比如中断模式,或者取址异常模式,相当于切换寄存器
  2. PC指针=异常入口(固定)

 

比如要转入中断模式,PC指针会指向0x18 HandleIRQ,0x18,0x08这些地址就叫做异常入口

第06课 中断控制器

每个模式都有一组寄存器,有的共用,有的不共用每组独有的寄存器称谓备份寄存器。

模式转换过程中

  1. 保护现场。

保存非备份寄存器,恢复的时候,恢复保存的内容即可。

 

怎么用中断,什么“中断”

设置中断,初始化,使能中断

  1. 中断发生 保护现场
  2. 中断处理 分便中断源,进行不同的处理,清理中断
  3. 恢复现场

第06课 中断控制器

中断至少涉及5个方面得寄存器

  1. 使能/禁止寄存器;
  2. 分辨中断源的状态寄存器;
  3. 设置中断条件的寄存器;(比如高低电平,上下跳边沿触发)
  4. 引脚设置即硬件相关的设置
  5. 优先级寄存器

 

从芯片手册上的介绍

 

 

SUB子 SRC源 PND等待

 

SUB下一级 MASK屏蔽->屏蔽寄存器

SRCPND显然也是状态寄存器,使得中断源等待处理

MASK另一个屏蔽使能寄存器

Priority优先级寄存器

INTPND看哪些中断源还在等待

MODE 模式寄存器

IRQ FIQ直接送到CPU去

书上有详细介绍

 

看一个程序首先看makefile

第06课 中断控制器

可以看出有四个文件

 

 

接下来看代码

第06课 中断控制器

一上电跳转到 Reset

可以看出每个异常向量相隔四个字节,一般处理不在这四个字节之内,所以用跳转命令跳转到别处。

比如说跳转到Reset对应的程序

第06课 中断控制器

设置栈指针才能调用C函数,关看门狗等等

HandleUndef:

b    HandleUndef

此处为死循环,还没进行处理

最后要设置总中断I位使能

 

 

每个模式的r13记载着每个模式的栈指针。

 

第06课 中断控制器

通过给cpsr寄存器复制,进入中断模式

进入每个模式的时候,要事先设置好栈指针

ldr sp, =3072

0xd2的值的意思可以在下表寻找

第06课 中断控制器

M0~M4代表不同的工作模式

I F位是全局中断,快中断设置。

比如说一开始0xd2-----1101 0010禁止所有的中断及快中断

 

第06课 中断控制器

中断初始化

INTMSK 使能中断源中断

 

发生中断:

硬件

  1. 进入中断模式,切换寄存器,其中最重要一个寄存器还有一个sp寄存器
  2. pc=IRQ入口地址

 

软件:

 

sub lr,lr, #4

计算返回地址,当前lr值减去4,有ARM架构决定

  1. b handle IRQ 计算返回地址“被中断处”的地址
  2. 保存现场 寄存器
  3. 调用处理函数
  1. 分辨中断
  2. 处理
  3. 清除
  1. 恢复被中断程序

 

中断服务程序

 

INTOFSET中断源服务程序,判断哪个按键按下

 

 ENTPND是中断等待寄存器意味着正在处理中断,清到可中断状态

 

第06课 中断控制器

最后跳转PC回到中断前程序位置。

第06课 中断控制器

 

第06课 中断控制器

第06课 中断控制器