IR(Interrupt Router)

文章目录

  • 1. 功能特性
  • 2. 系统框图
  • 3. 重要寄存器
    • 3.1. SRCi
    • 3.2. LWSRx(x = 0~7)
    • 3.3. LASR
    • 3.4.ECR(错误捕获寄存器)
    • 3.5. 其他
  • 4.主要功能
    • 4.1. SRN
    • 4.2. ICU作用
    • 4.3. GPSR与广播服务请求
    • 4.4. Arbitration Process (仲裁过程)
    • 4.5. 中断的使用
    • 4.6. Eg
  • 5.疑问
    • 5.1. ICU、SRN如何理解?ICU有多少个?
    • 5.2. 中断优先级越小越高还是?
    • 5.3. 为什么SWS标志要单独通过SWSCLR清除?为了解决什么问题?
    • 5.4. ECC位域的功能,如何产生?具体对象什么?
    • 5.5. 相同中断优先级谁先执行?自然优先级?
    • 5.6. 一共不是1024个服务请求源吗?为什么只画了512个?

Ifx IR模块介绍。

1. 功能特性

  • 最多支持1024个服务请求
  • 每个ICU最高支持255级中断优先级
  • A dedicated ICU for each implemented CPU / DMA module (Service Provider)
  • 支持8个ICU
  • 低延迟仲裁-从收到服务请求,到CPU/DMA需要3~4个时钟
  • 每个外设中断与一个专用的服务请求节点(SRN)
  • 每个SRN具有可编程的8位优先级(可配置0~255不同优先级)
  • 每个SRN可以映射到一个已实现的ICU
  • 每个CPU 8个通用服务请求(GPSR),可以用作软件中断(不分配给外设或外部中断)
  • 服务请求广播寄存器(SRB)用于同时向多个服务提供商发送通用服务请求(软件中断)信号
  • 服务请求的优先级依赖屏蔽(对于cpu, cpu中包含的相关控制寄存器)
  • 带有过滤模式和触发模式的外部中断(例如下降沿,上升沿,高电平或低电平)。模式可以在运行期间配置
  • CPU唤醒支持(当CPU处于IDLE状态时,向CPU发出业务请求信号给SCU唤醒CPU)

PS:

  • 上面的“服务提供者”指CPU/DMA处理器
  • 上面的“服务请求”可以简单理解为中断请求,只是中断请求是CPU处理,Ifx的可以由DMA处理

2. 系统框图

每个SRN包含一个服务请求控制寄存器,用于控制优先级、目标服务提供者
每个ICU处理来自SRN的服务请求,负责仲裁出优先级最高的服务请求,给到对应的CPU/DMA

3. 重要寄存器

IR模块没有一般外设的CLC\KRSTx\OCS三个寄存器。

3.1. SRCi


IR(Interrupt Router)_第1张图片
PS:SETR、CLRR同时设置SRR不会有任何反应,这里CLRR不能清除SWS标志,是通过SWSCLR单独清除SWS标志

3.2. LWSRx(x = 0~7)

最新获奖服务请求注册表x,与ICUx相关
该寄存器提供上一轮仲裁的获胜者的信息到中断服务者。
IR(Interrupt Router)_第2张图片IR(Interrupt Router)_第3张图片

3.3. LASR

最后一次确认的服务请求寄存器表示有关最后一次服务请求的信息被中断服务提供程序确认。寄存器位字段显示了中断服务提供程序发送的内容以及最新的确认。
具体位域介绍,参考LWSR

3.4.ECR(错误捕获寄存器)

IR(Interrupt Router)_第4张图片
IR(Interrupt Router)_第5张图片
备注:软件清除EOV的同时,STAT也必须一起清除。如果在清除EOV\STAT的同时检测到新的错误,那么在清除STAT的同时,硬件会重新设置EOV(这里虽然是同时清除EOV与STAT,但是实际还是有先后顺序的,这里考虑的极端情况)

3.5. 其他

IR(Interrupt Router)_第6张图片

4.主要功能

4.1. SRN

①节点如何配置
默认情况下,所以服务请求节点均处于禁用状态,若要使用对应服务节点,需要配置对应的SRCi寄存器的对应位域,首先需要配置SRE(是否开启中断)、TOS(服务提供者)、SRPN(服务请求优先级)。
一旦SRN启用后,如果想修改TOS、SRPN位域,需要按照以下顺序进行修改

  • 禁用SRN(SRE = 0)
  • 回读SRE是否真的被禁用
  • 检查LWSRx寄存器
    • 如果LWSRx.STAT = 0B或者SRPN、ECC不等于旧的SRC值,执行变更
    • 如果LWSRx.STAT = 1B或者SRPN、ECC等于旧的SRC值,则重新检查LWSRx寄存器
  • Change the SRC.TOS and/or SRC.SRPN bit field(又是与又是或?)
  • 启用SRN(SRE = 1)

