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.

[参考译文] TMDSCNCD28379D:在 SCI 回送样例中重新分配 SCI-A 引脚

Guru**** 2502205 points
Other Parts Discussed in Thread: SYSCONFIG, C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1229945/tmdscncd28379d-re-assigning-sci-a-pins-in-sci-echoback-sample

器件型号:TMDSCNCD28379D
主题中讨论的其他器件:SysConfigC2000WARE

我正在尝试让一个串行通信样本(sci_ex3_echoback)在主题板上运行、但我需要对 SCI-A Rx 和 Tx 使用不同的引脚。 样片将 SCIA Rx 和 Tx 分别分配给引脚28和29。 这似乎在 device.h 中完成、其中定义了几个常量(_GPIO_PIN_SCI-和_GPIO_CFG_SCI-)。 处理器文档指出、引脚35和36也可用于 Rx 和 Tx。 我曾尝试修改 device.h 来使用这些引脚、但当我运行程序时、它会命中错误条件并停止。

捕获错误的代码为:

rxStatus = SCI_getRxStatus (SCIA_BASE);
if (((rxStatus 和 SCI_RXSTATUS_ERROR)!= 0)
{
 //
 //如果执行在这里停止,有一些错误
 //分析 SCI_getRxStatus () API 返回值
 //
 ESTOP0;

我将附加我的修订后文件 device.h、以便您可以了解我是如何尝试重新分配引脚的。 此外、我在项目文件中搜索了是否出现 GPIO35。 它出现在几个.h 文件中、这些文件都看起来像 TI 标准文件。

您能告诉我需要做什么、以便此程序使用引脚35和36吗?

e2e.ti.com/.../5008.device.h

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

    尊敬的 Fred:

    我正尝试获取一个串行通信示例(sci_ex3_echoback)以在目标板上运行、但我需要为 SCI-A Rx 和 Tx 使用不同的引脚。 样本将 SCIA Rx 和 Tx 分别分配给引脚28和29。

    首先、我只想指出、该示例中 GPIO28/GPIO29用于 SCI 通信、因为 GPIO 28将与 FTDI 的 USB 转串行适配器耦合。 (请分别参阅以下数据表和 controlCARD 用户指南的代码段)。 如果要更改引脚、请注意应通过 A:SW1将 GPIO 28设置为常规 GPIO、并且您计划使用的引脚需要有自己的 USB 转串行适配器。

    Unknown 说:
    这似乎是在 device.h 文件中完成的,其中定义了几个常量(_GPIO_PIN_SCI--和_GPIO_CFG_SCI--)。 处理器文档指出、引脚35和36也可用于 Rx 和 Tx。 我试图修改 device.h 以使用这些引脚,但当我运行程序时,它会遇到错误条件并停止。

    要更改使用的引脚、只需要更改用于设置引脚的功能。

    如果右键单击这些函数、则可以打开声明:

    例如,打开"GPIO_setPinConfig ()"的声明表明我们只需要在 pin_map.h 文件中提供引脚映射。

    由于需要"GPIO_35_SCIRXDA"、因此对于该函数调用、您需要执行以下操作: GPIO_setPinConfig (GPIO_35_SCIRXDA);

    其他函数将 GPIO 编号作为输入。 TX 端也一样。

        //GPIO_setMasterCore(DEVICE_GPIO_PIN_SCIRXDA, GPIO_CORE_CPU1);
        //GPIO_setPinConfig(DEVICE_GPIO_CFG_SCIRXDA);
        //GPIO_setDirectionMode(DEVICE_GPIO_PIN_SCIRXDA, GPIO_DIR_MODE_IN);
        //GPIO_setPadConfig(DEVICE_GPIO_PIN_SCIRXDA, GPIO_PIN_TYPE_STD);
        //GPIO_setQualificationMode(DEVICE_GPIO_PIN_SCIRXDA, GPIO_QUAL_ASYNC);
    
        GPIO_setMasterCore(35, GPIO_CORE_CPU1);
        GPIO_setPinConfig(GPIO_35_SCIRXDA);
        GPIO_setDirectionMode(35, GPIO_DIR_MODE_IN);
        GPIO_setPadConfig(35, GPIO_PIN_TYPE_STD);
        GPIO_setQualificationMode(35, GPIO_QUAL_ASYNC);

    我建议使用此方法、因为您不必修改任何头文件、只需修改应用代码(.c)文件即可。

    此致、

    马林

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

    您好 Marlyn。 非常感谢您的答复。 这是我通过这个论坛获得的最好的一个。 但我想你可能已经点亮了我的新手地位。 根据您的回答、我想在我继续尝试将 SCI 端口 A 重新分配到不同的引脚之前、我需要退一步、询问一些电路板和 MCU 的基础知识。

    (1)当我将 USB 探针连接到电路板时、为了进行从 Code Composer Studio 下载和调试之类的操作、我实际上是否通过 SCI-A 在引脚28和29上与 MCU 通信? 如果是这样、那么似乎我想保留所有这些内容、否则我将中断用于调试的默认连接。 我想象有其他方法从 CCS 进行调试、但是(再次更新)我不想探索这些选项、除非我必须这么做。

    (2)根据(1)、查找连接到其他 UART (B、C、D)之一的未使用的 GPIO 引脚是否更好? 我没有理由支持 SCI-A。 它恰好是您的采样所使用的端口。

    如果我使用 B、C 或 D 更好、那么我们可以关闭这个情况、我将尝试修改回显示例、以使用其他 SCI 端口之一。 这可能意味着几天后就会出现一系列新的问题、但如果另一个 UART 可以保留我现有的调试功能、我认为这是最好的选择。

    我非常乐意听取您的建议。

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

    尊敬的 Fred:

    (1)当我将 USB 探头连接到电路板时、为了进行从 Code Composer Studio 下载和调试等操作、我实际上是不是通过 SCI-A 在引脚28和29上与 MCU 通信? 如果是这样、那么似乎我想保留所有这些内容、否则我将中断用于调试的默认连接。 我想还有其他方法可以从 CCS 进行调试、但(再次更新)我不想探索这些选项、除非我必须这样做。

    否、这与 SCI 通信分开。 及其将 JTAG 与板载仿真器(XDS100v2)结合使用。 更改 SCI 引脚不会影响您与 CCS 或调试等的连接。

    (2)根据(1),我是否可以查找连接到其他 UART (B、C、D)之一的未使用 GPIO 引脚? 我没有理由支持 SCI-A。 它恰好是您的样本所使用的端口。

    这取决于您的应用。 使用 SCI-A (特别是 GPIO28/GPIO29)的优势在于 controlCARD 已有一个连接至这些引脚的 USB 转串行适配器。 如果您使用另一个 SCI 模块、则需要将外部 USB 转串行适配器连接到您为另一个模块选择的引脚。

    通常、人们首先了解他们需要器件提供哪些功能(例如、3个 ADC、2个 SCI 等)、然后据此确定要使用哪些引脚(这可能是由于放置在器件上-在 PCB 上实现布线目的、 或者、由于 GPIO 与其他功能进行多路复用、因此您可能会限制使用 SCI-B、例如、因为出于其他目的需要其他引脚)。

    我们有一个叫做 SysConfig (系统配置)的工具、可以帮助您确定外引脚。  

    当您打开 SysConfig 时、可以选择您正在使用的特定板、在您的案例中为 F28379D controlCARD:

    一旦您启动工具、您将能够非常轻松地添加外设和更改引脚(也可以查看它们在 controlCARD 上映射到的位置)。 如果存在任何冲突、它会通知您与引脚发生的任何冲突。

    SysConfig 还会为您生成初始化代码(因此、您无需自行修改.h/.c 文件以更改引脚、更改波特率等)


    sci echoback 示例中没有 SysConfig、但您可以按照以下应用报告的"将 C2000 SysConfig 支持添加到现有项目"部分中的步骤进行操作: C2000 SysConfig

    我们还提供了 SysConfig 视频系列、其中介绍了如何入门、引脚多路复用、板级支持等: https://www.ti.com/video/series/C2000-SysConfig.html?keyMatch=SYSCONFIG%20C2000 


    SCI 和 SysConfig 的另一个重要资源是我们的动手实验。 此操作指导您为 controlCARD 创建新项目以及设置 SCI (通过 SysConfig)。 您可以按照此处的说明进行参考: https://dev.ti.com/tirex/explore/node?node=A__Adlf59dR9TRikXjOlRRRsg__c2000Academy__jEBbtmC__LATEST 

    此致、

    马林

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

    大家好、Marlyn。 再次感谢您的帮助。 为了澄清、如果我想继续使用 SCI-A、但使用不同的引脚、我应该查看 SysConfig 工具。 我不明白的一点是您多次提到 USB 转串行适配器、这意味着这是我需要的。 我在本练习的目标是向现有项目中添加一些代码、以便访问一个串行端口、并使用这些代码通过 RS-422收发器与另一个板上的微处理器进行非常简单的通信。 另一个处理器将发送多条单字节命令中的一条;我将通过写入我的项目中的一些可见变量进行响应、或者发送大约50字节的响应消息进行响应。  我认为应该不需要任何 USB 适配器。 我缺少什么吗?

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

    Marlyn 关于 SysConfig 的主题、该添加说明表明、如果工程属性中的"Build"下有 SysConfig、则可以使用 SysConfig 选项。 我在"Build"下有一个 SysConfig、这意味着 SysConfig 已启用。 但同时、我的项目下没有扩展名为.syscfg 的文件。  我需要创建该文件吗? 如果 SysConfig 已启用、我没有看到任何创建它的说明。

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

    尊敬的 Fred:

    为了澄清,如果我想继续使用 SCI-A,但使用不同的引脚,我应该查看 SysConfig 工具。

    您不必使用 SysConfig。 如果我把你弄糊涂了,我就道歉了。 我之前只是把它推荐为一款有用的工具、尤其是当您不熟悉 C2000器件的时候。

    我认为我不需要任何 USB 适配器。 我缺少什么吗?

    谢谢您的背景 Fred。 否、在这种情况下您不需要 USB 适配器。

    此致、

    马林

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

    尊敬的 Fred:

    [报价 userid="559688" url="~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1229945/tmdscncd28379d-re-assigning-sci-a-pins-in-sci-echoback-sample/4656999 #4656999"]、但同时、我的项目下没有扩展名为.syscfg 的文件。  我需要创建该文件吗? 如果已启用 SysConfig、我没有看到任何创建该文件的说明。

    最快的方法是导入已具有 SysConfig 的工程(如下所示)、然后直接将.syscfg 文件复制并粘贴到您的工程中。

    C:\ti\c2000\C2000Ware_version\training\device\f2837xd\communication_peripheral\lab_sci\lab_sci_controlCARD

    此致、

    马林

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

    大家好、Marlyn。 很抱歉回复被延迟。 我希望你没有忘记我! 我预计有一天需要学习 SysConfig 工具、但现在(因为老板很着急)、如果我可以快速地将 SCI-A Rx/Tx 重新分配到不同的 GPIO 引脚、这将解决主要问题。 echoback 样本将 Rx 分配给 GPIO28、将 Tx 分配给 GPIO29。 我想将它们分别重新分配给 GPIO35和36。 我曾尝试通过修改 device.h 文件(见下文)来执行此操作、但程序冻结。 我认为 SCI_getRxStatus 调用中出现了错误、但我需要更深入地挖掘以确保正确。

    我的(简单吗?) 您要问的问题是:为什么此更改会锁定程序。 使用替代 GPIO (35、36)线路还需要做些什么?

    (从文件 device.h:缩进的代码就是我添加的代码。)


    //
    //用于 FTDI 芯片上 USB 转 UART 适配器的 SCI
    //
    #if 已定义(_LAUNCHXL_F28379D)
    #define DEVICE_GPIO_PIN_SCIRXDA 43U // SCI RX 的 GPIO 编号
    #define DEVICE_GPIO_PIN_SCITXDA 42U // SCI TX 的 GPIO 编号
    #define DEVICE_GPIO_CFG_SCIRXDA GPIO_43_SCIRXDA // SCI RX 的"pinConfig"
    #define DEVICE_GPIO_CFG_SCITXDA GPIO_42_SCITXDA // SCI TX 的"pinConfig"

       #Elif 定义(FRED_CHANGE)                                                        //上面定义
       #define DEVICE_GPIO_PIN_SCIRXDA  35u // SCI RX 的 GPIO 编号
       #define DEVICE_GPIO_PIN_SCITXDA  36U // SCI TX 的 GPIO 编号
       #define DEVICE_GPIO_CFG_SCIRXDA  GPIO_35_SCIRXDA // SCI RX 的"pinConfig"
       #define DEVICE_GPIO_CFG_SCITXDA GPIO_36_SCITXDA  // SCI TX 的"pinConfig"

    #else                                                                        //原始代码
    #define DEVICE_GPIO_PIN_SCIRXDA  28U // SCI RX 的 GPIO 编号
    #define DEVICE_GPIO_PIN_SCITXDA  29u // SCI TX 的 GPIO 编号
    #define DEVICE_GPIO_CFG_SCIRXDA  GPIO_28_SCIRXDA // SCI RX 的"pinConfig"
    #define DEVICE_GPIO_CFG_SCITXDA GPIO_29_SCITXDA  // SCI TX 的"pinConfig"
    #endif

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

    尊敬的 Fred:

    我认为 SCI_getRxStatus 调用中出现错误,但我需要深入探究才能确定。

    您可以设置软件断点(通过双击所关注的行-行号所在的位置)。 这样、您就可以检查是否到达了代码的不同部分。

    我想分别将它们重新分配给 GPIO35和36。 我尝试通过修改 device.h 文件(见下文)来执行此操作,但程序冻结。

    您所做的更改不会导致程序冻结。 GPIO35和 GPIO36上有哪些连接?  

    您能完成以下操作吗? (用于调试)-导入另一个 SCI 工程(sci_ex1_loopback)并禁用环回(打开.syscfg 文件并取消选中"SCI"下的环回选项),然后将 GPIO35连接到 GPIO36 *使用跳线),然后查看该示例是否有效。 这应再次确认对 GPIO35和 GPIO36的更改是正确的、并且该问题很可能与连接有关。

    谢谢、此致、

    马林