嵌入式Linux开发——裸板程序之中断控制器

ARM体系的CPU具有7种工作模式

  1. 用户模式(usr):ARM处理器正常的程序执行状态
  2. 快速中断模式(fiq):用于高速数据传输或通道处理
  3. 中断模式(irq):用于通用的中断处理
  4. 管理模式(svc):操作系统使用的保护模式
  5. 数据访问中止模式(abt):当数据或指令预取终止时进入该模式,用于虚拟存储以及存储保护
  6. 系统模式(sys):运行具有特权的操作系统任务
  7. 未定义指令中止模式:(und):当未定义的指令执行时进入该模式,可用于支持硬件协处理器的软件仿真

模式不同的时的区别

  1. 不同的寄存器
    在不同的模式下同样的汇编指令所操作的寄存器不同,在切换模式的时候,需要提前保存“现场”,由于模式切换会改变寄存器,那么不保存则数据会丢失。


    不同模式下的寄存器情况
    不同模式下的寄存器情况
  2. 不同的权限
    CPU在不同的模式下,配合MMU可以限制部分内存的访问权限
  3. 触发条件
    上电后,位于管理模式;
    发生中断,进入irq模式等等

异常和中断

  • 中断
    当程序在处理一件事时,有两种方法能够获取其他的状态改变的信息,第一种是不断的去查看是否状态发生了改变,第二种是采用中断的方式来通知程序状态已经改变了。
    中断是一种异常。
    发生了异常之后,会发生:
    1.CPU强制进入异常模式(相当于切换了寄存器);
    2.PC指针(PC是指寄存器PC,它里边的值总是指向当前程序的运行点的地址。)等于异常入口(异常入口是一些固定的地址),也就相当与cpu跳转到对应的地址进行执行,异常处理程序。

2440的中断体系结构
使用中断的前提,需要有一个程序“被中断”

  1. 中断发生,保存“别人”的状态
    在能发生中断前,需要先使能中断(之前需要有一些初始化(初始化引脚))。
  • 中断处理
    分辨中断源,进行不同的处理,处理完后清除中断状态
  • 恢复“别人”的状态

那么在2440芯片中按照上面的中断过程来看,那么2440中一定会有:

  1. 使能/禁止中断
  • 分辨中断源(状态寄存器)
  • 何种状态发生中断:高电平触发/低电平触发/上升沿触发/下降沿触发等
  • 引脚设置为中断引脚(GPIO为EINT,串口等则会不同,具体和硬件相关)
  • 中断的优先级寄存器,来处理多个中断同时发生的处理情况
2440的中断程序图
2440的中断程序图
@************************************************************************
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值