英飞凌TC3xx之一起认识GTM系列(二)再来认识GTM接口、路由、时钟和中断

英飞凌TC3xx之一起认识GTM系列(二)再来认识GTM接口、路由、时钟和中断

  • 1 再来认识GTM接口
    • 1.1 GTM的通用总线接口AEI
    • 1.2 GTM的多主机多任务支持
  • 2 ARU路由
    • 2.1 ARU路由概念
    • 2.2 ARU 往返时间
    • 2.3 ARU阻塞机制
  • 3 GTM时钟和时基管理
    • 3.1 GMT 时钟和基于时间的管理架构
    • 3.2 循环事件比较
  • 4 GTM中断
  • 4 GTM 软件调试器支持
  • 5 GTM 编程约定

1 再来认识GTM接口

GTM有四个接口组:

  • 两个接口组提供了GTM端口,用于输入信号组装和输出信号创建,因此,这些接口连接到GTM输入子模块TIM和GTM输出子模块DTM。
  • 一个接口时总线接口,GTM通过该接口可以连接到SoC系统总线上。
  • 还有一个接口时中断控制器接口,GTM 提供了来自各个子模块的多个中断线。 这些中断线集中在 ICM 内部,并且要适配专门的微控制器环境,其中每个中断处理会有所差异。

1.1 GTM的通用总线接口AEI

GTM配备了通用总线接口,可广泛适配不同的SoC总线系统,这种通用总线接口称为 AE 接口 (AEI)。AEI 与 SoC 总线的适配,通常是通过将 AEI 信号转换为芯片供应商的 SoC 总线信号的桥接模块来完成的。

AEI 总线信号如下表所示:
英飞凌TC3xx之一起认识GTM系列(二)再来认识GTM接口、路由、时钟和中断_第1张图片
AEI的状态信号会驱动下列值之一:
英飞凌TC3xx之一起认识GTM系列(二)再来认识GTM接口、路由、时钟和中断_第2张图片

  • 如果 AEI 访问期间没有发生错误,则返回信号值 0b00。
  • 如果总线地址不是 4 的整数倍(字节寻址),则返回信号值 0b01。
  • 如果该地址未在 GTM 中处理,则返回信号值 0b11。
  • 如果写入的寄存器是受保护寄存器(例如受位 RF_PROT保护),或者由于子模块内部状态或相关集群的时钟被禁用而导致寄存器暂时不可写,则返回信号值 0b10。
  • 如果状态 0b10指示非法写入访问,则不会修改寄存器。
  • 读取寄存器永远不会返回状态 0b10。
  • 返回状态为0b10的寄存器地址的详细列表可以在附录中找到。

1.2 GTM的多主机多任务支持

为了支持对 GTM 寄存器的多主控和多任务访问,对需要这种机制的 IP 内部的关键控制位使用了专用的写访问方案。 例如,可以使用共享寄存器,其中可以通过一个寄存器写访问来全局控制多个通道。

  • 此类寄存器位在 GTM 内部以双位机制实现,其中写入 0b00 和 0b11 对寄存器位没有影响,其中 0b01 设置该位,0b10 重置该位。
  • 如果 CPU 想要读取该位的状态,则在该位被重置时,它总是会得到 0b00;如果该位被设置,它总是会得到 0b11。

2 ARU路由

2.1 ARU路由概念

GTM的核心概念之一是数据流的ARU子模块的路由机制
ARU 及其连接的子模块之间传输的每个数据字都是 53 位宽,为了有效地利用 GTM 的资源,理解这个概念非常重要,连接到ARU的每个模块可以提供任意数量的ARU写通道和任意数量的ARU读通道。下面,ARU 写通道被称为数据源ARU 读通道被称为数据目的地

ARU 的概念旨在提供一种灵活且资源高效的方式,来将任何数据源连接到任意数据目的地。为了节省资源成本,ARU没有实现交换矩阵,而是实现了串行连接的数据路由器,提供了相同的互连灵活性。 ARU数据路由原理如图12所示,数据源用绿色矩形标记,数据目标用黄色矩形标记,ARU 中的虚线描述了数据源和数据目的地之间的可配置连接,数据源和数据目的地之间的连接也称为数据流
英飞凌TC3xx之一起认识GTM系列(二)再来认识GTM接口、路由、时钟和中断_第3张图片
数据流的配置是按照以下方式实现的: 每个数据源都有其固定且唯一的源地址:ARU的读ID。

  • 每个数据源的固定地址由图12绿色框中的数字指出,GTM中所有可用数据源的地址定义可以从产品特定附录中获取。
  • 从特定数据源到特定数据目的地的连接,是通过在所需数据目的地中配置数据源的相应地址(即ARU读取ID)来定义的。
  • 每个数据目的地的配置地址由图 12 中黄色框中的数字指出。

