嵌入式学习笔记(34)S5PV210中断处理的编程实战

6.8.1中断控制器初始化

主要工作有:第一阶段绑定异常处理程序到异常向量表;禁止所有中断源;选择所有中断类型为IRQ;清理VICnADDR寄存器为0。

为什么要禁止所有中断源:

因为中断一旦打开,因为外部或硬件自己的原因产生中断后一定就会寻找isr,而我们可能认为自己用不到这个中断就没有提供isr,这时它自动拿到的就是乱码,程序可能跑飞,所以不用的中断一定要禁掉。一般的做法是先全部禁止,然后逐一打开自己感兴趣的中断,一旦打开就必须给这个中断提供相应的isr并绑定好。

6.8.2中断的使能与禁止

思路是先根据中断号intnum判断这个中断属于VIC几,然后在用中断号减去这个VIC的偏移量,得到这个中断号在本VIC的偏移量,然后1<<x位,写入相应的VIC的INTENABLE/INTENCLEAR寄存器即可。

6.8.3绑定自己实现的isr到VICnVECTADDRx

(1)先要搞清楚2个寄存器的区别:VICnVECTADDRx和VICnADDR。

VICnADDR是将真正产生中断的VICnVECTADDRx中isr的地址复制到VICnADDR中。

(2)VICVECTADDR寄存器一共有4*32个,每个中断源都有一个VECTADDR寄存器,我们应该将自己为这个中断源写的isr地址丢到这个中断源对应的VECTADDR寄存器中即可。

6.8.4真正的中断处理程序如何获取isr

当发生中断时,硬件会自动把相应中断源的isr的地址从VICnVECTADDR寄存器中推入到VICnADDR寄存器中,所以我们第二阶段的第二步irq_handler中,只需要到对应的VICnADDR寄存器中去拿出isr地址,调用执行即可。

总结:第3步绑定isr到VICnVECTADDR和第4步中断发生时第二阶段的第二部分如何获取isr地址,这两步是相关的。这两个的结合技术,就是我们一直在说的210的硬件自动寻找isr的机制。

整个中断的流程梳理:

整个中断的工作分为2部分:

第一部分是我们为中断响应而做的预备工作:

1.初始化中断控制器

2.绑定写好的isr到中断控制器

3.相应中断的所有条件使能

第二部分是当硬件产生中断后如何自动执行isr:

1.第一步,经过异常向量表跳转入IRQ/FIQ的入口

2.第二步,做中断现场保护(在start.S中),然后跳入irq_handler

3.第三步,在irq_handler中先搞清楚是哪个VIC中断了,然后直接去这个VIC的ADDR寄存器中取isr来执行即可。

4.第四步,isr执行完,中断现场恢复。直接返回继续做常规任务。

嵌入式物联网的学习之路非常漫长,不少人因为学习路线不对或者学习内容不够专业而错失高薪offer。不过别担心,我为大家整理了一份150多G的学习资源,基本上涵盖了嵌入式物联网学习的所有内容。在评论区私信“嵌入式”0元领取学习资源,让你的学习之路更加顺畅!记得点赞、关注、收藏、转发哦!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值