在RISC-V中,"csrs"和"csrw"是两种特殊的指令。"csrs"是"Read from a Control and Status Register"的缩写,意思是从控制和状态寄存器中读取数据。"csrw"是"Write to a Control and Status Register"的缩写,意思是向控制和状态寄存器中写入数据。 控制和状态寄存器(CSR)在RISC-V架构中用于各种不同的目的,例如...
CSR是控制状态寄存器,RISC-V中CSR寄存器,需要使用csrr、csrw、csrrw等特定指令进行访问。 M模式和S模式都有自己的CSR寄存器,但是大体上相同。下面列举一些常用的CSR。 M模式CSR寄存器 登录后复制mstatus 状态寄存器,保存了全局中断使能状态和其他状态,例如切换模式前,保存当前模式。 登录后复制mtvec 异常入口基地址寄...
csrr,读取一个 CSR 的值到通用寄存器。如:csrr t0, mstatus,读取mstatus的值到t0中。 csrw,把一个通用寄存器中的值写入 CSR 中。如:csrw mstatus, t0,将t0的值写入mstatus。 csrs,把 CSR 中指定的 bit 置 1。如:csrsi mstatus, (1 << 2),将mstatus的右起第 3 位置 1。 csrc,把 CSR 中指定...
[标准的CSRs是12位地址0x000~0xFFF,寄存器指令csrrs/csrrc/csrrw就能访问这么大范围。而SCR1timer使用的是总线上地址,访问方法和io访问一致,使用lw/sw... are not supported. IPIC的操作,不能使用csrrs和csrrc,只能使用csrrw,同时扩展到立即数指令。 注意其他csr伪指令都是以上三对指令的简化应用。 7,Reset ...
csrw mtvec, t2 li t3,0xaaacsrw mie, t3 la ra, 4f mret 这里出现一个关键的指令csrw意思是写入状态控制寄存器。每个核心都有一系列状态控制寄存器,可以参考 RISCV 手册。下方列出的是mstatus状态寄存器的每个位的情况。 使FS置位,可以开启浮点运算(不开启的话使用浮点数会报错) ...
voidtest_csr(){int a=0x00200;asmvolatile("csrw 0x7c0,%0"::"r"(a));} 那么最后反汇编得到结果如下: 这显然还是不够直观。 为了让其更加的直观,可以修改RISCV工具链。 这里使用的是riscv-gnu-toolchain,目前做编译器开发需要对该仓库的使用非常熟悉。
csrw 把一个通用寄存器中的值写入 CSR 中。 如:csrw mstatus, t0,将 t0 的值写入 mstatus。 ecall 请求更高级特权态,例如:从U模式请求到S模式,从S模式请求到M模式。 fence.i 用来清理 i-cache 的。 我们知道缓存是存储层级结构中提高访存速度的很重要一环。而 CPU 对物理内存所做的缓存又分成数据缓存...
CSR是控制状态寄存器,RISC-V中CSR寄存器,需要使用csrr、csrw、csrrw等特定指令进行访问。 RISC-V的CSR寄存器,M模式和S模式都有自己的寄存器,但是大体上相同。下面列举一些常用的CSR M模式CSR寄存器 mstatus 状态寄存器,保存了全局中断使能状态和其他状态,例如切换模式前,保存当前模式。
csrw mstatus, a0 j rt_hw_context_switch_exit rt_hw_context_switch_to在调度器启动第一个线程的时候调用,传入的 to 变量即为上文讲到的rt_hw_stack_init函数返回保存在线程栈中的struct rt_hw_stack_frame指向的地址,这个地址指向的是结构体的第 0 个成员。
csrw mstatus, t0 1. 2. AI检测代码解析 # 让其它(非0号)硬件线程挂起,跳转至 3 csrr t0, mhartid bnez t0, 3f csrw satp, zero //关闭mmu 1. 2. 3. 4. 这里是读取处理器的核心号码(mhartid),我们只需要使用 0 号核心进行初始化操作,非 0 的核心会跳转到后面挂起 ...