通常,目标端处于空闲状态并等待来自源端的数据。

  • 如果源提供新数据,目标将执行破坏性读取、处理数据并再次空闲。
  • 相同的数据永远不会被读取两次。
  • 有一个子模块不支持这种破坏性读取访问,这是在最大吞吐量模式 (MTM) 下配置的 BRC 子模块,该模块的详细描述请参见“广播模块(BRC)”一章。

ARU的功能概括如下

  • ARU以循环顺序依次轮询所连接模块的数据目的地
  • 如果数据目的地从其配置的数据源请求新数据,并且数据源有可用数据,则 ARU 将数据传送到目的地,并通知数据源和目的地数据已传输。
  • 数据源将传送的ARU数据标记为无效,这意味着目的地消耗了该数据。

应该注意的是,每个数据源只能连接到单个数据目的地,因为目的地消耗数据。 如果两个目标引用相同的源,则一个目标将在另一个目标使用该数据之前使用该数据。 由于数据传输是阻塞的,因此第二个目标将阻塞,直到它从源接收到新数据。 如果数据源应连接到多个数据目的地,则必须使用广播子模块 (BRC)。另一方面,从数据源到ARU的传输也是阻塞的,这意味着当目的地消耗了旧数据字时,源通道只能向ARU提供新数据,为了加速数据传输过程,ARU 并行处理两个不同的数据目的地。
下表概述了每种 GTM 实例类型的数据目标和数据源的数量。
英飞凌TC3xx之一起认识GTM系列(二)再来认识GTM接口、路由、时钟和中断_第4张图片

2.2 ARU 往返时间

ARU 使用循环仲裁方案,对所有连接的数据目的地来说,往返时间是固定的。这意味着从数据目标通道产生的两个相邻的读取请求之间的时间,就是往返时间,无论读取请求成功还是失败。

2.3 ARU阻塞机制

ARU 的另一个重要概念是其阻塞机制,该机制是为了将数据从数据源传输到数据目的地而实现的,ARU 连接的子模块使用该机制来将子模块同步到路由的数据流

图 13 解释了阻塞机制。
英飞凌TC3xx之一起认识GTM系列(二)再来认识GTM接口、路由、时钟和中断_第5张图片
如果数据目的地通过ARU向数据源请求数据,但数据源暂时还没有任何数据,那么就必须等待数据源提供新数据。 在这种情况下,拥有数据目的地的子模块可以执行其他任务。 当数据源生成新数据的速度快于数据目标消耗数据的速度时,源会引发错误中断并发出数据无法及时传送的信号。
新数据被标记为对进一步传输有效,并且旧数据被覆盖。 在任何情况下,对于特定设备配置,ARU 的往返时间都有固定的复位值,往返计数器的最终值可以通过 ARU 内部的配置寄存器 ARU_CADDDR_END (目前配置为0x35)进行更改
可以手动重置 ARU 往返计数器 ARU_CADDDR,与 CMU 模块内部配置寄存器的 CMU 时钟使能同步。
例外情况是在最大吞吐量模式下要配置的 BRC 子模块,详细说明请参考广播模块章节。

3 GTM时钟和时基管理

GTM 内部有多个子单元参与整个 GTM 的时钟和时基管理,所涉及的子块进一步称为时钟和时基管理(CTBM)模块。

3.1 GMT 时钟和基于时间的管理架构

