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.

[参考译文] TMS320F28388D:TMS320F28388D 双核示例"sci_ex1_sysconfig_multi"未工作

Guru**** 2782625 points

Other Parts Discussed in Thread: TMS320F28388D, SYSCONFIG, TMDSCNCD28388D

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1612643/tms320f28388d-tms320f28388d-dual-core-example-sci_ex1_sysconfig_multi-not-working

器件型号: TMS320F28388D
主题中讨论的其他器件: SysConfigTMDSCNCD28388D

您好:
我正在处理 TMS320F28388D 控制器。
在 CCS 中、我导入了双核示例“sci_ex1_sysconfig_multi"</s>“  
我使用 DCAL 板 TMDSCNCD28388D、它在 20Mhz 上运行。
我已在 device.h 文件中添加了宏#define USE_20MHz_XTAL。
“sci_ex1_sysconfig_cpu1.c"和“和“sci_ex1_sysconfig_CPU2.c"两“两个工程都成功构建。
在下面、我将共享 sci_ex1_sysconfig_cpu1.c 和 sci_ex1_sysconfig_CPU2.c 文件以供您参考。
1) sci_ex1_sysconfig_cpu1.c

#include “driverlib.h"</s>“
#include “device.h"</s>“
#include “inc/hw_ipc.h"</s>“
#include “board.h"</s>“

//
//定义
//
//定义自动波特率以使用自动波特率锁定功能
//#定义自动波特率


//
//主要
//
void main (void)

  //
  //配置 PLL、禁用 WD、启用外设时钟。
  //
  设备初始化 ();


  //
  //禁用引脚锁定并启用内部上拉电阻。
  //
  device_initGPIO();

  EALLOW;
  // 1。 使用 DriverLib 手动启用 SCI-A 时钟
  SysCtl_selectCPUForPeripheral (SysCtl_CPUSEL5_SCI、1、SysCtl_CPUSEL_CPU2);
  EDIS;

  //
  //将 SCIA 模块访问权限移交给 CPU2
  //
  //SysCtl_selectCPUForPeripheral (SYSCTL_CPUSEL5_SCI、1、SYSCTL_CPUSEL_CPU2);
  BOARD_INIT ();

  //
  //独立模式和闪存模式的配置
  //
#ifdef _standalone
  //
  //发送引导命令以允许 CPU2 应用程序开始执行
  //
  DEVICE_BOOTCPU2 (BOOT_MODE_CPU2);
#endif //_standalone

  //
  // SCI Rx 引脚的配置。
  //
  GPIO_setPinConfig (DEVICE_GPIO_CFG_SCIRXDA);

  //
  // SCI Tx 引脚的配置。
  //
  GPIO_setPinConfig (DEVICE_GPIO_CFG_SCITXDA);

  //
  //同步 CPU1 和 CPU2。 将 IPC 标志 17 发送到 CPU2。
  //
  IPC_SYNC (IPC_CPU1_L_CPU2_R、SYNC_FLAG);

  //
  //初始化中断控制器和矢量表。
  //
  interrupt_initModule();
  Interrupt_initVectorTable();

}

2) sci_ex1_sysconfig_CPU2.c

#include “driverlib.h"</s>“
#include “device.h"</s>“
#include “inc/hw_ipc.h"</s>“
#include “board.h"</s>“

//
//定义
//
//定义自动波特率以使用自动波特率锁定功能
//#定义自动波特率

//
//全局
//
uint16_t 循环计数器= 0;

//
//主要
//
void main (void)

  uint16_t receivedChar;
  无符号字符*msg;
  uint16_t rxStatus = 0U;
  //uint16_t ipcFlag17 = 17u;

  //
  //配置 PLL、禁用 WD、启用外设时钟。
  //
  设备初始化 ();

  //
  //初始化中断控制器和矢量表。
  //
  interrupt_initModule();
  Interrupt_initVectorTable();

  //
  //等待 CPU01 就绪并设置 IPC 标志 17
  //
  IPC_SYNC (IPC_CPU2_L_CPU1_R、SYNC_FLAG);

  //
  //从 sysconfig 初始化设置
  //
  BOARD_INIT ();

  SCI_enableLoopback (SCIA_BASE);

