中断
U54内核支持M模式和S模式中断。默认情况下,所有中断都在M模式下处理 。对于支持S模式的 hart,可以有选择地将中断委托给S模式。
U54中断架构如下:
U54内核还支持两种类型的 RISC-V 中断:本地 和全局 。
本地中断 :U54内核的本地中断只有2种,软件中断和定时器中断,这两个中断都由本地中断器(CLINT)生成 。本地中断通过专用中断异常代码和固定优先级直接发送给单个 hart。因此,本地中断没有仲裁,也不需要额外的内存访问来确定中断的原因。
全局中断 :通过平台级中断控制器 (PLIC ) 路由,该控制器可以通过外部中断将中断定向到系统中的任何 hart。所有的外设都属于全局中断。
中断优先级
全局中断的各个优先级由 PLIC 确定。
U54内核的优先级如下,按优先级降序排列:
- 机器外部中断
- 机器软件中断
- 机器定时器中断
- 主管外部中断
- 主管软件中断
- 主管定时器中断
异常
如果一个 hart 在S模式下运行并尝试访问一个仅M模式的控制和状态寄存器 (CSR),这会立即进入异常处理程序并确定下一步行动。mstatus 寄存器中的异常代码将保持值 0x2,表明发生了非法指令异常。根据系统的要求,监督模式应用程序可能会报告错误和/或完全终止程序。
没有特定的启用位来允许发生异常,因为默认情况下它们总是启用的。然而,在引导流程的早期,软件应该将 mtvec.BASE 设置为一个定义的值,其中包含默认异常处理程序的基地址。所有异常都会捕获 tomtvec.BASE。软件必须读取 mcause CSR 以确定异常的来源,并采取适当的措施。
在中断处理程序中发生的同步异常将立即导致程序执行中止中断处理程序并进入异常处理程序。中断处理程序中的异常通常是软件错误的结果,通常应该避免,因为 mepc 和 mcause CSR 将被原始中断上下文中捕获的值覆盖。
RISC-V 定义的同步异常具有优先级顺序,当单个指令同时发生多个异常时,可能需要考虑优先级顺序。下表描述了同步异常优先级顺序。
数据地址断点(watchpoints)、指令地址断点、环境断点异常(EBREAK)都具有相同的异常码(3),但优先级不同,如上表所示。
指令地址未对齐异常 (0x0) 的优先级低于其他指令地址异常,因为它们是目标未对齐的控制流指令的结果,而不是取指的结果。
下面描述了一些用于调试异常和中断的有用 CSR:
陷阱trap
术语陷阱描述了软件应用程序中的控制转移,其中陷阱处理通常在更特权的环境中执行。例如,一个特定的 hart 包含三种权限模式:机器、管理员和用户。每种特权模式都有自己的软件执行环境,包括专用的堆栈区域。此外,每种特权模式都包含用于陷阱处理的单独控制和状态寄存器 (CSR)。在用户模式下操作时,需要上下文切换来处理主管模式下的事件。软件为上下文切换设置系统,然后执行 ECALL 指令,将控制同步切换到 Environment call-from-User 模式异常处理程序。
复位后的默认模式是机器模式 。软件以最高权限级别开始执行,这允许在任何权限级别更改之前初始化所有 CSR 和系统资源。下面的步骤描述了将特权模式从机器模式更改为用户模式所需的步骤,在特定设计上