同步异常典型异常:
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后续继续学习