This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TMDSCNCD263:CMPSS EPWM_XBAR、用于连接到特定的 EPw&如何配置 INT_XBAR 以触发 SW 中断

Guru**** 2376610 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1529438/tmdscncd263-cmpss-epwm_xbar-to-connect-to-specific-epwms-how-to-configure-an-int_xbar-to-trigger-a-sw-interrupt

器件型号:TMDSCNCD263

工具/软件:

您好! 几个问题、

我正在运行 AM263x MCU+ SDK 10.01.00 示例`CMPSS 异步跳闸`。

dev.ti.com/.../EXAMPLES_DRIVERS_CMPSS_ASYNCHRONOUS_TRIP.html

1.

运行正常、但我不了解 EPWM_XBAR_3(示例中的默认值)如何连接到 EPWM0。 我假设它与 ePWM 跳闸区 DCBEVT1 有关系、但我不确定。 我可以将其从 EPWM_XBAR_3 更改为 EPWM_XBAR_8、并仍将运行相同的代码。 我可能想让某些 CMPSS 跳闸某些 ePWM。

2.

我想配置 一个 INT XBAR、它将从 CMPSS 跳闸到软件 ISR。  按照不同的示例、我将扩充 `CMPSS 异步跳闸`示例.c 代码、以包括以下内容:

```μ s

#include
#include
#include
#include
#include
#include
#include “ti_drivers_config.h"</s>“
#include “ti_drivers_open_close.h"</s>“
#include “ti_board_open_close.h"</s>“

void epwm0_tzint_isr (void * args)

DebugP_LOG(“EPWM0_TZINT ISR 已触发! 正在停止 CPU.\r\n“);
while (1)
{/*在此处暂停以进行调试*/
}
}

void cmpss_synchronize_trip (void * args)

/*设置 COMP1H
设置 ePWM0 以将 CTRIPH 作为其直流跳闸输入的 TRIP4
将 XBAROUT0 配置为输出 CTRIPOUT1H(通过 OUTPUTXBAR0 路由)和
EPWM0B 到输出 CTRIPH(通过 ePWM TRIP4 和 ePWM0 进行路由)*/
drivers_open();
BOARD_DRIVERSOpen ();

DebugP_LOG(“CMPSS 异步跳闸测试已启动...\r\n“);

HwiP_Params hwiParams;
HwiP_Params_init (&hwiParams);
hwiParams.intNum = CSLR_R5FSS0_CORE0_CONTROLSS_INTRXBAR0_OUT_0;
hwiParams.callback = epwm0_tzint_isr;
hwiParams.priority = 0;//最高优先级
int32_t hwiStatus = HwiP_construct (NULL、&hwiParams);
if (hwiStatus != SystemP_SUCCESS)

DebugP_log(“注册 EPWM0_TZINT ISR 失败!\r\n“);
返回;
}

EPWM_disableTripZoneAdvAction (CONFIG_EPWM0_BASE_ADDR);
/*清除行程标志*/
EPWM_clearTripZoneFlag (CONFIG_EPWM0_BASE_ADDR、EPWM_TZ_INTERRUPT | EPWM_TZ_FLAG_OST);
INT 环路计数= 15;
/*无限循环*/
while (loopCount > 0)

/*当 Ctrip 信号被置位时设置跳闸标志*/
if (((EPWM_getTripZoneFlagStatus (CONFIG_EPWM0_BASE_ADDR)&
EPWM_TZ_FLAG_OST)!= 0U)

循环计数--;
DebugP_LOG(“CTRIP 信号生效\r\n“);

/*等待比较器 Ctrip 置为无效*/
while ((CMPSS_getStatus (CONFIG_CMPSS0_BASE_ADDR)& CMPSS_STS_HI_FILTOUT)!= 0U);

/*清除行程标记*/
ePWM_clearTripZoneFlag (CONFIG_EPWM0_BASE_ADDR、ePWM_TZ_INTERRUPT |
EPWM_TZ_FLAG_OST);
}
}
DebugP_LOG(“CMPSS 异步跳闸测试通过!!!“);
DebugP_LOG (“所有测试均已通过!!!“);
}

```μ s

将这个 INT_XBAR 添加到 syscfg 时(只有部分更改了示例)。

我看不到 ISR 触发。 为什么这不起作用?

如何知道 CSLR_R5FSS0_CORE0_CONTROLSS_INTRXBAR0_OUT_0 已固定到 INT_XBAR0? 如果我将其移至 INT_XBAR1、应该配置 ISR 的中断源是什么? 从下图中您可以看到很多用于 INTXBAR0 的文件、但没有其他文件。