②作用
接收外设、外部、软件给的中断信号,配置其服务提供者、中断优先级等参数。

4.2. ICU作用

  • 仲裁映射到ICU的SRN请求(根据优先级)
  • 向服务提供商(CPU/DMA)提供仲裁回合的获胜者
  • 从服务提供商处接收服务请求被接受的信息
  • 检查已接受的服务请求信息(ECC检查)
  • 向安全管理单元(SMU)发送完整性错误信号
  • 管理相关SRN中已确认的服务请求的清除

4.3. GPSR与广播服务请求

GPSR:General Purpose Service Requests,每个IR模块有8个GPSR(软件中断)
系统框图

4.4. Arbitration Process (仲裁过程)

整个仲裁过程由下图所示,中断请求信号给到SRN节点后,由中断中线对同一ISP上挂起的SRN节点进行仲裁,并将仲裁胜利的SRN节点信息给到LWSR寄存器,ISP执行完毕后,自动根据LWSR信息处理相关中断,处理结束后,将SRN节点信息给到LASR寄存器,并做ECC校验,若有错误,则上报SMU。
另外ISP在确定中断后(刚进入中断),会硬件自动清除SRCi.SRR(挂起状态位)

圈①:外设发起中断请求
圈②:在外设发起中断后,处理挂起状态(SRCi.SRR = 1),一直到ISP模块确认中断信息后,才清0
圈③:中断总线发起仲裁,需要花费3~4个SPB时钟周期
圈④:仲裁完成后,给出valid信号,一直等到ISP给出确认信号,开始执行中断服务,才清除
圈⑤:ISP像ICU发出信号,表示接收了服务请求的有效信号,并开始为执行相关的中断服务例程做准备。
圈⑥:确认中断信息,对SRN节点给出Ack,清除SRC寄存器的ECC和SRR位域开始执行中断程序

4.5. 中断的使用

Ifx的ISP有CPU与DMA构成,当使用CPU为服务提供者时,中断优先级为1~255,(1最低,0无效),而DMA时,中断优先级与DMA通道号一一对应(0 < SRPS < DmaChannelMax)
除了常见的外设中断以外,还支持软件、外部(GPIO边沿/电平触发)中断。

4.6. Eg

这里以QSPI发送中断为例,一个QSPI模块有TX\RX\ERR\PT\U五种不同的中断,没一个中断对应有一个不同的SRN节点,QSPI使用DMA搬运数据时,把中断服务的提供者设置为DMA时,只要触发一次中断,就触发一次DMA搬移(具体搬运宽度和搬运次数QSPI发起传输时进行配置,此处是使用DMA的硬件单次触发功能(CHCFGR.RROAT = 0))

5.疑问

5.1. ICU、SRN如何理解?ICU有多少个?

ICU:Interrupt Control Units中断控制单元
SRN:Service Request Node服务请求节点
上述两个模块一起组合起来构成Interrupt Router(IR)模块,其中ICU的数据与CPU、DMA处理器个数相关,例如TC3xx一共有6个core一共DMA,所以一共7个ICU

5.2. 中断优先级越小越高还是?

数字越小优先级别越低,这个直接跟Cortex 系列内和做法相反。其中第0号的中断相关无效。

5.3. 为什么SWS标志要单独通过SWSCLR清除?为了解决什么问题?

TBD

5.4. ECC位域的功能,如何产生?具体对象什么?

ECC位域功能
就是做普通的ECC校验,有中断请求或者初始化SRC寄存器时,会自动计算ECC码,中断服务者开始响应中断时,会再次校验SRC寄存器(数据一致性校验,避免出错)
以下几种情况会更新ECC码
读改写SRC[31:0]
写SRC[15:0](按半字写入)包括SRPN\TOS\SRE和SRN Index(Index没在SRC寄存器)
写SRC[15:8]或者SRC[7:0](按byte写入)
校验对象
SRC寄存器的其他几个位域。
注意中断模块只是检查ECC,并不会做纠正,出现错误后,直接上报SMU。

5.5. 相同中断优先级谁先执行?自然优先级?

TBD

5.6. 一共不是1024个服务请求源吗?为什么只画了512个?

TBD

你可能感兴趣的:(MCU,单片机,嵌入式硬件)