中断机制isr

中断时异常的一种。

异常向量表,可以放到0x00000000或者放到0x300000008

保存和恢复其他模式的现场:

保存现场:

1.设置IRQ栈 2.保存LR 3.保存r0-r12

IRQ handle:

1. ldr sp, =IRQ_STACK

2.中断返回的PC保存在LR中,CPSR(自动)保存在(IRQ模式下)SPSR下。 sub lr,lr,#4

3.保存r0-r12,lr到irq模式下的栈上

stmfd sp!, {r0-r12,lr}

bl irq_handler

//处理完中断返回

ldmfd sp!, {r0-r12,pc}^ ^就是cpsr返回

第二个阶段irq_handler识别多个中断中的一个,然后调用中断处理流程

每个中断都有1个中断号,进入irq_handler后,先查阅中断源寄存器和子中断寄存器确定中断编号,然后用这个编号去中断isr数组中找到isr地址。

中断寄存器:可以读,但是写只能写中断enable,不能写中断disable

intselect irq还时fiq

irqstatus 只读 硬件自动设置该值表示中断发生了

priority0-priority31 中断嵌套,对实时性要求高的需要,比如单片机中比较重要,210中不重要

vecaddr0-vecaddr31 硬件自动识别中断号,找到地址,只读 避免软件查找中断源和isr

外部中断源(GPIO)

EIN0-EIN31

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【摘要】本文详解了 Linux 内核的中断实现机制。首先介绍了中断的一些基本概念,然后分 析了面向对象的 Linux 中断的组织形式、三种主要数据结构及其之间的关系。随后介绍了 Linux 处理异常和中断的基本流程, 在此基础上分析了中断处理的详细流程, 包括保存现场、 中断处理、中断退出的软中断执行中断返回的进程切换等问题。最后介绍了中断相关 的 API,包括中断注册和释放、中断关闭和使能、如何编写中断 ISR、共享中断中断上下 文中断状态等。 【关键字】中断,异常,hw_interrupt_type,irq_desc_t,irqaction,asm_do_IRQ,软中断, 进程切换,中断注册释放 request_irq,free_irq,共享中断,可重入,中断上下文 1 中断概述 1.1 为什么需要中断? 处理器的速度跟外围硬件设备的速度往往不在一个数量级上,因此,如果内核采取让处理器 向硬件发出一个请求,然后专门等待回应的办法,显然差强人意。既然硬件的响应这么慢, 那么内核就应该在此期间处理其他事务,等到硬件真正完成了请求的操作之后,再回过头来 对它进行处理。想要实现这种功能,轮询(polling)可能会是一种解决办法。可以让内核定期 对设备的状态进行查询, 然后做出相应的处理。 不过这种方法很可能会让内核做不少无用功, 因为无论硬件设备是正在忙碌着完成任务还是已经大功告成,轮询总会周期性地重复执行。 更好的办法是由我们来提供一种机制,让硬件在需要的候再向内核发出信号(变内核主动 为硬件主动)。这就是中断机制

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值