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.

[参考译文] LAUNCHXL-F280049C:SCI Rx 无法正常工作

Guru**** 2782575 points

Other Parts Discussed in Thread: SYSCONFIG

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1617040/launchxl-f280049c-sci-rx-not-workig-properly

器件型号: LAUNCHXL-F280049C
主题: SysConfig 中讨论的其他器件

尊敬的团队:

我正在 launcXl 中的 UART 部分工作。 我对 SCIA 和 SCIB 使用了 RX 和 TX ISR。 电路板的 J8-76 引脚与 J8-73 连接。 用作 Tx 和 RX。 当我发送一个字节 0xA4 SCIA 时、我在同一 SCIB 中收到了 0xA4。 但当我发送 4 个字节时、即 0xA2、0xA2、0xA2、0xA2、 令人惊讶的是、我在缓冲区中收到 162d、209d、209d 209d。   

最初我使用 Modbus Poll 和 485 硬件、我怀疑 485 硬件、因此我由 SCIA 和 SCIB 在内部连接、结果是相同的。 第一个字节始终正确(即 162、在这种情况下、但如果 I 更改为 0xA2 至 oxA3、rcved 将为:165d)、但其他数据将更改。  

:::::::::::::::::::::::::: 配置:::::::::::::::::::::::
void mySCI0_init (){
  SCI_clearInterruptStatus (mySCI0_BASE、SCI_INT_RXFF | SCI_INT_TXFF | SCI_INT_FE | SCI_INT_OE | SCI_INT_PE | SCI_INT_RXERR | SCI_INT_RXRDY_BRKDT | SCI_INT_TXRDY);
  SCI_clearOverflowStatus (mySCI0_BASE);
  SCI_disableFIFO (mySCI0_BASE);
  sci_resetChannels (mySCI0_BASE);
  SCI_setConfig (mySCI0_BASE、DEVICE_LSPCLK_FREQ、mySCI0_BAUDRATE、(SCI_CONFIG_WLEN_8|SCI_CONFIG_STOP_ONE|SCI_CONFIG_PAR_NONE);
  SCI_disableLoopback (mySCI0_BASE);
  Sci_performSoftwareReset (mySCI0_BASE);
  SCI_enableInterrupt (mySCI0_BASE、SCI_INT_RXRDY_BRKDT | SCI_INT_TXRDY);
  SCI_enableModule (mySCI0_BASE);
}
void mySCI1_init (){
  SCI_clearInterruptStatus (mySCI1_BASE、SCI_INT_RXFF | SCI_INT_TXFF | SCI_INT_FE | SCI_INT_OE | SCI_INT_PE | SCI_INT_RXERR | SCI_INT_RXRDY_BRKDT | SCI_INT_TXRDY);
  SCI_clearOverflowStatus (mySCI1_BASE);
  SCI_disableFIFO (mySCI1_BASE);
  sci_resetChannels (mySCI1_BASE);
  SCI_setConfig (mySCI1_BASE、DEVICE_LSPCLK_FREQ、mySCI1_BAUDRATE、(SCI_CONFIG_WLEN_8|SCI_CONFIG_STOP_ONE|SCI_CONFIG_PAR_NONE);
  sci_disableLoopback (mySCI1_BASE);
  Sci_performSoftwareReset (mySCI1_BASE);
  SCI_enableInterrupt (mySCI1_BASE、SCI_INT_RXRDY_BRKDT | SCI_INT_TXRDY);
  SCI_enableModule (mySCI1_BASE);
}
////////////////// 5msISR ruitine////////////////////////
IF(计时器> 1000)
  {
    计时器= 0;
    ModbusA.txBuf[0]= 0xA2;
    ModbusA.txBuf[1]= 0xA2;
    ModbusA.txBuf[2]= 0xA2;
    ModbusA.txBuf[3]= 0xA2;
    ModbusA.txLen = 3;
    ModbusA.txBusy = 1;
    ModbusA.txIndex = 0;
    SCI_writeCharBlockingFIFO (ModbusA.base、ModbusA.txBuf[0]);
  }
///////////////////// RXISR 数据收集
 uint16_t 数据;
  //读取 FIFO 中的所有可用字节
  //返回 RX FIFO 中的字数 (0–16)
  if (ModbusB.rxIndex > 6)
    ModbusB.rxIndex = 0;
  DATA = SCI_readCharNonBlocking (ModbusB.base);
  ModbusB.rxBuf[ModbusB.rxIndex+]=(uint8_t) data;
  /////////////////////////////////////
 
 
//////////////////// TX ISR//////////////////
 

__interrupt void INT_mySCI0_TX_ISR (void)
  if (ModbusA.txBusy && ModbusA.txLen > 0){
    SCI_writeCharBlockingFIFO (ModbusA.base、ModbusA.txBuf[ModbusA.txIndex+]);
    ModbusA.txLen--;
    if (ModbusA.txLen = 0)
    {
      ModbusA.txBusy = false;
    }
  }
  SCI_clearInterruptStatus (ModbusA.base、SCI_INT_TXRDY);
  INTERRUPT_CLEARACKGROUP (INTERRUPT_ACK_group9);
}
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、

    我们的支持是在今天由于美国假期而停止工作,感谢您的耐心。

    此致、

    彼得

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

    您好、感谢您发送通知。 我的问题仍然存在

    我之前曾与 Concerto 和 Delfino 系列合作,但这没有被观察到。

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

    尊敬的 Umang:  

    看起来此代码中的一些是由 SysConfig 生成的、这意味着配置应该没有问题。 您当前使用的波特率是多少? 您是否尝试过调整波特率来查看这是否对通信有影响?


    此致、

    彼得