英飞凌TC3xx之一起认识GTM系列(二)再来认识GTM接口、路由、时钟和中断_第6张图片

  • CTBM 的一个重要模块是时钟管理单元 (CMU),它生成多达 14 个时钟用于 GTM 的子模块,以及多达 3 个 GTM 外部时钟 CMU_ECLK[z] (z: 0…2)。
    TOM 子模块使用五 (5) 个 CMU_FXCLK[y] (y: 0…4) 时钟来生成 PWM。
    GTM 的其他子模块最多使用九 (9) 个 CMU_CLK[x] (x: 0…8) 个时钟来生成信号。

  • 在时基单元 (TBU) 内部,每个通道使用 CMU_CLK[x] (x: 0…7) 时钟之一来生成 GTM 的公共时基。 除了 CMU_CLK[x] 信号之外,TBU 还可以使用来自 DPLL 子模块的补偿 SUB_INC[i]c (i: 1,2) 信号来生成时基,该时基通常代表发动机管理系统的角度时钟。 SUB_INC[i]c信号结合两条方向信号线DIR[i]可以控制TBU时基向前或向后运行。

  • TBU子模块产生广泛应用的三个时基信号TBU_TS0、TBU_TS1和TBU_TS2
    在 GTM 内部用作信号表征和生成的公共时基。除了可以代表发动机管理系统的相对角度时钟的时基 1 和 2 之外,有助于 CPU/MCS 内角算法计算的绝对角度时钟。 这个绝对角度时钟由 TBU 基 3 表示。

3.2 循环事件比较

通过时基模块(TBU),GTM 提供了 3 个计数器,其中计数器 TBU_CH0 代表时间,计数器 TBU_CH1 和 TBU_CH2 可以代表时间(如果时钟源是 CMU 内部生成的 CMU_CLK)或角度(如果时钟源是 通过 CMU 提供的 DPLL sub_inc 信号)。
从应用的角度来看,有必要将表示时间或角度的循环事件计数器分为过去和未来两部分,过去/未来的边界是根据当前时间或角度值移动的边界,循环事件计数和过去/未来的移动边界如下图所示。

英飞凌TC3xx之一起认识GTM系列(二)再来认识GTM接口、路由、时钟和中断_第7张图片
在 GTM 的不同子模块内,针对 TBU 基值(表示时间或角度)的大于等于比较(在向上计数的情况下)或小于等于比较(在向下计数的情况下)始终意味着检查是否 参考值与未来或过去的当前TBU值相关。

4 GTM中断

GTM 的子模块可以代表内部事件生成数千个中断,如此大量的中断在中断集中器模块 (ICM) 内部组合成中断组。在这些中断组中,GTM 子模块中断信号被捆绑到较小的中断集。从这些中断集中,会创建少量中断信号,并在 GTM 外部以信号 GTM_< MOD >IRQ 的形式发出信号,其中 < MOD > 标识相应 GTM 子模块的名称。
此外,每个输出信号GTM
< MOD >IRQ都有一个对应的输入信号GTM< MOD >_IRQ_CLR,可用于清除中断。

这些输入信号可由周围的微控制器系统用作:

  • 来自 DMA 控制器的确认信号
  • 来自 ADC 的验证信号
  • 来自 GTM 外部中断控制器的清除信号,用于在进入 ISR 例程时执行原子清除

各个中断的控制在子模块内部完成。 如果一个子模块由多个最有可能相互独立工作的子模块通道(如 TIM、PSM、MCS、TOM 和 ATOM)组成,则每个子模块通道都有自己的中断控制和状态寄存器组 ,下面命名为中断集。 其他子模块(SPE、ARU、DPLL、BRC、CMP 和全局 GTM 功能)具有为整个子模块设置的公共中断。

中断设置由四个寄存器组成:IRQ_EN 寄存器、IRQ_NOTIFY 寄存器、IRQ_FORCINT 寄存器和 IRQ_MODE 寄存器。
寄存器 IRQ_EN、IRQ_NOTIFY 和 IRQ_FORCINT 指示状态并允许控制中断集中的每个单独中断源,而寄存器 IRQ_MODE 配置应用于属于同一中断集的所有中断的中断模式。

为了支持具有不同中断信号输出特性,以及内部中断处理的各种微控制器架构和中断系统,可以配置以下四种模式:

  • 电平模式,
  • 脉冲模式,
  • 脉冲通知模式,
  • 单脉冲模式。

