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

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

3天内不再提示

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

嵌入式IoT 来源:嵌入式IoT 作者:嵌入式IoT 2021-04-15 13:50 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

浅析riscv中的plic与eclic

1.PLIC中断处理

2.sifive中断的编程模型

3.关于eclic

4.关于jalmnxti

1.PLIC中断处理

在RISC V体系架构中,对中断有着一些定义,下面来分析一下这种定义的实现策略。

2c6be102-9d0e-11eb-8b86-12bb97331649.png

在riscv中一共定义了三种状态中断,对于hart层面,hart包含local中断源和global中断源。而local中断只有Timer和Software中断两种,而global中断则称为external interrupts。只有global中断源可以被PLIC core响应,通常为I/O device。

一般来说,timer和software是通过CLINT(CORE LOCAL INTERRUPT),而外部中断通过PLIC处理。

2d5a77b8-9d0e-11eb-8b86-12bb97331649.png

可以看一下蜂鸟处理器的处理流程,另外sifive的E31的中断也有如下的处理。

2d6d55cc-9d0e-11eb-8b86-12bb97331649.png

2.sifive中断的编程模型

中断处理过程有如下的流程

首先mstatus的MIE域被拷贝到mstatus的MPIE,然后mstatus的MIE域被清除。此时全局中断disable。

程序当前的pc值被拷贝到mepc寄存器中,然后pc值会根据mtvec的值设置其值。如果向量中断被使能,pc值会变成mtvec.BASE+4xexception处的代码。

从mstatus.MPP中取出特权模式的状态

接下来就是处理中断具体的函数实现

将特权模式的状态设置到mstatus.MPP

将mstatus.MPIE的数据拷贝到mstatus.MIE中

从mepc中取值放到pc中

最后执行eret恢复到程序正常运行的状态。

对于CLINT来说,有Software Interrupt和Timer Interrupt,可以直接在寄存器中控制。

而PLIC实际上可以理解为arm的中断控制器,存在其map地址。

2d8017ca-9d0e-11eb-8b86-12bb97331649.png

由于PLIC的使用是针对外部中断的,所以可以单独设置每个中断。可以设置如下的值:

中断的优先级priotity

中断挂起位pending

中断使能enables

中断阈值priority Thresholds

由于PLIC的实现是独立于hart的IP设计,所以其设计和布局也不一定完全一致。

3.关于eclic

eclic的设计是芯来科技设计的一种中断处理方式。

2dbc5852-9d0e-11eb-8b86-12bb97331649.png

eclic目前也是众多芯来科技core采用的中断控制器,也包括gd32vf103系列的芯片。

3号中断是内核TIMER单元生成的软件中断。

7号中断是内核TIMER单元生成的计时器中断。

而从19~4095中断号都是外部中断,其中断的编号与中断的优先级其实没有关系。

2dcb96f0-9d0e-11eb-8b86-12bb97331649.png

而对于ECLIC的寄存器布局,可见上图。

cliccfg是中断全局配置寄存器,可以结合clicintctl[i]配置

clicinfo也是全局寄存器中的数据,对于使用上来说,是只读的

mth中断的阈值级别寄存器

clicintip[i]是中断等待寄存器,也相当于pending寄存器

clicintie[i]为中断使能寄存器

clicintattr[i]为中断的属性,可以设置中断的上升沿触发或者下降沿触发,同时也可以设置中断从处理是向量中断还是非向量中断。

clicintctl[i] 设置中断优先级级别和优先级,需要配合cliccfg设置阈。

4.关于jalmnxti

这个也是eclic为了减少中断延时,加速中断咬尾的自定义指令。

该指令是配合eclic处理机制设计的,其指令功能比较多

开启中断使能,处理下一个中断

返回下一个中断入口地址

跳转至中断handler

中断处理后返回

由于csrrw ra, CSR_JALMNXTI, ra一条指令可以达到JAL(Jump and Link)的效果,同时硬件上更新Link寄存器作为该指令的PC作为函数调用的返回值,因此从中断服务程序返回后,又会重新回到csrrw ra, CSR_JALMNXTI, ra指令再次执行,可以重新判断是否有中断pending,如果有则跳转到中断处理函数,从而实现中断的咬尾处理,如果没有中断等待,则jalmnxti实际上并不会做任何事情。

原文标题:浅析riscv中的plic与eclic

文章出处:【微信公众号:嵌入式IoT】欢迎添加关注!文章转载请注明出处。

责任编辑:haq

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

    关注

    1

    文章

    3648

    浏览量

    51707

原文标题:浅析riscv中的plic与eclic

