1 riscv中的plic中断处理与eclic详解-德赢Vwin官网 网
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

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

    关注

    1

    文章

    3226

    浏览量

    48804

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

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

收藏 人收藏

    评论

    相关推荐

    OMAP5912多媒体处理中断参考指南

    德赢Vwin官网 网站提供《OMAP5912多媒体处理中断参考指南.pdf》资料免费下载
    发表于 12-17 16:25 0次下载
    OMAP5912多媒体<b class='flag-5'>处理</b>器<b class='flag-5'>中断</b>参考指南

    RISCV 操作常见问题集 - v4

    'fpga_spinal.cpu0' init failed原因:debuger路径问题。在riscv和efx之间应该有个斜杠,如报错的红色标注。(6)No source available for "main
    的头像 发表于 11-01 11:06 279次阅读

    单片机有哪些中断类型

    单片机中断是指在单片机执行程序的过程,当外部设备或内部条件发生某个特定事件时,能够暂停当前正在执行的程序,转而去执行一个特定的服务程序(称为中断服务程序或中断
    的头像 发表于 10-17 18:12 616次阅读

    freertos中断优先级在哪设置

    FreeRTOS是一个流行的实时操作系统,它广泛应用于嵌入式系统开发。在FreeRTOS中断优先级是一个重要的概念,因为它决定了中断处理的顺序和响应时间。 1. 理解
    的头像 发表于 09-02 14:17 634次阅读

    RISCV的主流指令集有哪些?

    如题,就像X86指令集有MMX,SSE,SSE2等,就像ARM指令集有ARM和Thumb等,但是总是感觉RISCV特别乱,可能是厂商比较多的缘故吧,我知道的有WCH的青稞RISC-V,玄铁
    发表于 08-29 13:49

    HPM SDK 1.6.0 FreeRTOS LTS更改及适配指南

    1、HPM_SDKFreeRTOSLTS特性总览HPMSDKV1.6.0FreeRTOS升级前后特性支持对比:特性V10.4.4LTS202210.01中断抢占√√RISCV浮点扩展支持
    的头像 发表于 07-06 08:17 3477次阅读
    HPM SDK 1.6.0 FreeRTOS LTS更改及适配指南

    RISC-V的中断处理 中断操作三个步骤

    中断操作三个步骤: 1、中断初始化 2、trap处理 3、用户中断处理
    的头像 发表于 05-20 16:38 1198次阅读

    国产riscv芯片大汇总?

    请问有统计国产的riscv芯片的吗?能汇总一下吗?
    发表于 04-27 11:53

    RISCV soft JTAG调试_v1.2

    JTAG。这里我们以TI60F225 DEMO来演示。 在使用softJTAG的过程,首先要把RISCV的IP的调试选项选择为soft,也就是Eanble Soft Debug Tap. 第二
    的头像 发表于 04-23 08:38 1054次阅读

    如何停止或取消单片机的中断处理

    处理的NVIC能够处理多个可屏蔽中断通道和可编程优先级,中断输入请求可以是电平触发,也可以是最小的一个时钟周期的脉冲信号。
    发表于 04-15 11:05 1352次阅读
    如何停止或取消单片机的<b class='flag-5'>中断</b><b class='flag-5'>处理</b>?

    使用stm8l的外部中断的pin7的中断,进行中断处理时会立刻造成新的pin7中断,会有什么影响吗?

    使用stm8l的外部中断的pin7的中断,进行中断处理时会立刻造成新的pin7中断,会有什么影响吗?目前可以看到的结果是该pin7
    发表于 04-07 09:05

    RISCV soft JTAG调试_v1.1

    JTAG。这里我们以TI60F225 DEMO来演示。 在使用softJTAG的过程,首先要把RISCV的IP的调试选项选择为soft,也就是Eanble Soft Debug Tap. 第二
    的头像 发表于 02-23 16:16 651次阅读
    <b class='flag-5'>RISCV</b> soft JTAG调试_v1.1

    s3c2410中断控制模块的中断源状态寄存器是?

    S3C2410是一款由三星电子公司设计的具有多种功能的嵌入式处理器。其中的中断控制模块用于管理系统的中断请求和中断服务程序。在S3C2410
    的头像 发表于 01-05 17:28 715次阅读

    arm中断是怎么实现的

    ARM中断的实现是通过中断控制器和异常模式实现的。ARM处理器通过中断控制器来接收和处理外部的中断
    的头像 发表于 01-05 15:18 890次阅读

    stm32中断怎么处理

    STM32是一款非常强大的微控制器系列,具有丰富的外设和功能。中断是STM32非常重要的部分,能够帮助我们提高系统的响应速度和效率。本文将详细介绍STM32中断处理方法。 一、
    的头像 发表于 01-02 17:35 2566次阅读