以下小节将更详细地描述这些中断模式。

  • 寄存器 IRQ_EN 允许启用和禁用中断集中的单个中断。与配置的模式无关,只有启用的中断才能在其信号 GTM_< MOD >_IRQ 上发出中断信号。

  • 寄存器IRQ_NOTIFY收集中断事件的发生。 在此寄存器中设置位的行为取决于配置的模式,因此稍后将在模式描述中进行描述。与配置模式无关,对寄存器 IRQ_NOTIFY 中某个位的任何值为“1”的写访问都会清除相应的 IRQ_NOTIFY 位。

  • 此外,通过对寄存器 IRQ_EN 进行写访问来启用已禁用的中断源也会清除 IRQ_NOTIFY 寄存器中的相应位,但前提是错误中断源 EIRQ_EN 已禁用。 然而,如果禁用中断的启用与传入中断事件同时启用,则该中断事件是显性且寄存器 IRQ_NOTIFY 未清除。

  • 此外,每次对寄存器 IRQ_MODE 进行写访问都会清除 IRQ_NOTIFY 寄存器中的所有位。 应该注意的是,IRQ_NOTIFY 的清除是独立于写入的数据而应用的(例如,无模式更改)。

  • 因此,重新配置中断集的中断模式的一种安全方法是,通过寄存器 IRQ_EN 禁用该中断集的所有中断通过写入寄存器 IRQ_MODE 定义新的中断模式,然后通过寄存器 IRQ_EN 启用所需的中断

  • 因此,重新配置错误中断集的中断模式的一种安全方法是,通过寄存器 EIRQ_EN 禁用错误中断集的所有错误中断,通过写入寄存器 IRQ_MODE 定义新的中断模式,然后使用 寄存器EIRQ_EN。

  • 软件使用寄存器 IRQ_FORCINT 通过值为“1”的写访问来触发各个中断。 由于对 IRQ_FORCINT 的写访问仅生成单个脉冲,因此 IRQ_FORCINT 并未实现为真正的寄存器,因此对 IRQ_FORCINT 的任何读访问始终会产生值“0”。

  • 复位后,使用 IRQ_FORCINT 触发中断的机制将被全局禁用。 必须通过清除寄存器 GTM_CTRL 中的 RF_PROT 位来显式启用它(请参阅第 26.4.9.3 章)

  • 对于 AEI-bridge、BRC、FIFO、TIM、MCS、DPLL、SPE 和 CMP 模块,如果通过寄存器 EIRQ_EN 中相应的错误中断使能位启用,每个中断都可以配置为引发错误中断,而不是正常中断。 一个源并行使能正常中断和错误中断。
    由于两个中断清除信号都可以重置通知位,这预计会导致系统出现问题,因此强烈建议不要在同一时间点启用两种中断类型。

  • 与启用中断类似,仅当中断源 IRQ_EN 被禁用时,通过对寄存器 EIRQ_EN 进行写访问来启用已禁用的错误中断源也会清除 IRQ_NOTIFY 寄存器中的相应位。 然而,如果禁用的错误中断的启用与传入中断事件同时发生,则中断事件占主导地位,并且寄存器 IRQ_NOTIFY 不会被清除。

  • 为了能够检测错误中断的模块源,ICM 提供了寄存器 ICM_IRQG_MEI
    通过评估 ICM 寄存器 ICM_IRQG_CEI0 可以确定模块 FIFO 的错误中断导致通道。
    通过评估 ICM 寄存器 ICM_IRQG_CEI1…2 可以确定模块 TIM 的错误中断导致通道。
    通过评估 ICM 寄存器 ICM_IRQG_MCS[i]_CEI,可以为具有所有可能通道的模块 MCS 确定导致错误中断的通道。 如果仅使用每个 MCS 的前 8 个通道,则可以通过评估 ICM 寄存器 ICM_IRQG_CEI3…4 来确定导致错误中断的通道。

4 GTM 软件调试器支持

GTM 具有多种功能支持软件调试器。例如。 软件调试器的读取访问不得更改状态寄存器位,为了避免这种通过软件重置状态寄存器位的行为,CPU 必须向寄存器位显式写入“1”以重置其内容。

5 GTM 编程约定

GTM 是一个高度可配置的模块,具有多种配置模式,原则上,GTM 的子模块旨在在系统启动时进行配置,以实现微控制器运行的应用程序域的某些功能。例如,TIM 输入通道可用于监控特定于应用的外部信号,并且该信号必须经过过滤。

一般来说,程序员在运行时重新编程 GTM 子模块的配置寄存器时必须小心,建议在重新配置之前禁用通道,以避免 GTM 出现意外行为。

你可能感兴趣的:(手把手教你学英飞凌AURIX™,TC3xx系列芯片各模块配置,mcu,嵌入式硬件,c语言,英飞凌,TC3xx,AURIX,GTM)