Renesas-RH850 Interrupts
Renesas学习笔记
Interrupts
1 Overview
1.1 Outline
中断控制器(INTC)确定中断源的优先级,并控制向 CPU 的中断请求。INTC 有一个寄存器,用于设置每个中断源的优先级。中断请求根据通过寄存器配置的优先级进行处理。
INTC 特点
中断源:
- 不可屏蔽中断 (FENMI):每个 CPU 一个通道。
- FE 级中断 (FEINT):每个 CPU 一个通道。
- 低延迟 EI 级可屏蔽中断 (EIINT0 到 31):每个 CPU 32 个通道。
- 处理器间中断:通道 0-3 共享 4 个通道。
- 广播中断:通道 4-7 共享 4 个通道。
- 低速中断(可屏蔽) (EIINT32 到 767):所有 CPU 共享 736 个通道。
中断优先级级别
- 可通过中断控制寄存器配置多达 64 个优先级级别。
中断检测方法
- FEINT 和 EIINT 中断的检测方法分别设置为边缘检测或电平检测。
寄存器组
- 有关寄存器组的详细信息,请参见第 3.2.4.5 节,寄存器组功能。
INTC 由 INTC1 和 INTC2 组成。
INTC1
- 所有 CPU 都有自己的中断控制器。每个 CPU 访问与其对应的 INTC1。INTC1 控制低延迟中断,并具有以下功能:
优先级设置
中断屏蔽设置
中断绑定:CPU 的目标模式(主机/客户,GPID)
- 所有 CPU 都有自己的中断控制器。每个 CPU 访问与其对应的 INTC1。INTC1 控制低延迟中断,并具有以下功能:
INTC2
- INTC2 是所有 CPU 共享的公共中断控制器。INTC2 控制低速中断,并具有以下功能:
优先级设置。
中断屏蔽设置。
中断绑定:目标 PE,CPU 的目标模式(主机/客户,GPID)。
广播中断设置。
- INTC2 是所有 CPU 共享的公共中断控制器。INTC2 控制低速中断,并具有以下功能:
其他
INTIF - 外围中断 / TPTM 中断控制功能。
EINT - 软件中断控制功能
FENC - FENMI 控制功能
FEINC - FEINT 控制功能
1.2 功能概述
从当前运行的程序分支到响应事件的不同程序的行为,被称为异常。此微控制器支持以下类型的异常。有关异常的详细描述,请参见第 3.2.4 节,异常和中断。
以下三种异常称为中断,本节将描述这些中断:
FE 级不可屏蔽中断 (FENMI):
- 即使生成了另一个 FE 级中断 (FEINT),FENMI 中断也会被确认。
- 即使 CPU 系统寄存器 PSW.NP = 1,FENMI 中断也会被确认。
- 当发生多个中断时,不可能从 FENMI 中断返回,恢复功能被禁用。
FE 级可屏蔽中断 (FEINT)
- 只有在未生成 FE 级不可屏蔽中断 (FENMI) 时,才能确认 FEINT 中断。
- 如果 CPU 系统寄存器 PSW.NP = 0,则可以确认 FEINT。
- 返回功能已启用,恢复功能已启用。
EI 级可屏蔽中断 (EIINT)
如果未生成 FE 级中断 (FENMI 或 FEINT),则可以确认 EIINT 中断。
只有 PSW.NP = 0 and PSW.ID = 0,并且在满足以下两个条件时,才能确认 EIINT:
中断优先级级别高于通过 CPU 系统寄存器 ISPR 设置的确认状态的优先级级别。
中断优先级级别高于通过 CPU 系统寄存器 PLMR 设置的优先级级别。返回功能已启用,恢复功能已启用。
可以为每个中断通道指定中断屏蔽。
可以为每个中断通道指定 64 个中断优先级级别之一。
2 Registers
EIC0 至 EIC767 — EI 级中断控制寄存器 0 至 767
这些寄存器定义了对 EI 级中断的控制。每个 EI 中断源都有一个寄存器。 有关完整的中断源列表,请参见中断表。
除 EEICn 的 EIP[5:4] 位外,所有位与 EICn 共享(n 从 0 到 767,后续相同)。如果通道 n 设置为非广播通道(EIBDn.CST = 0)并且通道 n 在 64 优先级模式下绑定到 PE(EIBDn.PEID = m 和 PEm 的 INTCFG.EPL = 1),则使用 EEICn 寄存器。EEICn 和 EICn 必须独占使用。
注意:
如果在外围模块生成相应的中断请求检测到边沿后(在 CPU 确认中断之前)立即将 EIRFn 位设置为 0,则请求可能会丢失。如果在外围模块生成第二个中断请求后立即将 EIOVn 位设置为 0,则溢出标志(EIOVn 位)可能会丢失。如果在 CPU 确认中断后立即将 EIRFn 位设置为 1,将会生成新的中断请求。这也适用于第 3.9.2 节中描述的位操作指令(set1、clr1、not1),即加载指令完成与后续指令生成的同步。对字节执行位操作指令不会影响其他字节。EIRFn 或 EIOVn 可能会因对字节的其他位进行位操作而被意外更新。
EIC0 至 EIC767 寄存器内容
Bit 位置 | Bit 名称 | 功能 |
---|---|---|
15 | EICTn | 此位指示中断检测类型。此位为只读。 0: 通过边沿检测 1: 通过电平检测 在 8 位或 16 位单元写入时,写入复位后的值。 |
14, 13 | 保留 | 读时返回复位后的值。写时,写入复位后的值。 |
12 | EIRFn | 中断请求标志 操作因中断输入接口而异。 0: 无中断请求(初始值) 1: 有中断请求 - 边沿检测 此标志在 CPU 核心确认其自身通道的中断请求时自动清除为 0。 - 电平检测 此位不能通过软件设置或清除。这是一个只读位。 |
11, 8 | 保留 | 读时返回复位后的值。写时,写入复位后的值。 |
7 | EIMKn | 中断屏蔽 如果该位设置为 1,由中断请求标志 (EIRFn) 设定的中断请求将被屏蔽,以禁止通道向 CPU 核心发出中断请求。未处理的中断不会报告,并且该通道的 PMEI 位在 ICSR 中未设置为 1。即使通过设置该位禁用了中断处理,输入的中断信号也不会被屏蔽,并且中断请求标志会设置。该位的状态也会反映在中断屏蔽寄存器 (IMR) 中。当通道的中断请求被 EIMKn = 1 屏蔽时,EIRFn 仍然反映通道的中断请求,并且可以在软件中轮询。当 EIMKn 位清除时,来自该通道的中断请求将发送到 CPU 核心进行后续处理。EIMKn 位的状态也反映在相应的 IMRm 寄存器中。 0: 启用中断处理。 1: 禁用中断处理(初始值)。 |
6 | EITBn | 中断向量方法选择 0: 直接向量方法 1: 表参考方法 |
5 | EIOVn | 中断溢出 0: 无中断溢出 1: 在边沿检测模式 (mode_Eict[n] = 0) 下,当 EICn.EIRF = 1 时,EIINTn 发生。 此位与对 EICn.EIRF 的写访问无关。如果 EICn.EIRF=1,EICn.EIOVn=0,并且通过 8 位访问将 1 写入 EICn.EIRF,则不会设置 EICn.EIOV。 即使通过位操作指令对 EICn[7:0] 的其他位进行位操作,EICn.EIOV 位也可能被意外清除。为了避免这种情况,请使用 EEICn。 |
4 | 保留 | 读时返回复位后的值。写时,写入复位后的值。 |
3, 0 | EIPn | 这些位指定 16 个中断优先级级别(0: 最高优先级,15: 最低优先级)。 如果同时生成两个或更多 EI 级中断请求,则选择优先级较高的源,并将其发送到 CPU 核心。如果这些位指定的优先级相同,则选择具有较低默认优先级通道号的源。 |
注意
当通道 n 被定义为广播中断(EIBDn.CST=1)时,在通道的初始配置后,必须将该通道的 EICn 寄存器中的 EIMKn 和 EIRFn 位设置为 0。在启用了 EIINTn 中断的期间,禁止屏蔽通道的中断处理(EIMKn=1)。当需要屏蔽广播中断时,可以使用每个 PE 的 INTC1 中的 EIC4 至 EIC7 寄存器来屏蔽相应的广播中断。
IMR0 至 IMR23 — EI 级中断屏蔽寄存器 0 至 23
这些寄存器是 EIC 寄存器中 EIMK 位的聚合。在 EIC 寄存器中设置 EIMK 位会反映在此寄存器中。同样地,在此寄存器中设置某个位也会反映在相应的 EIC 寄存器的 EIMK 位中。
Bit 位置 | Bit 名称 | 功能 |
---|---|---|
31 至 0 | EIMK (n × 32 + 31) 到 EIMK (n × 32 + 0) | 这些是 EI 级可屏蔽中断(INT)通道 0 到 767 的中断屏蔽位。 0: 启用中断处理 1: 禁用中断处理 |
注意:
- n = 0 到 23
- 中断表中列出的给定通道号的保留 EIMK 位必须设置为 1。
注意事项:
当通过写入 IMR1 到 23 寄存器来写入 EIMK 位时,仅允许相应通道中 EIBDn.PEID(n = 32 到 767)寄存器中设置的 PE 进行访问。来自不同 PE 的写入不会更新 EIMK 位。
当通道用作广播中断(EIBDn.CST=1)时,通道对应的 EIMK 位必须设置为 0。
3 Interrupt Operation
Level Interrupts
有关Level Interrupts的操作,请参见第 6.5.1 节,Level Interrupts处理流程。
Inter-Processor Interrupts
有关处理器间中断的操作,请参见第 3.4 节,处理器间中断。
Broadcast Interrupts
INTC2 具有广播中断功能。通过此功能,EIINTn 请求输入被作为广播通知 0-3 转移到每个 CPU 的 INTC1 的 EIINT4-7,而无需优先级判断。 如果使用广播功能,EIINTn 的中断检测类型必须是边沿检测。如果 EIINTn 的中断检测类型配置为电平检测,则无法激活广播功能(EIBDn.CST 无法设置)。 当设置 EIBDn.CST 时,EIINTn 用作广播中断源。 EIBDn.BCP[1:0] 确定触发哪个广播中断端口(EIINT4-7)。禁止将多个中断通道分配到同一个广播中断(EIINT4-7)。 有关广播中断的操作,请参见第 6.3.5 节,EIBD32 至 EIBD767 — EI 级中断绑定寄存器 32 至 767 和第 6.5.4 节,广播中断处理流程。
软件中断
有关软件中断的操作,请参见第 6.3.12 节,SINTR0 至 SINTR3 — 软件中断寄存器和第 6.4.6 节,优先级处理。
DTS 中断合并功能
最多 128 个传输结束中断和最多 128 个传输计数匹配中断被汇聚为一种类型的中断,每 32 个中断为一个单元。所有 DTS 通道的 128 位组合成 8 个寄存器 PINT0 至 PINT7。如果同一状态寄存器(PINT0 至 PINT7)中的多个 DTS 通道请求中断,则仅设置该寄存器中最低 DTS 通道的位。有关更多信息,请参见第 6.3.13 节,PINTn + x — 外围中断状态寄存器和第 6.3.14 节,PINTCLRn + x — 外围中断状态清除寄存器。
优先级处理
FENMI 和 FEINT 没有优先级控制,因为它们只有一个通道。 EI 级可屏蔽中断的优先级在每个 PE 的 EIINT0-31 和 EIINT32-767 内部确定。优先级由每个中断通道指定的 64 个中断优先级级别(EEICn.EIPn[5:0],EICn.EIPn[3:0])确定。在具有相同优先级级别的通道中,优先选择通道号较低的通道。