今天继续来看看 IR 模块。
名词缩写
缩写 | 全称 | 说明 |
IR | Interrupt Router | |
SR | Service Request | 包括: 1. External Resource 2. Internal Resource 3.SW(Software) |
SP | Service Privoder | 包括: 1. CPU 2. DMA |
SRN | Service Request Node | |
SRC | Service Request Control Register | |
GPSR | General Purpose Service Request | |
SRB | Service Request Broadcast Register | |
ICU | Interrupt Control Units | |
TOS | Types of Service | |
HW | HardWare | |
SW | SoftWare | |
GPSR | General Purpose Service Register | |
GPSRG | General Purpose Service Register Group |
前面一节 TriCore:Interrupt 1 中提到,每一路中断都会连接到一个 SRN, 每一个 SRN 中都有一个 SRC寄存器控制该中断的配置。
在众多中断中,存在几路不会连接到硬件模块的特殊中断 —— GPSR(General Purpose Service Register)用来实现软中断。
GPSR
如上图所示,每个 GPSR Group 内部 包含 8 个 SRN,其分别对应 SRC_GPSRxy,其中:
x 代表 group number,其个数和 CPU 个数相对应;
y 代表 number of interrupt within the group,其范围是 [0,7]
以TC39X为例,x 范围是 [0,5], y 范围是 [0,7], 则一共是 6 * 7 = 42 个 GPSR。
触发 GPSR 有 2 种方式:
1. SRC_GPSRxy.SETR = 1 或者
2. SRBx[y] = 1
其中:
1. 方式 1 和前一节中提到的 写 SRC.SETR 方式一致。
2. 方式 2 专门作用于 GPSR。
二者的差异在于,使用方式 2 可以同时触发 N(1~8)个GPSR中断。
SRB
如上图 Figure175 所示,某个 GPSRGroupx 会连接到与其对应的 SRBx 寄存器,且在 GPSRGroupx 中每一个SRN 对应 SRB 中的 一个 Bit 位。即
由上图可以可以看到如果向 SRBx 寄存器中写入 0xFF 可以同时触发 GPSR Group X 中的 8 路 GPSR 中断。 如果使用写 SRC 的方式,则需要对8 个SRC寄存器进行逐个写入操作。
SRB 寄存器的其他注意事项:
1. A Service Request Broadcast Register is always read as 0
2. Writing ´1´ to SRBx[y] triggers the service request GPXRxy1
3. Writing ´1´ to SRBx[31:6] has no effect.
写在后面
作为一名新晋AutomotiveOS Engineer,闲暇时间写写技术总结,如有不当之处,还请指正。
以后博客内容会同步更新在订阅号 AutomotiveOS,喜欢的可以关注:)
参考资料:
AURIX TC3xx Family User's Manual Part 1 (infineon.com)