RISCV中断异常

同步异常典型异常:

1.取指令访问到非法地址区间比如外设,外设模块往往不可能存放指令代码

2.读写数据访问的地址属性错误,如访问了只读的,会被MPU或MMU定位出

3.取指令地址非对齐错误。处理器指令集架构往往规定指令存放在存储器中的地址必须对齐。指令的PC值不对齐,会造成取指令不对齐错误。

4.非法指令,译码时发现不存在的指令编码

5.执行调试断点指令如ebreak设置断点

外部中断

RISCV支持多种模式中断响应,最基本是机器模式:

一。进入异常:

1.停止当前程序流。去执行mtvec寄存器里定义的PC地址

2.让硬件同时更新其他相关寄存器mcause , mepc ,mtval ,mstatus

二。退出异常:

1.软件必须使用mret指令,然后硬件停止当前程序流,调到mepc里定义的pc地址去执行

2.让硬件并更新寄存器mstatus的某些域

三。中断屏蔽:

riscv架构中定义了csr寄存器机器模式中断使能寄存器mie来控制中断的屏蔽

mie寄存器中每个比特域用于控制每个单独的中断使能:

1.meie域控制机器模式下外部中断的屏蔽

2.mtie域控制机器模式下计时器中断的屏蔽

3.msie域控制机器模式下软件中断的屏蔽

四。中断等待:

riscv定义了csr寄存器机器模式中断等待寄存器mip

mip每个域反映机器模式下:

1.meip反映外部中断的等待状态

2.mtip反应计时器中断的等待状态

3.msip反应机器软件中断的等待状态

这几个域的属性为只读,软件无法直接写这些域改变其值,只有中断源头被清除后才会相应归零

五。中断优先级和仲裁

1.mcause按下面优先级顺序更新异常编号值:

外部中断第一(PLIC的寄存器配置可以管理多个外部中断源之间优先级)

软件中断第二

计时器中断第三

六。中断嵌套:

只能用软件方式:

进入异常后,程序跳入相应中断服务程序中后,软件强行改写mstatus中mie改为1,再次打开。并注意保存上下文到存储器堆栈中。

arm中断控制器NVIC和GIC后续继续学习

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值