#ifdef 自动波特率
  //
  //执行自动波特率锁定。
  // SCI 希望用“A"或“或“A"来“来锁定波特率。
  //
  SCI_lockAutobaud (SCIA_BASE);
#endif

  //
  //发送启动消息。
  //
  MSG =“\r\n\n\nHello World!\0“;
  SCI_writeCharArray (SCIA_BASE、(uint16_t*) msg、17);
  MSG =“\r\n 您将输入一个字符、DSP 将回显它!\n\0“;
  Sci_writeCharArray (SCIA_BASE、(uint16_t*) msg、62);

  for(;;)
  {
    MSG =“\r\n 输入字符:\0“;
    SCI_writeCharArray (SCIA_BASE、(uint16_t*) msg、22);

    //
    //从 FIFO 中读取一个字符。
    //
    receivedChar = SCI_readCharBlockingFIFO (SCIA_BASE);

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

    //
    //回显字符。
    //
    MSG =“ 您发送的:\0“;
    SCI_writeCharArray (SCIA_BASE、(uint16_t*) msg、13);
    SCI_writeCharBlockingFIFO (SCIA_BASE、receivedChar);

    //
    //递增循环计数变量。
    //
    循环计数器++;
  }
}

在波特率为 9600 的 PuTTY 上、我无法看到字符串 Hello World!。
另外、当我输入一个字符时、DSP 不会回显它!

