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

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

3天内不再提示

RISC-V CSR寄存器介绍

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

RISC-V CSR寄存器

CSR是控制状态寄存器,RISC-V中CSR寄存器,需要使用csrr、csrw、csrrw等特定指令进行访问。

M模式和S模式都有自己的CSR寄存器,但是大体上相同。下面列举一些常用的CSR。

M模式CSR寄存器

mstatus

状态寄存器,保存了全局中断使能状态和其他状态,例如切换模式前,保存当前模式。

mtvec

异常入口基地址寄存器。保存发生异常时需要跳转的地址。

medelegmideleg

medeleg是异常委托,mideleg是中断委托。例如,在M模式下发生异常或中断时,可以通过这两个寄存器,将中断/异常交给S模式或者其他模式处理。

mipmie

mie是中断使能寄存器,对需要使能的中断,在对应位使能。

mip是中断等待寄存器,表示目前正准备处理的中断。

hpm

全称Hardware Performance Monitor,硬件性能单元,用于性能计数。包括了两类寄存器:mhpmcounter和mhpmevent

  • mhpmcounter:性能计数器
  • mhpmevent:用于配置性能事件

mcounterenmcountinhibit

这两个也是hpm相关的寄存器,主要用于控制hpm的使能、计数禁止。

  • mcounteren:计数器使能
  • mcountinhibit:禁止计数

mscratch

用于保存M模式指向hart上下文的指针,并在进入M模式的处理程序时,和用户寄存器交换。

mepc

发生中断时,当前程序的PC值,保存在mepc中,中断返回时,会从mepc读取PC值。

mcause

用于保存发生中断或异常的情况,中断和异常描述如下:

图片

1代表中断,0代表异常,每个异常/中断都有对应的编码值,通过mcause的值,可以很清楚的知道发生了什么中断或异常,特别在调试过程,mcause发挥了很大作用。

mvtal

异常值寄存器,例如发生异常时,保存出错的地址。

S模式CSR寄存器

S模式的CSR和M模式基本上是一样的,只不过将第一个字母m改为了s,例如mcause改为了scausemvtal改为了svtal。它们的功能基本相同,这里就不再赘述了。

需要注意的是,S模式除了拥有M模式相同功能的CSR外,另外还增加了一个stap寄存器。

stap寄存器主要是给MMU使用,stap寄存器保存了页表的基地址,MMU通过stap可以找到第一级页表,进而找到物理地址。stap寄存器涉及到的内容比较多,关于stap相关内容,以后会详细展开讲讲。

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

    关注

    30

    文章

    5042

    浏览量

    117775
  • 内核
    +关注

    关注

    3

    文章

    1309

    浏览量

    39862
  • Linux
    +关注

    关注

    87

    文章

    10994

    浏览量

    206772
  • CSR
    CSR
    +关注

    关注

    3

    文章

    117

    浏览量

    69432
  • 计数器
    +关注

    关注

    32

    文章

    2127

    浏览量

    93031
  • RISC
    +关注

    关注

    6

    文章

    431

    浏览量

    83253
收藏 人收藏

    评论

    相关推荐

    RISC-V开放架构设计之道|阅读体验】RISC-V基础整数指令集RV32I

    。 图1:RV32I指令集 在讲RISC-V各个阶段,横向比较ARM架构,体现出RISC-V的优越性。 ●RV32I寄存器 RISC-V基础指令集RV32I,只有6种基本指令
    发表于 01-28 11:41

    RISC-V开放架构设计之道|阅读体验】RISC-V基础整数指令集

    第2章 RV32I:RISC-V基础整数指令集 本章重点讲解构成RISC-V基础整数指令集的基本指令和指令格式。主要包含寄存器间操作的R型,用于短立即数和取数操作的I型,用于存数操作的S型,用于条件
    发表于 01-31 21:10

    RISC-V 基础学习:RISC-V 基础介绍

    10 机器特权级 3 M 11 一个RISC-V 硬件线程(hart),相当于一个CPU 内独立的可执行核心,在任意时刻,只能运行在某一个特权级上,这个特权级由CSR(控制和状态寄存器)指定配置
    发表于 03-12 10:25

    RISC-V工作模式及寄存器基本知识

    RISC-V Linux为例,Linux应用程序处于U模式,Linux内核/uboot处于S模式,M模式则是OpenSBI。M模式拥有最高访问权限,Linux内核如果要访问CSR寄存器,则必须由S模式切换
    发表于 04-12 14:06

    如何在RISC-V处理上使用FreeRTOS?

    RISC-V实现共有的寄存器的基本移植,以及一组macros,实现硬件特定的特性和扩展。1. 快速入门为RISC-V内核构建FreeRTOS,步骤如下:1包含FreeRTOS内核源代码及RIS
    发表于 11-29 15:54

    RISC-V开源处理介绍

    本期文章目录一个小型RISC-V开源处理介绍!#SOC#FPGA#RISC-V点击阅读数字积木从零开始写RISC-V处理
    发表于 07-23 09:42

    RISC-V ISA是怎样进行命名的

    RISC-V ISA 命名规范RISC-V ISA 采用模块化的方式进行组织,每一个模块使用一个英文字母表示,其命名格式可以参考如下:RV[字宽][指令集模块]RV:RISC-V字宽(处理
    发表于 12-09 06:31

    优化的关键,RISC-V中的性能监控

    stat,一种是perf record。如今上游Linux的perf虽然已经对RISC-V有了支持,但仅对perf stat有一些基本的支持。比如mcycle这一CSR用于处理运行的时钟周期计数,而
    发表于 12-27 08:00

    如何使用J-Link和Embedded Studio读写RISC-V处理CSR

    CSR简介RISC-V 架构的控制和状态寄存器(Control and Status Register, CSR),用于配置或记录一些处理
    发表于 08-25 15:51

    初探RISC-V—《RISC-V体系结构编程与实践》

    最近有幸读了一本介绍RISC-V的书籍《RISC-V体系结构编程与实践》,这是一本非常有价值的书籍,它介绍RISC-V体系结构的各个方面,
    发表于 03-28 11:41

    【转载】第1章 初识RISC-V

    。此外,RISC-V还定义了一组控制和状态寄存器(Control and Status Registers, CSR ),用于记录内核运行状态。详情参考特权指令集规范:https://riscv.org
    发表于 03-28 16:57

    RISC-V 发展

    汇编当中,都使用ABI名称来代表这些寄存器RISC-V CSR寄存器CSR是控制状态寄存器
    发表于 04-14 10:18

    RISC-V gp全局指针寄存器说明

    RISC-V 32个寄存器之一,为了优化±2KB内全局变量的访问。 gp寄存器在启动代码中加载为__global_pointer$的地址,并且之后不能被改变。 linker时使用__global_pointer
    发表于 09-11 16:57

    RISC-V CSR 相关指令集

    CSRRW(Atomic Read/Write CSR) 指令原子性的交换CSR寄存器中的值。 CSRRW指令读取在CSR中的旧值,将其零扩展到32位,然后写入整数
    发表于 12-08 18:21 8次下载
    <b class='flag-5'>RISC-V</b> <b class='flag-5'>CSR</b> 相关指令集

    RISC-V PMP寄存器介绍

    每个 PMP 区域都由一个 8 位 pmpXcfg 字段描述,与一个 64 位 pmpaddrX寄存器结合使用,该寄存器保存受保护区域的基地址。每个区域的范围取决于下一节中描述的寻址 (A) 模式
    的头像 发表于 10-07 17:39 1007次阅读
    <b class='flag-5'>RISC-V</b> PMP<b class='flag-5'>寄存器</b><b class='flag-5'>介绍</b>