16.中断
本章描述了Interrupt Router模块,该模块调度来自外部资源、内部资源和SW的中断(这里称为服务请求)到CPU和DMA模块(这里称为service Provider)。
本文档适用于TC3xx,涵盖的主题有:
中断系统架构
中断系统配置
中断路由器操作
16.1 特性列表
本文件适用范围:
以下列表展示了中断路由器模块的主要特性:
“中断系统,支持多达 1024 个服务请求。
“每个 ICU1)/ 服务提供者支持多达 255 个服务请求优先级级别。
“支持多达 8 个 ICU / 服务提供者。
“为每个已实现的 CPU/DMA 模块(服务提供者)提供一个专用的 ICU。
“低延迟仲裁 —— 从接收到服务请求到将其发送到服务提供者仅需三 / 四个时钟周期 2)。
“每个外设中断都有一个专用的服务请求节点(SRN)。
“每个 SRN 都有一个可编程的 8 位优先级向量 1)。
“每个 SRN 可以映射到一个已实现的 ICU / 服务提供者。
“在配置的服务提供者确认中断时,SRN 由硬件自动清除。
“具有完整性支持的中断系统。
“每个 CPU 有 8 个通用服务请求(GPSR),可作为软件中断使用(未分配给外设或外部中断)。
“服务请求广播寄存器(SRB)可同时向多个服务提供者发出通用服务请求(软件中断)信号。
“基于优先级的服务请求屏蔽(对于 CPU,相关控制寄存器包含在 CPU 中)。
“具有滤波模式和触发模式的外部中断(例如下降沿、上升沿、高电平或低电平)。模式可以在运行时 3) 进行配置。
“CPU 唤醒支持(如果 CPUx 处于空闲状态,向 SCU 发送针对 CPUx 的服务请求以唤醒 CPUx)。
16.3概述
中断请求既可以由cpu处理,也可以由DMA模块处理。中断请求在本文中被称为“服务请求”而不是“中断请求”,因为它们可以由任何一个服务提供者提供服务。
中断系统是在中断路由器模块中实现的,该模块包括服务请求节点(srn)、中断控制单元(ICUs)和用于软件开发支持的附加功能。
如图173所示,每个可以生成业务请求的模块都连接到中央中断路由器模块中的一个或多个服务请求节点(service Request node, srn)。中断路由器模块还包括几个通用的服务请求节点(srn),可用于软件(SW)触发的服务请求。
每个SRN包含一个服务请求控制寄存器(SRC),用于配置服务请求,例如:
优先级,映射到一个可用的服务提供者。
每个SRN连接到中断路由器模块中的所有icu,其中SRN控制寄存器设置定义了目标服务提供者和服务请求的优先级。
每个ICU处理来自映射到该ICU的srn的竞争服务请求之间的中断仲裁。
每个ICU连接到一个服务提供者(CPU或DMA模块),其中ICU提供仲裁轮的有效获胜服务请求/SRN,服务提供者在何时以及处理哪个服务请求时向ICU发送信号。
16.4 SRN (Service Request Nodes)
中断路由器模块内的每个服务请求节点(SRN)都包含一个服务请求控制(SRC)寄存器和接口逻辑,将其连接到中断路由器模块外的触发单元和中断路由器内的中断仲裁总线(参见图173)。
16.4.1 Service Request Control Registers
“启用 / 禁用信息(SRE)。
“服务请求置位和服务请求清除位(SETR,CLRR)。
“软件粘性位(SWS)作为软件发起的服务请求的指示(SWS)。
“服务请求优先级向量(SRPN)。
“服务请求目标 / 服务提供者(TOS)。
“服务请求状态位(SRR)。
“完整性错误信号发送到安全管理单元(SMU)。
“中断溢出位(IOV)。
除了由相关的触发单元通过硬件激活外,每个SRN还可以通过两个软件发起的服务请求控制位由软件设置或复位。
16.4.1.1通用服务请求控制寄存器格式
16.4.1.1.1服务请求控制寄存器(SRC)
本章给出的描述描述了服务请求控制寄存器(SRC)的特征。
请注意:几个模块在模块级别上有额外的中断相关控制寄存器(例如中断状态,设置清除或启用寄存器)。这些模块寄存器在模块章节的相应章节中进行了描述。
Service Request Control Register i
SRCi (i=0-1023)
16.4.1.2修改SRN配置
所有服务请求节点在默认情况下都是禁用的。要使用服务请求节点,必须通过将 SRC.SRE 位设置为 “1” 来进行配置和启用。
可以针对中断服务提供者目标(SRC.TOS)和服务请求优先级编号(SRC.SRPN)来配置服务请求节点。
一旦启用了一个 SRN,可以使用以下顺序来更改 TOS 和 / 或 SRPN 位字段:
“禁用 SRN(设置 SRC.SRE = '0')。
“检查 SRN 是否已禁用(读取 SRC.SRE 并检查 SRE 是否为 '0')。
“检查寄存器 LWSRx(最后获胜的服务请求,读取 / 轮询 LWSRx,见下面的注释):
-如果 LWSRx.STAT = '0' 或者 LWSRx.SRPN 或 LWSRx.ECC 不再等于旧的 SRC 值,则继 续 下一步(更改 SRC 值)。
-如果 LWSRx.STAT = '1' 并且 LWSRx.SRPN 和 LWSRx.ECC 等于(旧的)SRC 值,则再次检查 LWSRx。
“更改 SRC.TOS 和 / 或 SRC.SRPN 位字段。
“启用 SRN(SRC.SRE = '1')(写入 SRC.SRE)。
如果必须重新配置的服务请求在被禁用时刚刚处于挂起状态,那么该服务请求可能已经被仲裁并提供给中断服务提供者(CPU 或 DMA)。在这种情况下,重新配置的 SRN 的启用应该延迟,直到上述 LWSRx 轮询算法完成,以确保刚刚被禁用的 SRN 的配置不再存在于中断系统中。如果被禁用的服务请求节点映射到 TriCore,那么读取 / 轮询序列的时间是不确定的。如果中断服务提供者是 DMA 模块,进入和确认在同一周期内被信号通知。LWSRx 中的 “x” 表示必须检查与 TOS 设置相关的 LWSR 寄存器(TOS = 0 -> LWSR0,TOS = 1 -> LWSR1,……)。
16.4.1.3 SRC寄存器的保护
SRC寄存器通过片上总线主TAG-ID保护进行写保护(参见第16.8.1章)。这种保护是通过中断路由器控制寄存器ACCEN_CONFIG和ACCEN_TOSx控制的。
Access protection of SRC[31:16]
" SRC[31:16]是由ACCEN_CONFIG写保护(x = SRC. tos) "
"SRC[15:0]是由ACCEN_CONFIG写保护"
将SRC写保护拆分为SRC[31:16]和SRC[15:0]的不同写保护寄存器,允许为所有服务请求节点(在运行时通常是静态的)和服务请求节点控制寄存器的配置定义不同的保护配置,这些寄存器可能在运行时被相关的软件任务用作正常应用程序的一部分(例如软件中断)。
Write access to SRC[31:16] with access protection violation
当用32位数据访问写入SRC寄存器时,只有没有违反ACCEN保护的SRC寄存器部分将被更新:
“对 SRC [31:16](由 ACCEN_TOSx 控制)和 SRC [15:0](由 ACCEN_CONFIG 控制)的违规情况。
不会更新 SRC 寄存器,向安全管理单元(SMU)发送警报。
“对 SRC [31:16](由 ACCEN_TOSx 控制)的违规情况。
不会更新 SRC [31:16],但会更新 SRC [15:0],向 SMU 发送警报。
“对 SRC [15:0](由 ACCEN_CONFIG 控制)的违规情况。
会更新 SRC [31:16],不会更新 SRC [15:0],向 SMU 发送警报。
SRC配置的访问保护(SRC[15:0])
所有SRC寄存器的下半部分SRCx[15:0]通过ACCEN_CONFIG寄存器进行写保护。
这意味着ACCEN_CONFIG的配置定义了哪个TAG ID被允许写入所有实现的SRC寄存器的下半部分。请注意SRC的修改。服务条款,SRC。行为,SRC。SRPN(全部映射在SRC[15:0]中)也会间接修改SRC。ECC位字段。
Background / Use Case (SRC[15:0] protected by ACCEN_CONFIG)
SRCx [15:0] 包括服务请求节点的配置位 / 位字段,这些通常是:
“在启动期间进行配置。
“在运行时是静态的。
“不应由非安全软件任务修改。
ACCEN_CONFIG 允许进行一种配置,其中只有特定的 TAG ID 被启用才能重新配置 SRC 配置,例如 CPUx.DMI 安全 TAG ID。
Access protection of the SRC control bits (SRC[31:16])
SRC 寄存器的上半部分 SRC [31:16] 通过其中一个 ACCEN_SRC_TOSx 寄存器进行写保护。
保护一个 SRN 的 ACCEN_SRC_TOSx 寄存器由该 SRN 的 SRC.TOS 配置来选择:
“如果 SRCx.TOS = 0,则该 SRC 寄存器由 ACCEN_SRC_TOS0 进行写保护。
“如果 SRCx.TOS = 1,则该 SRC 寄存器由 ACCEN_SRC_TOS1 进行写保护。
“如果 SRCx.TOS = 2,则该 SRC 寄存器由 ACCEN_SRC_TOS2 进行写保护。
注意:对于“保留的”TOS编码,没有实现ACCEN_SRC_TOSx寄存器。这意味着对于配置了保留TOS编码的SRCy,可以始终写入SRCy。对未实现的ISP (SRC.TOS=Reserved)的业务请求将作为告警信号发送给SMU。
背景/用例(SRC[31:16]受ACCEN_SRC_TOSx保护)
SRCx[31:16]包含服务请求节点的控制位/位字段,这些字段可以在运行时用于:
“设置一个服务请求(软件中断)。
“清除一个服务请求。
“清除中断溢出位或粘性位。
“通过 SRC.ECC 位字段注入一个 ECC 错误。
如果没有这种机制,任何 CPU 任务以及任何具有主功能的片上总线 IP 都可以例如向任何 CPU 生成软件中断和 / 或清除任何中断。
所实现的机制使系统能够以 “每个 CPU” 的粒度封装软件任务,并将错误软件的副作用限制在执行该软件的 CPU 上。
例如:所有映射到 CPU0(TOS = 0)的 SRN 都由 ACCEN_SRC_TOS0 进行写保护。这意味着通过 ACCEN_SRC_TOS0 配置可以确定允许哪个 TAG ID 设置或清除对 CPU0 的服务请求。例如,可以将 SW.ACCEN_SRC_TOS0 配置为仅允许 CPU0 任务向 CPU0 设置软件中断。这确保了任何其他 CPU 或 DMA 通道上的损坏软件不能通过永久的软件中断来影响 CPU0。
注意:在这种情况下,一个访问保护错误,写被静默忽略,一个错误信号给SMU。除了向SMU发送此信令外,不会产生其他错误、中断或trap。
16.4.1.4请求设置和清除位(SETR, CLRR)
SETR和CLRR位允许软件设置或清除业务请求位SRR。
“向 SETR 写入 1 会导致位 SRR 被设置为 1。
“向 CLRR 写入 1 会导致位 SRR 被清除为 0。
“同时向 SETR 和 CLRR 写入 1,SRR 不会改变。
“写入 SETR 或 CLRR 的值不会被存储。
“向这些位写入 0 没有效果。
“读取这些位时总是返回 0。
16.4.1.5 Enable Bit (SRE)
SRE位允许中断参与选定服务提供者的仲裁。它不启用或禁用请求标志SRR的设置;请求标志可以由硬件或软件(通过SETR)独立于SRE位的状态来设置。这允许服务请求由硬件或通过软件轮询自动处理。
SRE = 1:
如果SRE = 1,将挂起的服务请求传递给指定的服务提供者进行中断仲裁。当中断服务提供程序确认服务请求时,硬件会自动将SRR位设置为0。建议在这种情况下,软件不应该修改SRR位,以避免由于硬件控制该位而导致的意外行为。
SRE = 0:
如果SRE = 0,挂起的服务请求不会传递给服务提供者。软件可以轮询SRR位来检查服务请求是否处于挂起状态。为了确认服务请求,SRR位必须由软件通过向CLRR写入1来重置。
注意:在本文档中,“活动源”是指服务请求控制寄存器将其请求使能位SRE设置为1以允许其服务请求参与中断仲裁的SRN。
16.4.1.6 Service Request Flag (SRR)
设置SRR标志时,表示服务请求处于挂起状态。它可以通过硬件直接设置或复位,也可以通过使用SETR和CLRR位的软件间接设置或复位。通过软件直接写入这个位没有效果。
无论使能位SRE的状态如何,都可以通过硬件或软件设置或清除SRR。但是,如果设置了启用位,则仅转发请求以进行服务。如果SRE = 1,则待处理的服务请求将参与由设备的TOS位字段选择的服务提供商的中断仲裁。如果SRE = 0,待处理的服务请求将被排除在中断仲裁之外。
当服务请求得到确认和服务时,硬件会自动重置SRR。软件可以轮询SRR来检查待处理的服务请求。在这种情况下,SRR必须通过软件重置,通过向CLRR写入1。
注意:清除挂起的服务请求标志SRR并启用相应的服务请求节点(SRN)应该分两步/两次写入完成:首先清除SRR标志(SRC.CLRR),然后启用(SRC.SRE)。
16.4.1.7 Type-Of-Service Control (TOS)
每个TriCore CPU和每个系统DMA实例都可以充当中断服务提供者(ISP)。
服务请求节点可以通过TOS位字段映射到确切的一个ISP。
TOS配置将服务请求映射到
“一个中断服务提供者(CPUx、DMA)。
“与中断服务提供者相关的中断路由器内部中断控制单元(ICUx,TOS = 0 -> ICU0,TOS = 1 -> ICU1,……)。
“一个 ACCEN_SRC_TOSx 写保护寄存器(TOS = 0 -> ACCEN_SRC_TOS0,……)。”
注:如果一个SRN已经使能并配置了Reserved TOS编码,则硬件或软件触发该SRN会通过Alarm信号发送给SMU,无需处理。
注:如果一个SRN已经使能并配置了Reserved TOS编码,则硬件或软件触发该SRN会通过Alarm信号发送给SMU,无需处理。
16.4.1.8 SRPN (Service Request Priority Number)
服务请求优先级号(SRPN)定义了服务请求相对于从同一服务提供者请求服务的其他来源的优先级,以及相对于服务提供者本身的优先级。
每个活动SRN映射相同的服务提供者(相同的TOS配置):
“可以有唯一的 SRPN(服务请求优先级编号)值。
“可以有非唯一的 SRPN,以便给一组服务请求赋予相同的优先级。
“对于具有相同 SRPN 的一组服务请求,执行顺序无法确定。
“如果一个服务请求节点不活跃 —— 意味着其 SRE 位为 0—— 则对 SRPN 配置没有限制。”
Service Provider is a CPU
服务请求通过位于每个CPU中的中断向量表与服务请求优先级编号相关联。这意味着CPU中断向量表是按优先级编号排序的。这与传统的中断CPU架构不同,在传统的中断CPU架构中,它们的中断向量表是由中断源排序的。CPU中断向量表允许单个外设为不同目的具有多个优先级。
注释
1.对于CPU来说,0000H的SRPN值是一个特殊值。一个SRPN 0000H的服务请求被CPU忽略。处理步骤CPU不会确认它,因此不会清除相关的服务请求节点。总线因为优先级0是最低的服务请求优先级,所以它不会阻塞中断路由器仲裁。
2. TriCore cpu提供灵活的中断表对齐,具有8字节或32字节的可配置矢量间距。请参见CPU章节。
Service Provider is a DMA
服务请求与服务请求优先级编号以及 DMA 通道编号相关联:
“如果实现了 DMA 通道 x,那么 SRPN = x 将触发 DMA 通道 x。只有 SRPN 编号为 0…… 最大通道编号才会触发相关的 DMA 通道。SRPN 编号大于最大通道编号将被视为对 DMA 的任何其他未决服务请求进行处理,但不会在 DMA 模块内部导致 DMA 通道触发或任何其他信号。
Examples
在 16 通道 DMA 模块的情况下,SRPN 编号 00H 将触发通道 0,07H 将触发通道 7。所有大于 0FH 的 SRPN 将像处理任何其他服务请求一样被处理,但不会导致通道触发。
在 64 通道 DMA 模块的情况下,SRPN 编号 00H 将触发通道 0,17H 将触发通道 23,3FH 将触发通道 64。所有大于 3FH 的 SRPN 将不会像任何其他服务请求那样被执行,并且不会导致通道触发。
“由于 TOS、SRPN 或 SRE 损坏而触发不存在的 DMA 的损坏 SRC 配置将由 ICU EDC 检查(第 16.4.1.9 章)检测到,并且一旦具有损坏配置的服务请求被中断服务提供者(这里是 DMA)确认,就会向 ICU 发出信号。
16.4.1.9 ECC编码(ECC)
在以下情况下,SRC.ECC 位字段将由服务请求节点(SRN)更新:
“SRC [31:0] 的写操作或读 - 修改 - 写操作。
“对 SRC [15:0] 的写操作(16 位写)。
“对 SRC [15:8] 的写操作或对 SRC [7:0] 的写操作(字节写)。”
在对 SRC 进行 32 位写操作或读 - 修改 - 写操作的情况下,ECC 位字段将用计算出的 ECC 进行更新,写入 ECC 位字段的数据将被忽略。
ECC 编码涵盖了 SRC.SRPN、SRC.TOS、SRC.SRE 的新值以及所写服务请求节点的内部 10 位索引编号。
没有永久的 ECC 检查。每当具有挂起服务请求的服务请求节点被选定的(TOS)服务提供者接受为要处理的下一个服务请求时,就会检查 ECC 检查。
为了检查错误检测机制,可以通过以下方式插入 ECC 错误(修改 ECC 位字段):
“对 SRC [23:16] 进行写操作(字节写)。
“对 SRC [31:16] 进行写操作(16 位写)。”
注意:在当前实现中,ECC代码仅用于错误检测。检测到的错误将报告给SMU,但不进行纠正。
ECC Code
用于中断路由器错误检测机制的ECC代码是具有DED(双错误检测)能力的Hsiao 22_5代码:
16.4.1.10中断触发溢出位(IOV)
如果两个条件都为真,IOV位由HW设置:
“服务请求处于挂起状态。
“通过中断触发或 SETR 位触发新的服务请求。”
16.4.1.11中断触发溢出清除位(IOVCLR)
中断触发溢出清除位可以用来清除IOV位。通过在IOVCLR位上写一个“1”来清除IOV位。
16.4.1.12 SW Sticky Bit (SWS)
当用 1 写入请求设置位(SETR)时,软件粘性位(SWS)被设置。
16.4.1.13 SW Sticky Clear Bit (SWSCLR)
软件粘性清除位可用于清除 SWS 位。通过向 SWSCLR 位写入 “1” 来清除 SWS 位。
16.5 模块中断请求触发到服务请求节点(SRN)的映射
所有模块中断请求都被映射到中断路由器中的服务请求节点(SRN)。
每个模块中断请求都有一个专用的服务请求节点(SRN)。
每个 SRN 在中断路由器模块内都有一个唯一的 SRN 索引编号。中断路由器模块本身的功能并不需要这些索引编号。索引编号可用于通过 OTGM 功能选择服务请求节点进行观察。
如果知道服务请求控制(SRC)寄存器在 SRC 地址范围内的地址偏移量,就可以直接计算出其索引编号,另请参见第 16.5.1 章。
中断路由器模块有一个 1024 位中断触发输入向量。每个中断触发输入向量位 [x] 与具有 SRN 索引编号 x 的 SRN 相关。这意味着中断触发输入向量位 [x] 上的触发脉冲将触发 SRN [x]。
注意:中断触发信号上的正边被解释为中断触发。参见:第16.5.3章。
16.5.1 SRC Index Number
每个服务请求节点都可以通过其专用的服务请求控制寄存器(SRC)进行配置和控制。已实现的 SRC 寄存器在第 28 页的章节(16.4.1章节)中进行了描述。
与一个模块实例相关的 SRC 寄存器的地址在整个 Aurix 系列中是相同的(例如 QSPI0 的中断)。
每个 SRC 在中断路由器模块内都有一个唯一的索引编号。
如果知道服务请求控制(SRC)在 SRC 地址范围内的地址偏移量,就可以直接计算出其索引编号:
Index(SRC) = <SRC Address Offset> / 4
16.5.3 Timing characteristics of Service Request Trigger Signals
中断路由器由系统外设总线(SPB)时钟提供时钟。中断路由器的模块中断 / 服务请求触发信号规则如下:
“触发信号必须与 SPB 时钟同步。
“中断路由器触发输入是边沿敏感的(正时钟边沿)。
“触发信号脉冲的最小高电平长度为一个 SPB 时钟周期,高电平脉冲长度可以大于一个 SPB 时钟周期。
“与调试相关的触发信号脉冲应由相关模块保持高电平,直到触发被处理为止。”
16.6 Interrupt Control Unit (ICU)
中断路由器模块为每个服务提供者(CPU 和 DMA 模块)包含一个中断控制单元(ICU),其中每个 ICU 与一个服务提供者相关。服务请求节点(SRN)可以通过 SRN 的 SRCx.TOS 寄存器位字段映射到其中一个 ICU(另请参见:图 173)。
中断控制单元(ICU):
“管理映射到该 ICU 的来自 SRN 的竞争服务请求之间的仲裁。
“将仲裁回合的获胜者提供给服务提供者。
“从服务提供者接收接受了哪个服务请求的信息。
“检查接受的服务请求信息(ECC 检查)。
“向安全管理单元(SMU)发出完整性错误信号。
“管理相关 SRN 中已确认服务请求的清除。”
注意:在当前实现中,ECC 码仅用于错误检测。检测到的错误会报告给安全管理单元(SMU),但不会进行纠正。
16.6.1 ICU Interface to ISP
中断控制单元(ICU)和连接的中断服务提供者(ISP)之间的接口由中断路由器(IR)的纠错码(EDC)保护覆盖。为了增加此接口的稳健性,在没有向 ISP 发出服务请求和 / 或 ISP 未向 ICU 确认服务请求时,ICU 和 ISP 的输出被设置为默认值。
在 VALID 信号出现固定为 1 的错误时,CPU 将忽略默认信息(SRPN = 8'h00),DMA 将触发通道并向 ICU 确认默认信息,在 ICU 中该信息将被 EDC 保护检测到,并向安全管理单元(SMU)发送警报。
在 ACKNOWLEDGE 信号出现固定为 1 的错误时,ICU 将采用默认值并检测到 EDC 错误。
只要 ICU 未向连接的 ISP 发送服务请求(VALID = '0'),ICU 的输出信号就被设置为以下默认值:
只要中断服务提供者(ISP)未向相关的中断控制单元(ICU)确认服务请求(ACKNOWLEDGE = '0'),ICU 的输出信号就被设置为以下默认值:
16.6.2 ICU Control Registers
本节描述中断控制单元(ICU)寄存器。每个 ICU 包括两个控制寄存器:
“最新获胜服务请求寄存器(第 16 页)提供关于上一轮服务请求仲裁的获胜者的信息。
“最后确认的服务请求寄存器(第 17 页)提供关于服务提供者接受的最后一个服务请求的信息。
“错误捕获寄存器(第 17 页)在 ICU 检测到 ECC 错误时捕获最后确认的服务请求寄存器(第 17 页)的内容。”
16.6.2.1 Latest Winning Service Request Register (LWSR)
与 ICUx 相关的最新获胜服务请求寄存器 x。
最新获胜服务请求寄存器提供关于上一轮仲裁的获胜者的信息。该寄存器的位字段表示 ICU 提供给中断服务提供者的内容。
16.6.2.2 Last Acknowledged Service Request Register (LASR)
与 ICUx 相关的最后确认的服务请求寄存器 x。
最后确认的服务请求寄存器表示关于中断服务提供者确认的最后一个服务请求的信息。该寄存器的位字段显示中断服务提供者与最新确认一起发送的内容。
16.6.2.3 Error Capture Register (ECR)
与 ICUx 相关的错误捕获寄存器 x。
在检测到 ECC 错误时,错误捕获寄存器(ECRx)捕获相关的服务请求信息。这是通过在检测到 ECC 错误时用最后确认的服务请求(LASRx)寄存器的内容更新 ECR 来实现的。ECR 始终显示检测到 ECC 错误的最后一个 ECR 内容。
软件可以通过写入 ECRx 来清除 ECR 位字段 PN、ECC、ID。错误状态(STAT)和错误溢出(EOV)位可以用作错误处理机制,并指示错误信息已丢失。
如果软件清除了 ECR.EOV,那么 ECR.EOV 必须与 ECR.STAT 一起被清除。如果在清除 ECR.EOV 的同时检测到新的错误,那么硬件会再次设置 ECR.EOV,而 ECR.STAT 会被清除。
注意:在当前实现中,ECC 码仅用于错误检测。检测到的错误会报告给安全管理单元(SMU),但不会进行纠正。
16.7 General Purpose Service Requests, Service Request Broadcast
中断(INT)模块提供多组通用服务请求(GPSR)以及一种由软件并行触发一个通用服务请求组中的多个服务请求的机制(第 16.7.2 章)。
通用服务请求旨在用于软件中断,因为它们没有映射到硬件中断触发事件。
16.7.1 General Purpose Service Requests (GPSRxy)
中断(INT)模块提供多组通用服务请求:
“每个通用服务请求组由八个服务请求节点组成。
“通用服务请求被命名为 SRC_GPSRxy(注释 1)。
“通用服务请求旨在用于软件中断(没有映射到硬件服务请求触发)。
通用服务请求(GPSR)只能通过向相关的 SRC_GPSRxy.SETR(注释 1)位写入 “1” 或者向相关的服务请求广播寄存器(SRBx [y])中的相关位写入 “1” 来触发。
16.7.2 Service Request Broadcast Registers (SRBx)
服务广播寄存器(SRBx)可用于并行地向多个服务提供者(CPU 或 DMA)设置服务请求。
对于每个通用服务请求组(GPSRxy(注释 1))都实现了一个服务请求广播寄存器(SRBx)。
服务请求广播寄存器(SRBx)可用于并行地触发 SRC_GPSRx(注释 1)组内的多个服务请求(见图 175)。
“服务请求广播寄存器总是被读取为 0。
“向 SRBx [y] 写入‘1’会触发服务请求 GPXRxy(注释 1)。
“向 SRBx [31:6] 写入‘1’没有效果。”
16.7.3 Access protection of SRBx registers (ACCEN_SRBx)
每个 SRBx 寄存器通过专用的 ACCEN_SRx0/ACCEN_SRBx1 寄存器组进行写保护:
“每个 SRBx 寄存器都有一个相关的 ACCEN_SRBx 寄存器(x 为相同的编号)。
“ACCEN_SRBx 的配置定义了哪个 TAG ID 被允许写入相关的 SRBx 寄存器。
“在发生访问保护违规的情况下,写入操作将被默默地忽略,并且会向 SMU 发出错误信号。除了向 SMU 发出此信号外,不会生成其他错误、中断或陷阱。
用例:ACCEN_SRBx 定义了哪个 TAG ID 被允许写入 SRBx,以便触发通用服务请求组 x 的多个服务请求节点。
16.8 System Registers
中断路由器模块不支持 CLC、OCS 和 KRSTx 寄存器。中断路由器支持多组访问使能(ACCEN)寄存器:
“INT_ACCENx:寄存器访问保护通过标准的 ACCEN 寄存器实现,但使用了寄存器 ACCEN_CONFIG0/1、ACCEN_SRBx0/1 和 ACCEN_SRC_TOSx0/1。
“INT_CLC:中断路由器模块不支持此时钟控制(CLC)功能。
“INT_KRSTx:中断路由器模块不支持模块内核复位功能。
“OCS:中断路由器不支持 OCDS 控制和状态寄存器。
16.8.1 Write Protection of Interrupt Router registers
中断路由器模块提供基于主 TAG ID 的写访问保护,作为 AURIX 安全概念的一部分。每个具有直接或间接总线主设备能力的片上资源都有一个唯一的主 TAG ID,可用于识别片上总线事务的主设备(另请参见片上总线系统章节)。
中断路由器模块通过三个访问使能寄存器 / 寄存器组为控制寄存器提供写保护(见图 176):
服务请求广播寄存器的访问保护(ACCEN_SRBx0/1)
中断路由器模块提供一个或多个通用服务请求组 GPSSxy:
“x 是通用服务请求组(GPSRx)的编号。
“y 是组内服务请求节点的编号(y = 5:0,一个组有 6 个服务请求节点)。
对于每个 GPSRx 组,实现了一个专用的服务请求广播寄存器(SRBx),可用于并行设置该组的多个服务请求节点。
有关更多详细信息,请参见第 16.7.3 章。
静态控制寄存器的访问保护(ACCEN_CONFIG0/1)
ACCEN_CONFIG 为以下寄存器提供写访问保护:
“所有 SRC 寄存器的低 15 位 SRCx [15:0]。这包括 SRC 位字段服务类型(TOS)、服务请求使能(SRE)和服务请求优先级编号(SRPN)(有关更多详细信息,请参见第 16.4.1.3 章)。
“所有 ICU 错误捕获寄存器(ECR)的 ECRx。
SRC 控制寄存器的访问保护(ACCEN_SRC_TOSy)
ACCEN_SRC_TOSy 为以下寄存器提供写访问保护:
“SRCx [31:16]。
有关更多详细信息,请参见第 16.4.1.3 章。
16.9 仲裁过程
中断模块中的每个中断控制单元(ICU)都有自己的中断总线。每个服务请求节点(SRN)都可以通过将其通过 SRC.TOS 位字段设置映射到相关的 ICU / 中断总线,从而被定向到一个服务提供者。
当出现第一个挂起的服务请求时,相关的中断总线会启动第一个仲裁过程。相关的中断控制单元提供在上一次仲裁过程中获胜的服务请求。
仲裁过程使用 3 到 4 个系统外设总线时钟周期来确定具有最高优先级编号(SRPN)的挂起服务请求。具体的实现数量在模块实现章节中进行描述。
在仲裁过程中,中断总线比较通过 SRC.TOS 设置映射到该中断总线的所有挂起服务请求节点的 SRC.SRPN 位字段。在仲裁过程中,具有最高优先级编号的挂起服务请求被确定为获胜者,并且相关的 SRN 服务请求控制寄存器位字段值 SRPN、ECC 以及 SRN 的索引被提供给中断控制单元。中断控制单元将这些(SRPN、ECC、SRN 索引)提供给服务提供者。当中断控制单元从服务提供者那里收到带有确认的这些信息时,会进行 ECC 检查。ECC 检查是使用接收到的值进行的:ECC、SRPN、SRN 索引编号、假设为 “1” 的 SRE 位(SRN 已启用)以及中断控制单元的 TOS 编号。
中断路由器模块向安全管理单元发出检测到的错误信号(安全管理单元中的一位,涵盖来自所有 SRN 和中断控制单元的错误)。
注意:在当前实现中,ECC 码仅用于错误检测。检测到的错误会报告给安全管理单元,但不会进行纠正。
16.9.1 每个仲裁过程的时钟周期数
中断路由器的实现可以在以下方面进行配置:
“支持的服务请求数量(服务请求节点,SRN,最多 1024 个);
“SRPN 位大小(8 位);
“支持的服务提供者数量(中断控制单元,ICU);
“每个服务请求仲裁的时钟周期数(3 - 4 个系统外设总线时钟周期)。
在 “AURIX 产品中实现的中断路由器模块的特性” 子章节中描述了在 AURIX 产品中实现的中断路由器模块的特性。
图 178 展示了具有 3 个周期仲裁的中断路由器实现的中断时序。
周期 1:中断控制单元(ICU)没有挂起的服务请求(因此没有仲裁回合)。
周期 2:一个模块通过向中断路由器模块中的相关服务请求节点(SRN)发送脉冲来触发服务请求。
周期 3 - 5:对中断控制单元(ICU)的所有挂起服务请求进行仲裁。
周期 6:ICU 将获胜的服务请求(SRPN、ECC、SRN 索引)提供给服务提供者。
周期 7 - n - 1:每当有来自另一个 SRN 的新服务请求挂起时,ICU 就会重新仲裁,如果有具有更高 SRPN 编号(更高优先级)的新挂起服务请求,则将新的获胜服务请求提供给 ICU。
周期 6 - n - 1:中断服务提供者获取最新获胜 SRN 的信息(进入)。
周期 n:服务提供者确认服务请求(提供已确认服务请求的 SRPN、ECC、SRN 索引信息)。在同一时钟周期中,ICU 将信号更改为 “没有可用的有效服务请求” 给 ICU。
周期 n + 1:ICU 对确认信息(SRPN、ECC、SRN 索引、SRE = '1'、ICU 的 TOS 编号)进行 ECC 检查。如果不匹配 -> 向安全管理单元(SMU)发出完整性错误信号 / SRPN、ECC 和索引被捕获在错误捕获寄存器(ECR)中。具有已确认索引编号的 SRN 由硬件清除。
周期 n + 2:如果至少有一个针对 ICU 的服务请求挂起:对针对 ICU 的所有挂起服务请求进行新的仲裁。
16.9.2 服务请求有效
中断控制单元(ICU)通过断言有效(Valid)信号向中断服务提供者(ISP)通知在仲裁回合中获胜的挂起服务请求的信息。在 ISP 断言进入(Enter)信号之前,会一直进行重新仲裁。
16.9.3 Service Request Enter
中断服务提供者向中断控制单元(ICU)发出信号,表示它已接管服务请求的有效信息,并现在开始为执行相关的中断服务例程做准备。进入(Enter)信号可以由中断服务提供者通过确认(中断服务例程已启动,ICU 将清除相关的服务请求节点(SRN))或不通过确认(例如,CPU 在能够启动中断服务例程之前获得了陷阱或异常,ICU 将不会清除相关的 SRN)来重置。
16.9.4 Service Request Acknowledge
当服务提供者开始执行由中断控制单元(ICU)提供的服务请求时,服务提供者向 ICU 发送确认。与确认同时,服务提供者将关于已执行服务请求的信息(SRPN、ECC、SRN 索引编号)发送回 ICU。
在服务提供者发送确认的同一时钟周期,ICU 变为 “没有可用服务请求”:ICU 不再向服务提供者提供仲裁获胜者。ICU 的这种行为确保在服务请求节点(SRN)被重置之前,刚刚被确认的服务请求不会再次被提供(见图 178)。
16.9.5 检测到的 ECC 错误的处理
中断控制单元(ICU)对其从服务提供者接收到的带有确认的信息以及 ICU 自身的服务类型(TOS)编号进行错误检测检查。假设服务请求使能(SRE)位为 “1”(服务请求节点已启用)。服务请求节点(SRN)中的纠错码(ECC)涵盖了服务请求控制寄存器(SRC)的位字段值:SRC.SRPN、SRC.SRN 索引、SRC.SRE 和 SRC.TOS。(见图 178)
每当 ICU 从中断服务提供者接收到确认时,它就会进行错误检测检查。该检查是针对从服务提供者接收到的带有确认的信息(TOS、SRPN、索引和 ECC)、ICUx 自身的 TOS 编号以及假设为 “1” 的 SRE 位(服务请求节点已启用)进行的。SRN 中的 ECC 涵盖了 SRC 位字段值:SRC.SRPN、SRC.SRN 索引、SRC.SRE 和 SRC.TOS。(见图 178)
注意:在当前实现中,纠错码(ECC)仅用于错误检测。检测到的错误会报告给安全管理单元(SMU),但不会进行纠正。
如果中断控制单元 ICUx 检测到一个 ECC 错误:
“ICUx 将显示 ECC 错误的 ECC、SRPN 和索引捕获到错误捕获寄存器(ECRx)中,如果 STAT 位仍然被设置,则设置 ECRx.STAT 位和 ECRx.EOV 位。
“ICU 通过中断路由器错误信号将错误信号发送给 AURIX™ TC3xx 平台安全管理单元(SMU)。SMU 将此信息转发给一个 CPU(如果已启用)。
“ICUx 清除服务请求节点(SRN)中的服务请求(由索引选择)。
“通过 SMU 接收到 “中断路由器中检测到 ECC 错误” 信息的 CPU 可以通过错误状态位(ECRx.STAT = '1')识别 ICU,读出相关的服务请求信息,并通过写入 “1” 来清除 ECRx.STAT 位。CPU 还可以通过错误溢出位(ECRx.EOV = '1')识别此 ICU 是否检测到一个或多个 ECC 错误。
16.10 中断系统的使用
以下部分提供了对中断路由器中断控制单元(ICU)的服务提供者接口的简短描述。
注意:中断路由器中的所有 ICU 子模块具有相同的功能。
16.10.1 CPU to ICU Interface
中断路由器模块为每个 CPU 和 DMA 模块都有一个专用的中断控制单元(ICU)。CPU 的 ICU 接口由一组寄存器组成,CPU 从这些寄存器中获取由 ICU 提供的服务请求的信息(SRPN、SRN 索引、ECC)。当 CPU 确认所提供的服务请求时,这些信息将被发送回 ICU(另见第 16.4.1.8 章)。
CPU 的 ICU 接口包含一个中断控制寄存器(ICR),它保存当前 CPU 优先级编号(CCPN)、全局中断使能 / 禁用位(IE)以及挂起中断优先级编号(PIPN)。关于 CPU 的 ICU 接口以及 CPU 对中断的处理的更多详细信息可以在 CPU 章节中找到。
16.10.2 DMA to ICU Interface
中断路由器模块为每个 DMA 模块都有专用的中断控制单元(ICU)。
DMA 从 ICU 接管服务请求信息,触发相关的 DMA 通道,并立即向 ICU 确认,此时相关的服务请求节点(SRN)被清除。
DMA 到 ICU 的接口由一组寄存器组成,它从 ICU 接管所提供的服务请求的信息(SRPN、SRN 索引、ECC)。DMA 在接下来的时钟周期中通过确认将它们发送回 ICU(另见第 16.4.1.8 章)。DMA 通道优先级方案与服务请求优先级编号(SRPN)优先级方案相同:
“DMA 中最低优先级:通道 0;
“中断路由器中最低优先级:SRPN = 0。
16.10.3 软件发起的中断
任何服务请求节点(SRN)都可以用于软件中断。软件可以通过写入任何 SRN 的服务请求控制寄存器来设置服务请求位(SRR)。因此,软件可以发起服务请求,这些服务请求由与硬件发起的服务请求相同的机制来处理。
在服务请求节点(SRN)中的服务请求位(SRR)被设置后,无法区分软件发起的服务请求和硬件发起的服务请求。因此,软件应该只使用那些未被用于硬件发起的服务请求的服务请求节点(SRN)和中断优先级编号。
该设备为每个 CPU 包含一组通用服务请求 SRN,支持软件发起的中断。每个已实现的三核 CPU 有一组,每组包括 8 个 SRN。这些 SRN 未连接到内部或外部硬件触发信号,只能用作软件中断 / 软件发起的服务请求。这些 SRN 被称为通用服务请求节点(SRC_GPSRxy,x = 组编号,y = 0 - 7)。
此外,任何未被使用的 SRN 都可以用于生成软件中断。
16.10.4 External Interrupts
八个服务请求节点(Int_SCUSRC [7:0])被保留用于处理外部中断。能够生成中断请求的外部 GPIO 端口输入信号(边沿 / 电平触发、门控等)的设置在外部请求单元(ERU)中进行控制。ERU 的功能在系统控制单元(SCU)章节中有详细描述。
16.11 用例示例
本节展示了中断系统的一个用例和通用跟踪系统(OTGS)的一个用例。
16.11.1 用例示例 中断处理程序
本节解释了如何组织 TriCore 中断向量表。当 TriCore 接受中断时,通过基本中断向量表指针 TriCore 寄存器 BIV 和该中断的优先级编号(PIPN)计算进入中断向量表的入口地址。TriCore TC1.6P 和 TC1.6E 架构提供了将每个表项的向量间距配置为 32 字节(见下图 a(图 179))或 8 字节(见下图 b(图 179))的可能性。作为第三种选择,可以通过屏蔽 PIPN 将向量表减少到单个表项(见下图 c(图 179))。
通过使用 32 字节配置,可以将小型中断例程直接实现到向量表中。它们甚至可以跨越多个向量表项(另见 TriCore 架构手册)。如果向量表可以位于 TriCore 程序侧内存中,这种快速中断处理非常有用。8 字节配置减小了向量表的大小。每个向量表项仅包含一条跳转指令或一条调用和返回指令,作为 16 位操作码指令。TriCore 编译器通过关键字或函数支持这种中断向量表的生成。如果 BIV 屏蔽 PIPN,使得任何中断地址计算都得到相同的地址,就可以配置一个最小向量表。例如:
这将配置 BIV 寄存器以使用一个通用的单一项,其中函数 interruptHandler 所在的位置通过使用一个函数指针数组分支到特定的中断例程。如果使用指向该数组的指针,则可以快速切换该数组。
初始化和安装中断的步骤描述:
(第 1 行)定义中断服务例程(ISR)指针数组。最多可能有 255 个中断。
(第 2 行)定义一个指针,该指针指向 isr_pointer_array 的起始位置。
(第 3 行)中断处理程序安装函数 interruptHandlerInstall 的开始。这个函数在数组中安装中断。 必要的信息是中断优先级和中断服务例程入口地址。
(第 4 行)这一行将中断服务例程入口地址存储在数组中。
(第 5 行和第 6 行)这个函数分支到特定的中断例程,并在中断发生后立即被调用。
(第 7 行)在中断服务例程处理完成后,这一行给出返回命令。
以下是初始化和安装中断的 C 代码示例:
中断入口地址存储在一个数据数组中,而不是将值编码到指令中。函数 interruptHandlerInstall 在该数组中组织中断的安装(请参见此中断处理程序在模块中的应用,例如 STM 章节中的用例示例)。这种向量表生成方式有时比 8 字节配置更灵活,并且不需要编译器对中断提供任何特定支持。
注意:在中断能够发生之前,必须全局启用中断系统。中断控制寄存器(ICR)包含全局中断使能位(ICR.IE),该位使能 CPU 服务请求系统。大多数编译器支持以下属性(或类似属性):
__enable ();
用于设置此位。(有关更多详细信息,请参见架构手册)。
16.12 Module Implementation
表 553 展示了在不同的 TC3xx 设备中实现的中断路由器配置。从 ICU0 开始,每对 ICUx(ICU0/ICU1、ICU2/ICU3……)实现共享仲裁。
16.13 Interrupt Router System and Module Registers
图 180 展示了与设备中的中断路由器模块相关的所有寄存器。中断路由器分配两个地址范围:
“2×256 字节的地址范围,涵盖中断路由器系统寄存器、ICU 控制寄存器和 OTGM 寄存器;
“8KB 的地址范围,涵盖服务请求控制寄存器。
16.14 OTGM Registers
当 OCDS(片上调试支持)被禁用时,所有的 OTGM(片上跟踪宏单元)寄存器会被调试复位和每个系统复位清除。当 OCDS 被启用时,它们不会被系统复位影响。
只支持 32 位宽的写访问,并且需要监督模式和 OCDS 被启用。
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/m0_50882387/article/details/142336756
|