《朱老师物联网大讲堂》学习笔记
学习地址:www.zhulaoshi.org
中断相关的寄存器
VICnINTENABLE
也就是interrupt enable,负责相应中断的使能,
VICnINTENCLEAR
也就是interrupt enable clear,负责相应中断的禁止。
有些CPU上面两个功能是用一个寄存器实现的,
这样的话中断使能要小心,
对它们的操作,要像操作cp15寄存器一样,
通过读,改,写来完成。
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,提高了响应速度。