AIA - APLIC之三(附APLIC处理流程图)
本文属于《 RISC-V指令集底子系列教程》之一,欢迎查察别的文章。1 APLIC复位
APLIC复位后,其全部状态都变得有效且划一,但以下环境除外:
[*]每个中断域的domaincfg寄存器(spec第 4.5.1 节);
[*]可能是machine-level interrupt domain的MSI地址设置寄存器(spec第4.5.3 和4.5.4 节);
[*]每个中断域的genmsi寄存器的Busy位(如果存在)(spec第 4.5.15 节)。
以上这几种环境,在APLIC复位后,必要根据这些寄存器的具体定义来确定。
2 对中断pending位的精确影响
尝试通过写入中断域控制地区中的寄存器,来设置或扫除中断源的pending位可能会乐成,也可能不会乐成,具体取决于相应的中断源模式、中断域的中断投递模式,以及中断源校正输入的状态值(spec第4.5.2节中定义)。
下面列举了,针对给定的中断源源模式,设置或扫除pending位时的全部环境。
如果源模式为Detached:
[*]仅通过对setip或setipnum寄存器,执行相关写入操作,将pending位设置为1。
[*]当在APLIC处请求中断或由MSI转发中断,或者通过对in_clrip寄存器或clripnum举行相关写入时,将扫除pending位。
如果源模式为Edge1或Edge0:
[*]通过校正输入值,从低到高的跳变,或者通过对setip或setipnum寄存器举行相应写入,将pending位设置为1。
[*]当在APLIC处请求中断或由MSI转发中断,或者通过对in_clrip寄存器或clripnum举行相关写入时,将扫除pending位。
如果源模式为Level1或Level0,并且中断域设置为直接投递模式(domaincfg.DM = 0):
[*]只要校正后的输入值为高电平,pending位就会设置为1。无法通过写入setip或setipnum寄存器来设置pending位。
[*]只要校正后的输入值为低电平,pending位就会被扫除。pending位不能通过 APLIC 处的中断声明来扫除,也不能通过写入in_clrip寄存器或clripnum来扫除。
如果源模式为Level1或Level0,并且中断域设置为MSI投递模式(domaincfg.DM = 1):
[*]通过校正输入值中从低到高的跳变,将pending位设置为1。当经校正的输入值为1时,也可以通过setip或setipnum寄存器的相应写入来设置pending位。
[*]只要校正后的输入值为低电平,或者通过对in_clrip寄存器或clripnum举行相关写入,就会扫除pending位。
当中断域处于直接投递模式时,电平触发的中断源的pending位,始终只是整流输入值的副本。即使在MSI传送模式下,当校正输入值为0时,电平触发的中断源的pending位,也不会被设置 (= 1)。
除上述规则外,如spec第4.5.2节中所述,对sourcecfg寄存器的写入,还可导致源的中断挂起位设置为1。
3 直接传递模式
当中断域处于直接投递模式 (domaincfg.DM = 0) 时,中断通过每个hart的唯一信号(通常是专用中断线)从APLIC传递到hart。
在这种环境下,中断域的内存映射控制地区,在末尾包罗一组中断传送控制 (IDC) 结构,每个hart都会对应一个IDC结构。
第一个IDC结构,是该中断域内索引为0的hart;第二个是该中断域索引为1的hart;依次类推。
3.1 IDC结构
每个IDC结构都是32字节(对齐到 32 字节地址界限),并具有以下定义的寄存器:
https://i-blog.csdnimg.cn/direct/58ab101e403c4ac7bd7a85685efb5d2f.png#pic_center
如果IDC结构,针对的特定hart,对于中断域中的任何实际hart都无效,则这些寄存器,可以选择全部为只读零。否则,寄存器将在下面单独形貌。
特定的APLIC,可能被构建为支持最大数量的hartÿ
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]