谢谢!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好 Justin

    运行正常、但我不理解 EPWM_XBAR_3(示例中的默认值)如何连接到 EPWM0。 我假设它与 ePWM 跳闸区 DCBEVT1 有关系、但我不确定。 我可以将其从 EPWM_XBAR_3 更改为 EPWM_XBAR_8、并仍将运行相同的代码。 我可能希望某些 CMPSS 使某些 ePWM 跳闸。

    任何 EPWM XBAR 实例都可以路由到任何 TRIPIN、任何 TRIPIN 都可以触发 DCBEVT1。 关键是 EPWM0 配置、不是  您 使用的 XBAR 实例。

    将这个 INT_XBAR 添加到 syscfg 时(仅更改了示例中的器件)。

    您是否可以尝试将 XBAR 输出更改为 CMPSSA1_CTRIPH(相同的信号发送到 EPWM XBar 以进行跳闸)

    我如何知道 CSLR_R5FSS0_CORE0_CONTROLSS_INTRXBAR0_OUT_0 被固定到 INT_XBAR0? 如果我将其移至 INT_XBAR1、应该配置 ISR 的中断源是什么? 从下面的图片中,你可以看到很多的 INTXBAR0 ,但没有其他。

     INT XBAR 实例和中断编号之间的映射为:

    #define CSLR_R5FSS0_CORE0_CONTROLSS_INTRXBAR0_OUT_0 146
    #define CSLR_R5FSS0_CORE0_CONTROLSS_INTRXBAR0_OUT_1 147
    #define CSLR_R5FSS0_CORE0_CONTROLSS_INTRXBAR0_OUT_2 148
    因此:
    • INT_XBAR_0 → CSLR_R5FSS0_CORE0_CONTROLSS_INTRXBAR0_OUT_0 (146)
    • INT_XBAR_1 → CSLR_R5FSS0_CORE0_CONTROLSS_INTRXBAR0_OUT_1 (147)
    • INT_XBAR_2 → CSLR_R5FSS0_CORE0_CONTROLSS_INTRXBAR0_OUT_2 (148)

    *_INTRXBAR0_*  这里定义的一部分是因为它们都是同一中断 XBar 模块(即 CONTROLSS_INTRXBAR0)的 32 个输出通道、所以还有其他 INTRXBAR 模块、例如 GPIO_INTRXBAR

    此致、
    阿克什特

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Akshit、

    感谢您的快速回复!

    1)

    阿克什·帕雷克说:
    任何 EPWM XBAR 实例都可以路由到任何 TRIPIN、任何 TRIPIN 都可以触发 DCBEVT1。 关键是 EPWM0 配置、不是您使用的 XBAR 实例。

    在 EPWM0 配置中、我可以将其配置为仅跳闸 CMPSSA1、而不是 CMPSSA1 和 CMPSSA2? 我在 syscfg GUI 中看不到任何跳闸区配置选项。

    2)

    阿克什·帕雷克说:
    您是否可以尝试将 XBAR 输出更改为 CMPSSA1_CTRIPH(相同的信号发送到 EPWM XBar 以进行跳闸)

    syscfg GUI 中的 INT XBAR、XBAR Output 下拉菜单没有 CMPSS 选项
    因此、我假定 EPWM0_TZINT 将是默认值、EPWM0_TZINT 的用途是什么?

    3)

    另外、为什么它被称为 XBAR 输出、这个字段似乎是 XBar 的触发机制 — XBAR 输入是否更有意义? 我相信有一个原因,我现在不能完全理解。

    谢谢!

    Justin

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好 Justin

    抱歉、要基于 CMPSS 生成中断、您需要通过 ECAP 进行路由。

    尽管该示例是使用较旧版本的 SDK (9.2.0.56) 构建的、并使用大量 bitfield 编程来代替 driverlib、但您可以参考以下示例。

    此处的主要目标是将 CMPSS 跳闸信号路由到 ECAP、启用 ECAP 中断、然后使用 INT_XBAR 将该 ECAP 中断信号路由到 VIM。

    e2e.ti.com/.../4263.empty_5F00_am263x_2D00_cc_5F00_r5fss0_2D00_0_5F00_nortos_5F00_ti_2D00_arm_2D00_clang.zip

    另外、为什么它被称为 XBAR 输出、此时该字段似乎是 XBar 的触发机制 — XBAR 输入是否更有意义? 我相信有一个原因,我现在不能完全理解。

    不幸的是,我不知道这种情况的确切原因,但我认为它是 Xbar 需要输出的。

    希望这对您有所帮助!

    此致、
    阿克什特