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.

[参考译文] CC1354R10:如何禁用 ITM 引脚功能

Guru**** 2826855 points

Other Parts Discussed in Thread: CC1354R10, SYSCONFIG

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

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/1605318/cc1354r10-how-to-disable-itm-pin-functionality

器件型号: CC1354R10
主题: SysConfig 中讨论的其他器件

尊敬的 TI 社区:

我正在处理的申请 CC1354R10 相同 两种引导模式

  • 模式 A :需要 ITM 日志记录

  • 模式 B :不使用 ITM、而是将相同的引脚用于 UART TX

因此、ITM 引脚和 UART TX 引脚在两种模式之间共享。 尽管模式 B 不会调用任何与 ITM 相关的 API、但当为 ITM 和 UART TX 分配相同的引脚时、我仍会遇到 UART 问题。

我的问题是:

  1. 是否有支持的方法 在运行时禁用 ITM 功能 或通过应用程序代码或设备配置?

  2. 或者、是否有建议的方法来创建 单独构建配置 在哪个实例中禁用了 ITM?

其他详细信息:

  • 引脚配置通过完成 其中概述了 SysConfig

  • 无法为 ITM 和 UART 使用不同的引脚、因为我们的所有其他引脚都已被使用。
  • 引导模式 A 和模式 B 完全独立。 器件不会从模式 B 重新启动到模式 A、反之亦然;因此、如果可以通过构建配置来禁用 ITM、这将是完美的做法。
  • 我试图打电话
    GPIO_resetConfig(CONFIG_GPIO_UART_DEVICE_CMD_TX);

    就在应用程序以模式 B 启动之前、目的是确保在该引导模式下禁用 ITM。 但是、这并不能解决问题。

如果您有关于 ITM 在不同引导模式之间处理共享 UART/UART 引脚的正确或建议方法的指导、我们将非常感激。

此致、
Brenton

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

    您好 Brenton、

    首先:如果您不知道:CC1354R10、 CPU_04 上的 ITM 有勘误表: 仅当外部调试探针连接到器件的 JTAG 端口时、仪表跟踪宏单元 (ITM) 和数据观察点和跟踪 (DWT) 才处于活动状态。

    https://www.ti.com/lit/swrz131

    在调试情况之外无法使用 ITM。  

    关于您的问题:是的、引脚在运行时可配置。 使用单独的映像或仅关闭 ITM 驱动器、使用 GPIO 驱动程序重新进行引脚配置、然后打开 UART 驱动程序。 由于这是在运行时发生的、因此您将覆盖 SysConfig 引脚配置。

    如果使用 SysConfig 配置 UART、请复制粘贴生成的代码并将其放入应用程序中、您应该有一个有效的示例。 (复位器件时,引脚配置会复位。)

    谢谢、

    Marie H

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

    尊敬的 Marie:

    感谢您的答复。

    在我的测试中、我执行了以下操作:

    • 已删除调试器。

    • 运行以下代码:

    #include <ti/drivers/ITM.h>
    UART2_Handle uartDebug;
    UART2_Params uartParamsDebug;
    ...............
    //init function below
    ITM_close();
    GPIO_setConfig(CONFIG_GPIO_UART_DEVICE_CMD_TX, GPIO_CFG_OUTPUT | GPIO_CFG_OUT_HIGH  | GPIO_CFG_OUT_STR_MED);
    UART2_Params_init(&uartParamsDebug);
    uartParamsDebug.baudRate = baudRate;
    uartParamsDebug.parityType = UART2_Parity_NONE;
    uartParamsDebug.stopBits = UART2_StopBits_1;
    uartParamsDebug.dataLength = UART2_DataLen_8;
    uartParamsDebug.writeCallback = NULL;
    uartParamsDebug.writeMode = UART2_Mode_BLOCKING;
    uartParamsDebug.readMode = UART2_Mode_BLOCKING;
    uartDebug = UART2_open(UART_DEVICE_CMD, &uartParamsDebug);
    UART2_rxEnable(uartDebug);

    • 即使在这之后、ITM 仍然似乎是通过 UART Tx 引脚发送数据。 在串行终端中、我看到了类似的序列00h ... F8h、它似乎对应于 Wireshark 日志记录所需的 ITM 起始位。

      尽管关闭了 ITM 输出、但似乎其仍处于有效状态。 你有什么建议吗?

      我的配置是否正确、即是否符合您的上述建议?
    • 请注意、如果我从 SysConfig 中删除了 ITM 引脚、则 UART 将按原样正常运行、无需更改代码。

    谢谢

    Brenton

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

    尊敬的 Marie:

    我设法使用以下方法找到解决方案:

    • ti_drivers_config.cti_drivers_config.h在 SysConfig 中禁用和的自动生成。

    • ti_drivers_config.c/.h使用创建所有 ITM 相关代码的本地副本并有条件地禁用#ifndef MODE_B这些代码、仅在不处于模式 B 时启用 ITM

    这允许共享引脚在没有 ITM 干扰的情况下在模式 B 中正常运行。

    以上解决了我的问题、但这不是一个非常干净的解决方案、因为我必须禁用文件的自动生成。 你有没有其他建议让我以更简洁的方式解决上述问题?

    感谢您的支持。

    此致、
    Brenton

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

    您好 Brenton、

    很高兴您能使用它!

    我们预计、大多数用户在进行软件开发时都需要禁用 SysConfig。 我没有看到任何问题。

    谢谢、

    Marie H