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.

[参考译文] TMS320F28379S:SCIC 反复出现错误 BRKDT

Guru**** 2539570 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/753803/tms320f28379s-scic-repeatedly-gets-error-brkdt

器件型号:TMS320F28379S

我在 TMS320F28379上运行2个 SCI 总线、B 和 C。 当运行电路板时、这两个器件具有相同的设置、如下所示:


   //为 SCI-C 配置 SCICCR
   scicRegs.SCICCR.bit.stopbits = 0;      // 1停止位
   scicRegs.SCICCR.bit.parity = 0;        //奇偶校验
   scicRegs.SCICCR.bit.PARITYENA=0;     //奇偶校验被禁用
   SCicRegs.SCICCR.bit.LOOPBKENA=0;     //回送被禁用
   scicRegs.SCICCR.bit.ADDRIDLE_MODE = 0; //选择空闲线模式协议
   scicRegs.SCICCR.bit.SCICHAR = 7;       // 8个数据位

   //为 SCI-C 配置 SCICTL1
   scicRegs.SCICTL1.bit.RXERRINTENA=0;  //接收错误中断被禁用
   SCICRegs.SCICTL1.bit.SWRESET = 0;      //在配置时使能软件复位(低电平有效)
   ScicRegs.SCICTL1.bit.TXWAKE = 0;       // SCI TX 唤醒功能被禁用
   scicRegs.SCICTL1.bit.SLEEP = 1;        //睡眠模式被启用
   scicRegs.SCICTL1.bit.TXENA=1;        //启用 TX
   scicRegs.SCICTL1.bit.RXENA=1;        //启用 RX

   //为 SCI-C 配置 SCICTL2
   scicRegs.SCICTL2.bit.RXBUKINTENA=1;   //启用接收器-缓冲器/中断
   scicRegs.SCICTL2.bit.TXINTENA=0;     //禁用 TX 就绪中断

   //为 SCI-C 配置 SCIHBAUD 和 SCILBAUD
   uint16 brr = 64;//=(uint16) round (LSPCLK /(SCIC_RS485_baud_rate * 8.0)- 1);
   ScicRegs.SCIHBAUD.all = brr >> 8;          //波特率= 125k
   ScicRegs.SCILBAUD.ALL = BRR & 0xFF;        //波特率= 125k

   //为 SCI-C 配置 SCIFFTX
   ScicRegs.SCIFFTX.bit.SCIRST = 1;       // SCI FIFO 可恢复发送和接收
   SCicRegs.SCIFFTX.bit.SCIFFENA=1;     //启用 SCI FIFO 增强功能
   SCicRegs.SCIFFTX.bit.TXFIFORESET = 0;  //将 TX FIFO 指针复位为零并在配置时保持复位状态
   scicRegs.SCIFFTX.bit.TXFFIENA=0;     //禁用发送 FIFO 中断
   ScicRegs.SCIFFTX.bit.TXFFIL = 0;       //将发送 FIFO 中断级别位设置为0

   //为 SCI-C 配置 SCIFFRX
   ScicRegs.SCIFFRX.bit.RXFIFORESET = 0;  //将 RX FIFO 指针复位为零并在配置时保持复位状态
   ScicRegs.SCIFFRX.bit.RXFFIENA=1;     //接收 FIFO 中断使能
   ScicRegs.SCIFFRX.bit.RXFFIL = 1;       //将接收 FIFO 中断级别位设置为1

   //为 SCI-C 配置 SCIFFCT
   scicRegs.SCIFFCT.bit.CDC = 0;          //禁用自动波特对齐
   scicRegs.SCIFFCT.bit.FFTXDLY = 0;      //将 FIFO 传输延迟设置为0

   //从复位中撤回 SCI
   scicRegs.SCICTL1.bit.SWRESET = 1;      //禁用软件复位
   ScicRegs.SCIFFTX.bit.TXFIFORESET = 1;  //禁用 TX FIFO 复位
   ScicRegs.SCIFFRX.bit.RXFIFORESET = 1;  //禁用 RX FIFO 复位

SCIB 也是如此。

SCIB 工作正常、但我无法检测 SCIC 的任何活动。 这是因为在一段时间后、BRKDT 的状态错误标志变为高电平。  

如果我在器件上执行 SWRESET、则会再次发生这种情况、并且会继续这样做。

即使没有施加输入并且 RX 线持续为低电平、也会发生该错误。

在本例中、该误差到底意味着什么?

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

    Dan、您好!

    请参阅 下面器件 TRM ()的 SCI 章节摘录。  一个 SCI 帧从一个低电平位开始、并且额外的数据位都可以是低电平。  如果该线路继续为低电平、则会发生 BRKDT 错误。  如果发生这种情况、这意味着 RX 线处于低电平的时间太长、如果该线持续处于低电平、情况也是如此。

    如果您未应用输入、我认为您需要启用 GPIO 上拉或以其他方式上拉输入。

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

    大家好、感谢大家的回答。

    我采纳了您的建议并添加了硬件上拉、因此现在我确定没有连续的0流。 我已使用器件上的示波器验证了这一点。

    尽管如此、我仍然看到相同的行为。 当您启动微控制器时、SCIC 系统在0x00A0上以 SCIRXST 结束、BRKDT 标志仍会以某种方式被触发。

    没有信号出现在线路上、它只是保持在高电平。 这有什么意义吗?

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

    是否确定 SCI 模块的 GPIO 复用到有问题的通道上? 如果模块未复用到引脚上、我认为上拉电阻器不会对模块运行产生任何影响。 此外、我认为您需要确保在启用 SCI 模块之前发生 GPIO 多路复用。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Dan、您好!

    您是否能够解决您的问题?