VIC之PL192使用介绍

主要功能解析

上图为VIC工作原理的一个简易流程图。

中断源intsource[31:0] or softint[31:0](VICSOFTINT/ SOFTINTCLEAR 寄存器可配置)产生中断,会送给RAWINT寄存器,经过INTENABLE判断使能后送给IRQSTATUS寄存器,经过INTSELECT判断送给FIQSTATUS寄存器,并送到输出端口FIQ,然后中断经过swmask和hwmask组成的优先级仲裁逻辑判断送出irq。

优先级仲裁逻辑问题
硬件优先级:每一个进入VIC的中断都有一个中断index ,index 越小表示优先级越高,此优先级我们称之为硬件优先级。如外部送入0–31个中断,就代表0–31个硬件优先级。此硬件优先级只有在软件优先级相同的情况下才产生作用。
软件优先级:软件优先级是进入VIC的每一个中断都可以使用VICPRIORITY寄存器配置他们的软件优先级,软件优先级共有0~15共16个级别。0为最高优先级。
vic的仲裁宗旨就是在任何时刻都保证选择出优先级做高的中断出来,送给CPU触发中断信 并提供此中断 的中断服务程序地址。所有进入VIC的中断 首先经过软件优先级仲裁,低优先级组的中断被mask住,然后再经过硬件优先级仲裁选择出同等软件优先级里面硬件优先级最高的中断,然后送给CPU。

中断嵌套问题:
假如vic选择出了此刻优先级最高的中断送给CPU,并且CPU正在处理此中断服务程序。但是并没有退出中断服务程序,这时VIC 接收到了另外一个优先级更高的中断。就会产生中断嵌套。注意这里的优先级更高指的是软件优先级,因为只有软件优先级支持中断嵌套。硬件INDEX 的优先级只在软件优先级相同的情况下发生作用。假若产生了中断嵌套,CPU会像处理正常程序一样保存此时中断程序的上下文,然后跳转去执行更高优先级的中断服务程序。这里有一个问题需要注意,就是软件优先级相同的情况下,这时候送过来一个硬件优先级更高的中断并不会造成嵌套。

?Q&A
HWMASK是如何工作的strong>
当出现VICIRQACK上升沿,或者读VICADDRESS 地址时,hwmask使能,会mask掉相同和更低的软件优先级中断。使得更高的硬件优先级中断可以被嵌套。
读取 VICADDRESS 寄存器后,当前和较低优先级的中断输出mask。但是,VICIRQSTATUS(与intsel与 intenb有关)和VICRAWINT 寄存器不受影响。
当中断程序已完成且 VICADDRESS 寄存器已写入,HWMASK被清除以允许所有启用的中断源通过。
在中断处理过程中可以修改中断优先级吗strong>
可以修改但是可能引起未知的error,应该避免在中断处理过程中修改优先级
在中断请求时处理器在处理一个更高优先级的中断,而处理器在响应这个中断之前,中断挂起状态被取消了,该请求还能得到响应吗r> 不可以
VIC 是否可同时支持脉冲中断请求和电平中断请求strong>
不可以 只支持电平中断请求
VICVECTADDR寄存器的介绍
提供当前正在处理的中断服务程序的地址,该值也可以同时体现在vicvectaddr[0:31]端口,供vic port使用。该值来自保存着所有中断服务程序地址的memory map,如果当前没有中断处理,则保存前一个活动的中断地址,复位值为0x00000000。
读取该寄存器①会返回 ISR 的地址并将当前中断设置为被服务。②mask相同或更低等级的中断③重新拉高irq,以保证更高优先级的中断可以被送过来。只有在有活动中断时才能执行读取。
写入该寄存器任何值都会清除相应的内部中断优先级硬件。以更新硬件优先级。写操作只能是在中断服务程序结束时执行。
(可选)Timeout运行机制是什么strong>
time out 使能后,当VIC触发irq_b or fiq_b 到cpu,如果达到一定clk_cnt cpu还未响应vic,则触发time out 机制,irq_b 会同时送给fiq_b,fiq_b会同时送给irq_b,并触发vic time out 中断
所有的FIQ都使用同一个中断服务程序地址。
当中断处于处理状态时,处理器不会在中断完成和异常退出之前再次接受同一个中断。

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年8月5日
下一篇 2022年8月5日

相关推荐