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.

[参考译文] TMS320F28377S:在延长运行时间后清除 SciaRegs

Guru**** 2392095 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1445173/tms320f28377s-sciaregs-cleared-after-extended-run-time

器件型号:TMS320F28377S

工具与软件:

您好!

我有一个程序,运行了几天后,无法通过 Scia 接收数据。 我正在使用 C2000 LaunchPad XL 开发板、其中的编程器部分包含一些 LED、当连接到 SCI 的 UART 处于活动状态时这些 LED 会闪烁。 我还将程序配置为在通过 SCI 接收数据时使 LED 闪烁。 发生此错误时、我向器件发送数据、观察编程器 UART RX LED 是否闪烁、但程序无法通过 SCI 接收数据。

当器件处于此状态时、我已将调试器连接到"仅连接"模式、并观察到以下情况:

请注意、SCICCR SCICTL1 SCIHBAUD 和 SCILBAUD 均为零。

在 CCS 中点击 Resume (F8)后、程序将运行并能够正常通信。 暂停程序并观察 SCI 寄存器:

相关代码段粘贴如下:

```μ A

静态 void sci_init (void){
   断言(SYSCTL_getClock (DEVICE_OSCSRC_FREQ)=DEVICE_SYSCLK_FREQ);
   断言(SYSCTL_getLowSpeedClock (DEVICE_OSCSRC_FREQ)== DEVICE_LSPCLK_FREQ);

   GPIO_setMasterCore (Board_GPIO_PIN_SCITXDA、GPIO_CORE_CPU1);
   GPIO_setPinConfig (BOARD_GPIO_CFG_SCITXDA);
   GPIO_setDirectionMode (BOARD_GPIO_PIN_SCITXDA、GPIO_DIR_MODE_OUT);
   GPIO_setPadConfig (BOARD_GPIO_PIN_SCITXDA、GPIO_PIN_TYPE_STD);
   GPIO_setQualificationMode (Board_GPIO_PIN_SCITXDA、GPIO_QUAL_ASYNC);

   GPIO_setMasterCore (Board_GPIO_PIN_SCIRXDA、GPIO_CORE_CPU1);
   GPIO_setPinConfig (BOARD_GPIO_CFG_SCIRXDA);
   GPIO_setDirectionMode (BOARD_GPIO_PIN_SCIRXDA、GPIO_DIR_MODE_IN);
   GPIO_setPadConfig (BOARD_GPIO_PIN_SCIRXDA、GPIO_PIN_TYPE_STD);
   GPIO_setQualificationMode (Board_GPIO_PIN_SCIRXDA、GPIO_QUAL_ASYNC);

   SCI_performSoftwareReset (SCIA_BASE);
   SCI_setConfig (SCIA_BASE、LSPCLK_FREQ、115200、(SCI_CONFIG_WLEN_8 |)
                                                       SCI_CONFIG_STOP_ONE |
                                                       SCI_CONFIG_PAR_NONE));
   SCI_resetChannels (SCIA_BASE);
   SCI_resetRxFIFO (SCIA_BASE);
   SCI_resetTxFIFO (SCIA_BASE);
   SCI_clearInterruptStatus (SCIA_BASE、SCI_INT_TXFF | SCI_INT_RXFF);
   SCI_enableFIFO (SCIA_BASE);
   SCI_enableModule (SCIA_BASE);
   SCI_performSoftwareReset (SCIA_BASE);
}

void main (void)

   sys_init();
   device_initGPIO();

   Interrupt_initModule();
   interrupt_initVectorTable();

   interrupt_register (INT_TIMER0、&cpuTimer0ISR);
   cputimer_init ();

   led_init();
   SCI_INIT ();
   halfbridge_init();
   STEPPER_INIT ();
   STEPPER_DISABLE ();

   INTERRUPT_ENABLE (INT_TIMER0);
   EINT;
   ERTM;

   SCPI_Init (&SCPI_context、
           scpi_commands、
           &SCPI_interface
           scpi_units_def、
           SCPI_IDN1、SCPI_IDN2、SCPI_IDN3、SCPI_IDN4、
           SCPI_INPUT_BUFFER、SCPI_INPUT_BUFFER_LENGTH
           SCPI_ERROR_QUEED_DATA、SCPI_ERROR_QUEED_SIZE);

   char *str ="SCPI 交互演示\n";
   SCI_writeCharArray (scia_BASE、(uint16_t *) str、strlen (str));

   while (1){

       if (SCI_getRxFIFOStatus (SCIA_BASE)){
           GPIO_togglePin (Board_PIN_LED2);
           char c = SCI_readCharNonBlocking (SCIA_BASE);
           SCPI_Input (&SCPI_context、&C、1);
       }
   }
}

size_t SCPI_Write (SCPI_t *上下文、const char * data、size_t len){
   (void)上下文;
   SCI_writeCharArray (SCIA_BASE、(uint16_t *) data、len);
   返回长度;
}

```μ A

我正在使用未修改的 DriverLib #define VERSION_NUMBER     5010000U

如何查找此错误的原因?

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

    您好!

    为了澄清一点、您看到代码运行正常、并且能够根据需要成功接收和传输数据、但在运行同一程序的几天后会遇到通信中断的情况?

    您是否对 SCI 行进行了范围界定、以确定是否存在任何不必要的行为、还是帮助确定是否存在配置问题?

    器件上运行的任何其他程序/外设是否会产生干扰? 您是否正在监控器件电源轨和 XRSn 以检查器件的行为在发生错误时整体保持正常?

    您是否怀疑唯一的问题是波特率设置不正确? 您是否看到这反映在 SCI 线路中?

    此致、

    Allison

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

    您好、Allison、感谢您的答复。 我的答案是内联的。

    Allison Nguyen 说:

    为了澄清一点、您看到代码运行正常、并且能够根据需要成功接收和传输数据、但在运行同一程序的几天后会遇到通信中断的情况?

    是的、是这样。

    Allison Nguyen 说:

    您是否对 SCI 行进行了范围界定、以确定是否存在任何不必要的行为、还是帮助确定是否存在配置问题?

    我还没有尝试过这种方法。 然而、当故障发生时、SCI 未被使用。

    Allison Nguyen 说:

    器件上运行的任何其他程序/外设是否会产生干扰? 您是否正在监控器件电源轨和 XRSn 以检查器件的行为在发生错误时整体保持正常?

    否、没有其他程序正在运行。 我不会监控电源轨。 该器件通过 USB 供电。 我刚刚通过下降沿触发器将一个示波器探头连接到5V 电压轨、以观察异常。

    Allison Nguyen 说:

    您是否怀疑唯一的问题是波特率设置不正确? 您是否看到这反映在 SCI 线路中?

    在故障期间、我观察到的症状是我的程序正在运行(由闪烁的蓝色 LED 指示)、但无法通过 Scia 通信。  当它处于此状态时、我连接调试器来观察程序的状态。 调试器配置为"仅加载符号"、并且在连接时既不停止也不复位。

    我可以在此状态下观察到 SCIA 寄存器均清零。 这是意外情况、因为我的程序只设置这些寄存器一次。

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

    您好、Nick。

    您能否确认您能够不出问题地运行我们的 SCI 示例和/或在环回模式下运行您的项目以验证 SCI 功能? 如果我们可以验证 SCI 模块是否正常工作、我们可以排除该问题、并查看是否发生了其他一些连接/电源问题。 我还会检查 XRSn 以查看是否发生了复位-鉴于 SCI 寄存器的状态、我怀疑可能会发生这种情况。  

    此致、

    Allison