文章出处:【微信号:Embeded_IoT,微信公众号:嵌入式IoT】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    串口中断触发卡死怎么解决?

    |= (1u << 0) | (1u << 2);}/* 读取并处理 IIR,按类型清空接收 FIFO;返回是否还有挂起中断 */static
    发表于 11-11 06:17

    e203添加中断源,中断源无法使能怎么解决?

    。 担心是由于添加中断的时候plic模块的修改有问题,我们直接把52号中断(IIC),接到了以太网外设的中断信号上,发现plic模块的
    发表于 11-10 07:45

    易灵思Sapphire SoCRISC-V平台级中断控制器深度解析

    随着 RISC -V处理器在 FPGA 领域的广泛应用,易灵思 FPGA 的 Sapphire RISC-V 内核凭借软硬核的灵活支持,为开发者提供多样选择。本文深入探讨 Sapphire SoC RISC - V 平台级中断
    的头像 发表于 11-08 09:35 6711次阅读
    易灵思Sapphire SoC<b class='flag-5'>中</b>RISC-V平台级<b class='flag-5'>中断</b>控制器深度解析

    riscv底层原理分析gd32vf103的中断行为

    中断编程模型的理解 对于cortex-m3等处理器来说,riscv的底层模型似乎更加复杂一些,但是实际上弄清楚riscv中断
    发表于 10-31 08:04

    RVMCU课堂「12」: 手把手教你玩转RVSTAR—外部中断

    执行下去。这里我们以Nuclei Board Labsexti_key_interrupt应用程序为例,简单讲解外部中断的非向量处理模式。 系统环境 Windows 10-64bit 软件平台
    发表于 10-31 07:39

    浅析riscvpliceclic

    1.PLIC中断处理 在RISC V体系架构,对中断有着一些定义,下面来分析一下这种定义的实现策略。 在
    发表于 10-31 07:23

    RVMCU课堂「10」: 手把手教你玩转RVSTAR—处理器内部中断

    中断向量表一一对应,关于中断向量表我们会在后文详解。 2 ECLIC_NON_VECTOR_INTERRUPT 第二个参数配置的是中断
    发表于 10-31 06:12

    人脸识别和AES加密协同的SOC设计架构

    留有两个中断接口:PLIC和CLINT中断接口和AXI系统总线接口。RISCV内核还留有协处理器接口NICE,NICE接口可扩展
    发表于 10-29 08:21

    利用蜂鸟E203搭建SoC【2】——外部中断扩展与验证

    在SoC设计中一个重要通信方式就是中断中断可以避免轮询方式造成的cpu空转消耗,可以更好利用cpu资源。蜂鸟e203提供了plic外部中断
    发表于 10-29 07:14

    MCU的嵌入式开发

    RISC-V中断包括软件中断,计时器中断,外部中断,调试中断 (主要是前三个) 计时器
    发表于 10-28 08:02

    DDR200T运行plic中断例程LED无反应的解决办法

    ,但是按下那五个中断按键UDLRC,LED没反应,始终处于熄灭状态。我也试验了Gitee下载了开源的demo_plic程序,反应一样。 解决方法: 使用NucleiStudio_IDE_202102
    发表于 10-27 06:00

    蜂鸟E203内核中断管理模块sirv_plic_man代码分析

    、irq_id_lvl_10 和 irq_ip_lvl_10。这三个数组用于存储级联式中断处理每个中断源的优先级、ID 和挂起状态。 对于输入的
    发表于 10-23 06:05

    中断机制在计算机系统的作用,如何在e203处理利用外部中断处理用户输入输出

    )设计中断是一种机制,用于处理外部事件并暂停CPU的正常执行流程。当外部事件发生时,如输入/输出操作或定时器/计数器到达其计数限制等,硬件会发出中断请求信号,通知CPU停止当前正在
    发表于 10-21 12:47

    AS32X601驱动系列教程 PLIC_中断应用详解

    平台中断控制器(Platform Level Interrupt Controller,PLIC)是国科安芯AS32系列MCU芯片的中断控制器,主要对中断源进行采样,优先级仲裁和分发。
    的头像 发表于 05-23 17:10 520次阅读
    AS32X601驱动系列教程 <b class='flag-5'>PLIC</b>_<b class='flag-5'>中断</b>应用<b class='flag-5'>详解</b>

    单片机中断技术详解

    在现代电子设备,单片机作为控制核心发挥着举足轻重的作用。而在其高效运作的背后,中断机制是推动单片机实现实时响应与高效执行的关键因素。本文将深入探讨单片机中断概念、
    的头像 发表于 02-02 15:57 1432次阅读