你能检查一下,告诉我,我在做什么错?







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

    尊敬的 Tushar:

     我提出了几个问题:

    • 您是否在 COM 端口中没有看到任何内容、或者数据看起来像 gibberish?
    • 您如何(按什么顺序)通过 CCS 为每个内核加载和播放代码? 如果您暂停每个程序、任一 CPU 上的代码是否卡在某个位置?
    • 如果您使用 F2838x controlCARD、请确保将 S1:A 设置为上的位置 2。 这会将 SCI 信号路由到 USB 并进入您的计算机。

    此致、

    Delaney

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

    尊敬的 Delaney:

    我在 COM 端口上看不到任何内容、如下所示。


    在 CCS 中加载代码后、首先 播放 CPU1、然后播放 CPU2。 当我暂停 CPU1 时、它卡在下面随附的 ipc.h 文件中、


    F2838x controlCard、 S1:A 两个切换开关均设置为 ON 位置。

    上述观察结果对 CPU1.c 和 CPU2.c 进行了细微更改、如下所示。

    1) sci_ex1_sysconfig_cpu1.c

    void main (void)

    //
    //配置 PLL、禁用 WD、启用外设时钟。
    //
    设备初始化 ();

    //
    //禁用引脚锁定并启用内部上拉电阻。
    //
    device_initGPIO();

    EALLOW;

    //
    // SCI Rx 引脚的配置。
    //
    GPIO_setPinConfig (DEVICE_GPIO_CFG_SCIRXDA);

    //
    // SCI Tx 引脚的配置。
    //
    GPIO_setPinConfig (DEVICE_GPIO_CFG_SCITXDA);

    //将引脚 28/29 分配给 CPU2
    GPIO_setControllerCore (28、GPIO_CORE_CPU2);
    GPIO_setControllerCore (29、GPIO_CORE_CPU2);

    // 1。 使用 DriverLib 手动启用 SCI-A 时钟
    SysCtl_selectCPUForPeripheral (SysCtl_CPUSEL5_SCI、1、SysCtl_CPUSEL_CPU2);

    EDIS;

    //
    //将 SCIA 模块访问权限移交给 CPU2
    //
    //SysCtl_selectCPUForPeripheral (SYSCTL_CPUSEL5_SCI、1、SYSCTL_CPUSEL_CPU2);
    BOARD_INIT ();

    //
    //独立模式和闪存模式的配置
    //
    #ifdef _standalone
    //
    //发送引导命令以允许 CPU2 应用程序开始执行
    //
    DEVICE_BOOTCPU2 (BOOT_MODE_CPU2);
    #endif //_standalone

    //
    //同步 CPU1 和 CPU2。 将 IPC 标志 17 发送到 CPU2。
    //
    IPC_SYNC (IPC_CPU1_L_CPU2_R、SYNC_FLAG);

    //
    //初始化中断控制器和矢量表。
    //
    interrupt_initModule();
    Interrupt_initVectorTable();

    }

    2) sci_ex1_sysconfig_CPU2.c

    void main (void)

    uint16_t receivedChar;
    无符号字符*msg;
    uint16_t rxStatus = 0U;
    //uint16_t ipcFlag17 = 17u;

    //
    //配置 PLL、禁用 WD、启用外设时钟。
    //
    设备初始化 ();

    //
    //初始化中断控制器和矢量表。
    //
    interrupt_initModule();
    Interrupt_initVectorTable();

    //
    //等待 CPU01 就绪并设置 IPC 标志 17
    //
    IPC_SYNC (IPC_CPU2_L_CPU1_R、SYNC_FLAG);

    //
    //从 sysconfig 初始化设置
    //
    BOARD_INIT ();

    //SCI_enableLoopback (SCIA_BASE);

    //手动强制 50MHz LSPCLK 的波特率为 9600(源自 20MHz XTAL)
    // BRR = 650 (0x28A)
    SCI_setConfig (SCIA_BASE、50000,000,9600、(SCI_CONFIG_WLEN_8 |
    SCI_CONFIG_STOP_ONE |
    SCI_CONFIG_PAR_NONE));

    #ifdef 自动波特率
    //
    //执行自动波特率锁定。
    // SCI 希望用“A"或“或“A"来“来锁定波特率。
    //
    SCI_lockAutobaud (SCIA_BASE);
    #endif

    //
    //发送启动消息。
    //
    MSG =“\r\n\n\nHello World!\0“;
    SCI_writeCharArray (SCIA_BASE、(uint16_t*) msg、17);
    MSG =“\r\n 您将输入一个字符、DSP 将回显它!\n\0“;
    Sci_writeCharArray (SCIA_BASE、(uint16_t*) msg、62);

    for(;;)

    MSG =“\r\n 输入字符:\0“;
    SCI_writeCharArray (SCIA_BASE、(uint16_t*) msg、22);

    //
    //从 FIFO 中读取一个字符。
    //
    receivedChar = SCI_readCharBlockingFIFO (SCIA_BASE);

    rxStatus = SCI_getRxStatus (SCIA_BASE);
    if ((rxStatus & SCI_RXSTATUS_ERROR)!= 0)

    //
    //如果执行停止在这里有一些错误
    //analyze SCI_getRxStatus() API 返回值
    //
    ESTOP0;
    }

    //
    //回显字符。
    //
    MSG =“您发送的:\0“;
    SCI_writeCharArray (SCIA_BASE、(uint16_t*) msg、13);
    SCI_writeCharBlockingFIFO (SCIA_BASE、receivedChar);

    //
    //递增循环计数变量。
    //
    循环计数器++;
    }
    }

    此致、
    Tushar

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

    尊敬的 Tushar:

    我可以看到 、这看起来像是 IPC 握手的问题。 让我向 IPC 专家请教一下。

    此致、

    Delaney

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

    尊敬的 Delaney:

    感谢您的更新。 我们的工作目前正在等待这一修复,因此 IPC 专家可以在他们方便的尽早提供的任何支持将是一个巨大的帮助,我们的时间表.

    请告诉我、他们是否需要当前的链接器命令文件 IPC 初始化代码来加快审查速度。

    此致、
    Tushar

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

    Tushar、

    您可以按照以下步骤来确保正确地从双 CPU 加载和运行代码。 请确认您是否能够按预期执行。

     问题:TMS320F28388D:如何加载和运行 C28x CPU1 和 CM 多核示例项目代码? 

    此致、

    Ozino

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

    尊敬的 Ozino:

    感谢您的回答、并 链接您分享了已解决的问题。

    此致、
    Tushar