0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

U54内核特权模式中断介绍

麦辣鸡腿堡 来源:嵌入式Linux充电站 作者:Vincent 2023-10-08 09:59 次阅读

特权模式中断

U54内核支持有选择地将中断和异常定向到S模式。

该功能由中断和异常委托CSR处理:mideleg和medeleg。S模式中断和异常可以通过stvec、sip、sie 和 scause 管理。

在M模式下,软件还可以直接写入SIP寄存器,从而有效地向S模式发送中断。这对于定时器和软件中断特别有用,因为可能需要在M模式和S模式下处理这些中断。

Delegation Registers (mideleg and medeleg)

默认情况下,所有的trap都在M模式下处理。M模式下软件可以通过CSR 有选择地将中断和异常委托给S模式。具体的映射如表 92 和表 93 。

图片

图片注意,本地中断可以委托给M模式。

Supervisor Status Register (sstatus)

与M模式类似,S模式有一个寄存器,专门用于跟踪 hart 的当前状态,称为 sstatus。sstatus 实际上是 mstatus的受限视图,因为对 sstatus 所做的更改反映在 mstatus 中。

通过在 sstatus 中设置 SIE 位并在 sie 寄存器中启用所需的单个中断来启用中断。

Supervisor Interrupt Enable Register (sie)

通过在 sie 寄存器中设置适当的位来启用管理员中断。

图片

Supervisor Interrupt Pending (sip)

S模式中断挂起 (sip) 寄存器指示当前哪些中断挂起。

图片

Supervisor Cause Register (scause)

当S模式下捕获陷阱时,将导致陷阱的事件的代码写入 cause。当导致陷阱的事件是中断时,最高有效位 scause 设置为1,最低有效位表示中断号,使用与 sip 中的位置相同的编码。例如,S模式定时器中断导致 cause 被设置为0x8000_0000_0000_0005。

scause 也用于指示同步异常的原因,在这种情况下,scause 的最高有效位设置为 0。有关同步异常代码的列表,请参见表 98。

图片图片

Supervisor Trap Vector (stvec)

默认情况下,所有中断都会捕获到 stvec 寄存器中定义的单个地址。由中断处理程序读取原因并做出相应的反应。RISC‑V 和 U54内核还支持选择性地启用中断向量的能力。当启用向量时,在 sie 中定义的每个中断都会陷入到它自己特定中断处理程序中。

当 stvec 寄存器的 MODE 字段设置为 1 时,向量中断被启用。

图片

如果向量中断被禁用 (stvec.MODE=0),所有中断都会陷入 stvec.BASE 地址。如果启用矢量中断 (stvec.MODE=1),中断pc 设置为 stvec.BASE + 4 × 异常代码 (scause.EXCCODE)。例如,如果发生管理定时器中断,则 pc 设置为 stvec.BASE+ 0x14。通常,陷阱向量表中填充有跳转指令,以将控制转移到特定于中断的陷阱处理程序。

在向量中断模式下,BASE 必须是 128 字节对齐的。

所有主管外部中断(全局中断)都映射到异常代码 9。因此,当启用中断向量时,pc 被设置为任何全局中断的地址 stvec.BASE +0x24。

Delegated Interrupt Handling

接受委派陷阱后,会发生以下情况:

sstatus.SIE 的值被复制到 sstatus.SPIE,然后 sstatus.SIE 被清除,有效地禁用中断。

当前pc被复制到sepc寄存器中,然后pc被设置为stvec的值。在启用矢量中断的情况下,pc 设置为 stvec.BASE + 4 × 异常代码(scause.EXCCODE)。

中断前的特权模式编码在 sstatus.SPP 中

此时,控制权移交给中断处理程序中的软件,中断被禁用。可以通过显式设置 sstatus.SIE 或执行 SRET 指令退出处理程序来重新启用中断。执行SRET 指令时,会发生以下情况:

特权模式设置为 sstatus.SPP 中编码的值

status.SPIE 的值被复制到 status.SIE

pc 设置为 sepc 的值

此时,控制权交给了软件

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 寄存器
    +关注

    关注

    30

    文章

    5030

    浏览量

    117733
  • 内核
    +关注

    关注

    3

    文章

    1309

    浏览量

    39848
  • RISC
    +关注

    关注

    6

    文章

    431

    浏览量

    83241
  • 模式
    +关注

    关注

    0

    文章

    63

    浏览量

    13285
  • sifive
    +关注

    关注

    0

    文章

    34

    浏览量

    9423
