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.

[参考译文] TMS320F28P659DK-Q1:如何使用 XBar 将 SCIB 路由到其他 GPIO?

Guru**** 2459090 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1507474/tms320f28p659dk-q1-how-to-use-xbar-to-route-the-scib-to-other-gpios

器件型号:TMS320F28P659DK-Q1

工具/软件:

由于某些测试要求、我需要将  SCIB 路由到不具有本机 SCI 功能的 GPIO。

因此、我决定使用 XBAR 实现它。  

我想将 Tx (GPIO70)和 Rx (GPIO71)路由到 GPIO29和 GPIO30、并使用以下代码进行配置:

        // ---------------------------SCIB Tx------------------------------
        GPIO_setPinConfig(GPIO_70_SCIB_TX);
        GPIO_setPadConfig(70, GPIO_PIN_TYPE_STD | GPIO_PIN_TYPE_PULLUP);
        GPIO_setQualificationMode(70, GPIO_QUAL_ASYNC);

        XBAR_setInputPin(INPUTXBAR_BASE, XBAR_INPUT1, 70);
        XBAR_lockInput(INPUTXBAR_BASE, XBAR_INPUT1);


        // ---------------------------SCIB New Tx-----------------------------
        GPIO_setPinConfig(GPIO_29_OUTPUTXBAR6);

        XBAR_setOutputMuxConfig(OUTPUTXBAR_BASE, XBAR_OUTPUT6, XBAR_OUT_MUX01_INPUTXBAR1);
        XBAR_enableOutputMux(OUTPUTXBAR_BASE, XBAR_OUTPUT6,XBAR_MUX01);
        XBAR_setOutputLatchMode(OUTPUTXBAR_BASE, XBAR_OUTPUT6, false);
        XBAR_invertOutputSignal(OUTPUTXBAR_BASE, XBAR_OUTPUT6, false);


        // ---------------------------SCIB Rx------------------------------
        GPIO_setPinConfig(GPIO_71_SCIB_RX);
        GPIO_setPadConfig(71, GPIO_PIN_TYPE_STD | GPIO_PIN_TYPE_PULLUP);
        GPIO_setQualificationMode(71, GPIO_QUAL_ASYNC);

        XBAR_setInputPin(INPUTXBAR_BASE, XBAR_INPUT2, 71);
        XBAR_lockInput(INPUTXBAR_BASE, XBAR_INPUT2);


        // ---------------------------SCIB New Rx-----------------------------
        GPIO_setPinConfig(GPIO_30_OUTPUTXBAR7);

        XBAR_setOutputMuxConfig(OUTPUTXBAR_BASE, XBAR_OUTPUT7, XBAR_OUT_MUX03_INPUTXBAR2);
        XBAR_enableOutputMux(OUTPUTXBAR_BASE, XBAR_OUTPUT7,XBAR_MUX03);
        XBAR_setOutputLatchMode(OUTPUTXBAR_BASE, XBAR_OUTPUT7, false);
        XBAR_invertOutputSignal(OUTPUTXBAR_BASE, XBAR_OUTPUT7, false);

当我将 GPIO70或 GPIO29连接到 GPIO71时、RxBuff能够成功接收数据。
但是、当我将 GPIO70或 GPIO29连接到 GPIO30时、RxBuff不会接收到任何数据。

我使用示波器测量信号:

  • 当 GPIO70或 GPIO29保持悬空(未连接到任何设备)时、我可以正确观察 TX 信号。

  • 当 GPIO70或 GPIO29连接到 GPIO30时、无法检测到信号。

任何人都可以帮助我了解这种情况的原因、或者是否需要 GPIO30进行其他设置?

非常感谢!

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

    您好 Allen、

    如果我的理解正确、您会使用输入 XBAR 和输出 XBAR 组合将 GPIO71 (SCIB_RX)连接到 GPIO30。

    这样做时、GPIO71仍将是 SCIB_RX 输入的唯一路径。 XBAR 只是显示了在 GPIO71上发生的情况并将其复制到 GPIO30。 下面是一个编码类比、可帮助您了解正在发生的情况:

    INT x = 3;

    int y = x;

    Y = 4;

    在本例中、将 y 修改为4后、x 仍然是3。

    您可以将 x 视为 GPIO71、将 y 视为 GPIO30。 将信号连接到 GPIO30将对 GPIO71无效。

    XBAR 方法适用于 GPIO29、因为您将 TX 信号 从 GPIO70复制 到 GPIO29、然后将其路由到 RX 输入(GPIO71)、因此 RX 输入仍然在接收 TX 信号。

    谢谢您、

    Luke

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

    您好 Luke、

    感谢您的澄清—您的解释是有意义的。

    我想确认一下、根据您所说的内容、这是否意味着 XBAR 具有固定方向性?

    例如、输出侧可以"看到"来自输入侧的信号、但输入侧无法接收或检测来自输出侧的信号、这是否正确?

    如果是、这是否意味着无法将 SCIB (TX 和 RX)完全重新映射到本身不支持 SCI 功能的 GPIO?

    或者是否有任何其他方法可以实现类似的功能?

    感谢您的支持!

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

    是的、XBAR 是单向的。 例如、GPIO 输入可以驱动输入 XBAR 实例的输出、但不能驱动反向、而输出 XBAR 实例选择的内部信号可以驱动一个 GPIO 引脚(如果 outputxbar 由该引脚的 GPIO 多路复用器选择)、但不能驱动反向。

    这样、您无法单独使用 XBAR 完全重新映射 SCI 函数、但可以使用 CLB 输出覆盖函数将任何 GPIO 映射到 SCI RX 输入。 特定的 CLB 输出可以覆盖 SCI RX 输入。

    谢谢您、

    Luke