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

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

3天内不再提示

U54内核PLIC中断处理例子

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

Interrupt Claim Process

U54 内核 hart 可以通过读取 claim_complete 寄存器(表 115)执行中断请求,该寄存器返回最高优先级挂起中断的 ID,如果没有挂起中断则返回零。成功的声明还会自动清除中断源上相应的挂起位。

图片

U54 内核 hart 可以随时执行声明,即使其 mip寄存器中的 MEIP 位未设置。

声明操作不受优先级阈值寄存器设置的影响。

中断完成

U54 内核 hart 通过将其从声明中收到的中断 ID 写入 claim_complete 寄存器(表 115)来表示它已完成执行中断处理程序。PLIC 不检查完成 ID 是否与该目标的最后一个声明 ID 相同。如果完成 ID 与当前为目标启用的中断源不匹配,则完成将被静默忽略。

图片

PLIC 无法将新中断转发给已声明中断但尚未完成中断处理程序的完整步骤的 hart。因此,PLIC 不支持抢占单个 hart 的全局中断

通过 PLIC 路由的全局中断的中断 ID 独立于本地中断的中断 ID。在退出处理程序之前,一旦初始声明/完成过程完成,PLIC 处理程序可能会检查其他未决的全局中断。此方法可以为全局中断保存额外的 PLIC 保存/恢复上下文。

PLIC中断处理例子

由于 PLIC 通过外部中断 #11 与 CPU 接口,因此外部处理程序必须包含一个额外的声明/完成步骤,用于与 PLIC 逻辑握手。

void external_handler() {
//get the highest priority pending PLIC interrupt
uint32_t int_num = plic.claim_complete;
//branch to handler
plic_handler[int_num]();
//complete interrupt by writing interrupt number back to PLIC
plic.claim_complete = int_num;
// Add additional checks for PLIC pending here, if desired
}

如果 CPU 读取 claim_complete 并返回 0,则中断不需要处理,因此不需要回写 claim/complete。

上面显示的 plic_handler 例程演示了一种实现软件表的方法,其中驻留在表中的函数的偏移量由 PLIC 中断 ID 确定。PLIC 中断 ID 对于 PLIC 是唯一的,因为它完全独立于本地中断的中断 ID。

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

    关注

    112

    文章

    15223

    浏览量

    171189
  • 寄存器
    +关注

    关注

    30

    文章

    5028

    浏览量

    117721
  • 内核
    +关注

    关注

    3

    文章

    1309

    浏览量

    39846
  • RISC
    +关注

    关注

    6

    文章

    431

    浏览量

    83239
  • sifive
    +关注

    关注

    0

    文章

    34

    浏览量

    9423
收藏 人收藏

    评论

    相关推荐

    Linux内核中断设计与实现

    裸机编程中使用中断比较麻烦,需要配置寄存器、使能IRQ等等。而在Linux驱动编程中,内核提供了完善的终端框架,只需要申请中断,然后注册中断处理
    发表于 07-29 08:57 636次阅读

    PLIC在写入complete寄存器后立马会触发下一次中断的原因?如何解决?

    PLIC在写入complete寄存器后立马会触发下一次中断的原因?如何解决?
    发表于 12-28 07:30

    PLIC管理的中断的优先级和RISC-V本身的机器定时器以及软中断中断优先级问题

    请问PLIC管理的外设中断的优先级和RISC-V本身的机器定时器以及软中断谁的优先级会更高? 机器定时器中断和软中断不归
    发表于 06-25 19:05

    ARM内核中断技术

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

    linux内核中断机制

    如果让内核定期对设备进行轮询,以便处理设备,那会做很多无用功,因为外设的处理速度一般慢于CPU,而CPU不能一直等待外部事件。所以能让设备在需要内核时主动通知
    发表于 11-14 15:48 2936次阅读

    中断入门例子—C语言使用中断控制LED点亮

    简单的中断入门例子
    发表于 05-24 14:15 2次下载
    <b class='flag-5'>中断</b>入门<b class='flag-5'>例子</b>—C语言使用<b class='flag-5'>中断</b>控制LED点亮

    riscv中的plic中断处理与eclic详解

    浅析riscv中的plic与eclic 1.PLIC中断处理 2.sifive中断的编程模型 3.关于eclic 4.关于jalmnxti
    的头像 发表于 04-15 13:50 1.2w次阅读
    riscv中的<b class='flag-5'>plic</b><b class='flag-5'>中断</b><b class='flag-5'>处理</b>与eclic详解

    PLIC平台级中断控制器介绍

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

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

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

    U54内核上CLINT的内存映射

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

    RISC-V SiFive U54内核中断介绍

    中断 U54内核支持M模式和S模式中断。默认情况下,所有中断都在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>介绍

    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内核特权模式中断介绍

    特权模式中断 U54内核支持有选择地将中断和异常定向到S模式。 该功能由中断和异常委托CSR处理
    的头像 发表于 10-08 09:59 456次阅读
    <b class='flag-5'>U54</b><b class='flag-5'>内核</b>特权模式<b class='flag-5'>中断</b>介绍

    U54内核不可屏蔽中断信号

    中断 (RNMI)。 mnscratch CSR 拥有一个 64 位读写寄存器,它使 NMI 陷阱处理程序能够保存和恢复被中断的上下文。
    的头像 发表于 10-08 10:05 472次阅读
    <b class='flag-5'>U54</b><b class='flag-5'>内核</b>不可屏蔽<b class='flag-5'>中断</b>信号