收藏 人收藏

    评论

    相关推荐

    cortex-m3的操作模式特权级别

    STM32是cortex-m3内核芯片,拥有cortex-m3的特性,以下介绍了cortex-m3的特权级别。
    的头像 发表于 03-01 11:00 4118次阅读
    cortex-m3的操作<b class='flag-5'>模式</b>及<b class='flag-5'>特权</b>级别

    【安富莱】【RTX操作系统教程】第9章 任务运行在特权级或非特权模式

    特权级或者非特权模式,这两种模式是M3或者M4内核本身所具有的特性。 在特权
    发表于 01-23 17:11

    第9章 任务运行在特权级或非特权模式

    ,这两种模式是M3或者M4内核本身所具有的特性。 在特权模式下,用户可以访问和配置系统控制寄存器,比如NVIC中断控制器。然而,如果是在非
    发表于 10-04 17:43

    ARM内核中断技术

    以 ARM7TDMI处理器为例,详细介绍 ARM内核的三种中断:常规中断、快中断和软件中断;结合
    发表于 04-09 10:01 18次下载

    Linux内核外部中断解析(下)

    上篇文章我们从内核工程师的角度剖析了内核的外部中断,这节我们从BSP工程师的角度剖析一下外部中断
    发表于 06-23 15:19 271次阅读
    Linux<b class='flag-5'>内核</b>外部<b class='flag-5'>中断</b>解析(下)

    PLIC平台级中断控制器介绍

    的。 U54内核的平台级中断控制器 (PLIC) 最多可支持 132 个具有 7 个优先级的外部中断源。 Memory Map U54
    的头像 发表于 10-07 17:53 683次阅读
    PLIC平台级<b class='flag-5'>中断</b>控制器<b class='flag-5'>介绍</b>

    LIC内核中断挂起位和中断使能

    中断挂起位 PLIC 内核中断源挂起位的当前状态可以从挂起数组中读取,组织为 32 位的 5 个字。中断 ID 的挂起位存储在字的位中。 因此,U
    的头像 发表于 10-07 17:57 394次阅读
    LIC<b class='flag-5'>内核</b><b class='flag-5'>中断</b>挂起位和<b class='flag-5'>中断</b>使能

    U54内核PLIC中断处理例子

    Interrupt Claim Process U54 内核 hart 可以通过读取 claim_complete 寄存器(表 115)执行中断请求,该寄存器返回最高优先级挂起中断
    的头像 发表于 10-07 18:01 527次阅读
    <b class='flag-5'>U54</b><b class='flag-5'>内核</b>PLIC<b class='flag-5'>中断</b>处理例子

    U54内核上CLINT的内存映射

    ) {// handler code} 此属性将保存和恢复处理程序中使用的寄存器,并在处理程序的末尾插入一条 mret 指令。 CLINT内存映射 下图是U54 内核上 CLINT 的内存映射: 注意
    的头像 发表于 10-08 09:34 280次阅读
    <b class='flag-5'>U54</b><b class='flag-5'>内核</b>上CLINT的内存映射

    RISC-V SiFive U54内核中断介绍

    中断 U54内核支持M模式和S模式中断。默认情况下,所有中断
    的头像 发表于 10-08 09:39 285次阅读
    RISC-V SiFive <b class='flag-5'>U54</b><b class='flag-5'>内核</b>的<b class='flag-5'>中断</b><b class='flag-5'>介绍</b>

    U54内核中断进入和退出

    陷阱trap 术语陷阱描述了软件应用程序中的控制转移,其中陷阱处理通常在更特权的环境中执行。例如,一个特定的 hart包含三种权限模式:机器、管理员和用户。每种特权模式都有自己的软件执
    的头像 发表于 10-08 09:47 315次阅读
    <b class='flag-5'>U54</b><b class='flag-5'>内核</b><b class='flag-5'>中断</b>进入和退出

    U54内核中断控制和状态寄存器

    向量的基地址,以及设置 U54内核处理中断模式。对于 Direct 和 Vectored模式中断
    的头像 发表于 10-08 09:54 351次阅读
    <b class='flag-5'>U54</b><b class='flag-5'>内核</b><b class='flag-5'>中断</b>控制和状态寄存器

    U54内核不可屏蔽中断信号

    不可屏蔽中断 rnmi(可恢复不可屏蔽中断中断信号是 hart 的电平敏感输入。不可屏蔽中断比 hart上的任何其他中断或异常具有更高的优
    的头像 发表于 10-08 10:05 472次阅读
    <b class='flag-5'>U54</b><b class='flag-5'>内核</b>不可屏蔽<b class='flag-5'>中断</b>信号

    如何在特权模式下用arm汇编指令使能和禁止irq中断

    如何在特权模式下用arm汇编指令使能和禁止irq中断? 在 ARM 系统中,中断是非常常见的一种事件。在特权
    的头像 发表于 10-19 16:42 793次阅读

    ARMv7-A处理器模式特权等级

    对于现代操作系统,通常情况下用户的应用程序运行在用户态,操作系统内核运行在内核态。用户态的应用对于系统硬件资源的访问是受限的,内核态则能够访问所有的系统硬件资源。操作系统的用户态和内核
    的头像 发表于 10-21 16:19 351次阅读
    ARMv7-A处理器<b class='flag-5'>模式</b>与<b class='flag-5'>特权</b>等级