2021年12月13日

摘要: 1. 中断初始化 S模式下的中断初始化和M模式基本类似,只不过操作的是S模式下的CSR寄存器,如下所示。 static void supervisor_trap_init(void) { //this stack is used for supervisor_trap_entry in entry. 阅读全文
posted @ 2021-12-13 16:02 tycoon3 阅读(851) 评论(0) 推荐(0)
摘要: M模式切换到S模式 从m模式切换到s模式下的代码其实也不是很多,主要是设置"mstatus"和“mepc”寄存器。其实从高特权级别切换到低特权级的思路在各个架构下都差不多,从低级别到高级别只有一种方式那就是产生了中断或者异常,从而进入高级别进行中断和异常处理,然后在中断中再返回到低级别。那么第一次从 阅读全文
posted @ 2021-12-13 14:59 tycoon3 阅读(980) 评论(0) 推荐(0)
摘要: 中断(中断返回)本质上也是一种跳转,只不过还需要附加一些读写CSR寄存器的操作。 RISC-V中断分为两种类型,一种是同步中断,即ECALL、EBREAK等指令所产生的中断,另一种是异步中断,即GPIO、UART等外设产生的中断。 中断号保存在 mcause 寄存器中,最高位是 1 说明是同步异常, 阅读全文
posted @ 2021-12-13 12:08 tycoon3 阅读(6399) 评论(2) 推荐(1)
摘要: .global _start _start: MOV r4,#1 // r4=1 1: // Local label ADD r4,r4,#1 // Increment r4 CMP r4,#0x5 // if r4 < 5... BLT 1b // ...branch backwards to l 阅读全文
posted @ 2021-12-13 10:52 tycoon3 阅读(102) 评论(0) 推荐(0)

导航