1.8.7.S5PV210中断处理的主要寄存器

朱老师笔记

1.8.7.1、VICnINTENABLE和VICnINTENCLEAR

(1)VICnINTENABLE 对应interrupt enable,INTENCLEAR对应interrupt enable clear
(2)INTENABLE寄存器负责相应的中断的使能,INTENCLEAR寄存器负责相应的中断的禁止。
(3)当我们想使能(意思就是启用这个中断,意思就是当硬件产生中断时CPU能接收的到)某个中断时,只要在这个中断编号对应的VICnINTENABLE的相应bit位写1即可(注意这个位写1其他位写0对其他位没有影响);如果我们想禁止某个中断源时,只要向VICnINTENCLEAR中相应的位写1即可。
注意:这里的设计一共有2种:有些CPU是中断使能和禁止是一个寄存器位,写1就使能写0就进制(或者反过来写1就进制写0就使能),这样的中断使能设计就要非常小心,要使用我们之前说过的读改写三部曲来操作;另一种就是使能和禁止分开为2个寄存器,要使能就写使能寄存器,要禁止就写禁止寄存器。这样的好处是我们使能/禁止操作时不需要读改写,直接写即可。
1.8.7.2、VICnINTSELECT
(1)设置各个中断的模式为irq还是fiq。一般都设置成irq
(2)IRQ和FIQ究竟有何区别。210中支持2种中断,irq和fiq。irq是普通中断,fiq是快速中断。快速中断提供一种更快响应处理的中断通道,用于对实时性要求很高的中断源。fiq在CPU设计时预先提供了一些机制保证fiq可以被快速处理,从而保证实时性。fiq的限制就是只能有一个中断源被设置为fiq,其他都是irq。
(3)CPU如何保证fiq比irq快?有2个原因:第一,fiq模式有专用的r8~r12,因此在fiq的isr中可以直接使用r8-r12而不用保存,这就能节省时间;第二,异常向量表中fiq是最后一个异常向量入口。因此fiq的isr不需要跳转,可以直接写在原地,这样就比其他异常少跳转一次,省了些时间。
1.8.7.3、VICnIRQSTATUS和VICnFIQSTATUS
(1)中断状态寄存器,是只读的。当发生了中断时,硬件会自动将该寄存器的对应位置为1,表示中断发生了。软件在处理中断第二阶段的第一阶段,就是靠查询这个寄存器来得到中断编号的。
1.8.7.4、VICnVECTPRIORITY0~VICnVECTPRIORITY31
(1)中断优先级设置寄存器,设置多个中断同时发生时先处理谁后处理谁的问题。一般来说高优先级的中断可以打断低优先级的中断,从而嵌套处理中断。当然了有些硬件/软件可以设置不支持中断嵌套。
1.8.7.5、VICnVECTADDR0~VICnVECTADDR31、VICnADDR
(1)这三个寄存器和210中断处理第二阶段的第二阶段有关。
(2)VICnVECTADDR0到31这32个寄存器分别用来存放真正的各个中断对应的isr的函数地址。相当于每一个中断源都有一个VECTADDR寄存器,程序员在设置中断的时候,把这个中断的isr地址直接放入这个中断对应的VECTADDR寄存器即可。

(3)VICnADDR这个寄存器是只需要读的,它里面的内容是由硬件自动设置的。当发生了相应中断时,硬件会自动识别中断编号,并且会自动找到这个中断的VECTADDR寄存器,然后将其读出复制到VICnADDR中,供我们使用。这样的设计避免了软件查找中断源和isr,节省了时间,提高了210的中断响应速度。


《朱老师物联网大讲堂》学习笔记

学习地址:www.zhulaoshi.org


中断相关的寄存器

VICnINTENABLE

也就是interrupt enable,负责相应中断的使能,

VICnINTENCLEAR

也就是interrupt enableclear,负责相应中断的禁止。


有些CPU上面两个功能是用一个寄存器实现的,

这样的话中断使能要小心,

对它们的操作,要像操作cp15寄存器一样,

通过读,改,写来完成。



VICnINTSELECT

设置为irq或者fiq,一般设置为irq。

irq和fiq有什么区别?

irq是普通中断,fiq是快速中断,

fiq有更快的中断响应通道,但是只能有一个被设置为fiq。

VICnINTSELECT

设置为irq或者fiq,一般设置为irq。

irq和fiq有什么区别?

irq是普通中断,fiq是快速中断,

fiq有更快的中断响应通道,但是只能有一个被设置为fiq。


CPU如何保证fiq比irq快啊?

1.fiq模式有专用的r8~r12,可以直接使用,不像其它模式,还要保存寄存器,

2.fiq的中断处理程序直接在异常向量表中,因为它是异常向量表中最后一个异常。




VICnIRQSTATUS和VICnFIQSTATUS

中断状态寄存器,是只读的,当发生中断时,硬件会自动将该位的寄存器置为1,表示中断发生,

软件在处理第二阶段第一阶段适时,就是靠查询这个寄存器来得到中断编号的。


VICnVECTPRIORITY0~VICnVECTPRIORITY31

中断优先级设置寄存器,设置多个中断同时发生时先处理谁后处理谁得问题,

一般来说高优先级的中断,可以打断低优先级的中断,从而嵌套中断,

不过也可以设置不支持嵌套中断。


VICnVECTADDR0~VICnVECTADDR31,VICnADDR
一共有32*4+4个寄存器,
210的寻找isr的机制,就是通过这些寄存器来实现的,
每一个中断源都有一个VECTADDR寄存器,把中断ISR地址直接放入这个寄存器接口即可,
VICnADDR这个寄存器是只读的,只需要读的,里面的内容是由硬件自动设置的,
当发生了相应的中断时,硬件会自动识别中断编号,并且会自动找到这个中断的VECTADDR寄存器,
然后将其读出复制到VICnADDR中,我们直接读出使用即可。
通过硬件实现,避免了软件查找中断源和ISR,提高了响应速度。




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值