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.

[参考译文] TMS320F28335:SCI 通信

Guru**** 2589280 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1180577/tms320f28335-sci-communication

器件型号:TMS320F28335

大家好、

客户有一些问题需要您的帮助:

使用 SCI 执行简单的发送和接收控制、作为从站、通过一个数组将数据返回到上部位置的机器(ComMonitor)。  将发送任务函数置于定时器0中、将定时器周期设置为10ms、正常发送和接收消息、始终接受和发送数据。 但是、定时器设置为1ms、返回和发送信息完全不同。 SCI 的时钟频率是默认 LSPCLK 设置。 这个问题是否与定时器周期相关?

此外、可以使用5ms 和50ms、但错误会大量弹出、请参阅指示缺少停止位的错误标志。 它也发生在1ms、更奇怪的是 、1ms 接收和发送的数据不一致(基本上是错误的)、并且在5ms 时偶尔也不正确。  

此外、通过 SWRESET 复位错误标志位是否会对后续通信产生影响。  

发送的函数代码:

void scitx_a(void)
{
    int i = 0;
    for(i=0;i<RXD_iSciA;i++)
    {
        SciaRegs.SCITXBUF = tdata[i];
        while(0==SciaRegs.SCICTL2.bit.TXEMPTY);     //TEXMPTY :0  SCITXBUF or TXSHF contain data

    }
    RXD_iSciA = 0;
    SCIA_TX_L;          //发送禁止
    SCIA_RX_H;
}

void SCI_work(void)
{
    int i = 0;

    for(i=0;i<RXD_iSciA;i++)
    {
        tdata[i]=rdata[i];

    }

    SCIA_RX_L;
    SCIA_TX_H;         //发送使能
}

在 Timer0中:

interrupt void TIM0_IRQn(void)
{

    LED_work(&LED_count);
            SCI_work();
            scitx_a();
//            SCIA_RX_H;
    PieCtrlRegs.PIEACK.bit.ACK1 = 1;

}

您可以帮助检查此案例吗?

谢谢、此致、

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

    您好 Ben、

    [引用 userid="534511" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1180577/tms320f28335-sci-communication 也可以使用5ms 和50ms、但错误会大量弹出、请参阅指示缺少停止位的错误标志。 它也发生在1ms、更奇怪的是 、1ms 接收和发送的数据不一致(基本上是错误的)、并且在5ms 时偶尔也不正确。  [/报价]

    传输所需数据需要多长时间? 如果您不将其包含在计时器 ISR 中、而是包含在正常程序流程中、会怎么样?  

    此致、

    Marlyn

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

    您好、Marlyn、

    传输数据的确切时间未计算、但非常短。 波特率为19200、高位传输的数据为12 34 56、传输周期为300ms。 在28335端发送数据的函数被放置在 Timer0中。 周期为1ms、5ms、10ms、50ms、5ms 或更多、 数据本质上是相同的。 只有偶尔出现停止位丢失(如寄存器的标志位所示)、1ms 的发送和接收数据不一致。 发送和接收数据的配置如上所示。 以下是 Timer0配置。  

    EALLOW;
    PieVectTable.TINT0 =&TIM0_IRQn;     //Timer0
    EDIS;

    中断空 TIM0_IRQn (空)

    LED_work (&LED_COUNT);
    sci_work ();
    scitx_a();              //数据传输
    // SCIA_RX_H;
    PieCtrlRegs.PIEACk.bit.ACK1=1;

    ConfigCpuTimer (&CpuTimer0、150、1000);   //1ms

    最好的爬梯

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

    Ben、

    感谢您提供更多信息。 不使用定时器时是否偶尔会丢失停止位、或者仅在使用定时器时才会丢失停止位?

    此致、

    Marlyn

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

    您好、Marlyn、

    客户尝试过、在不使用计时器时、有时会丢失停止位。 导致无法进入 ISR、现在通过复位解决了。 现在的问题是、如果仅接受一个字节的数据是可以的、例如01、但如果接受多个字节、就会出错、就像主器件发送01 00 02、从器件接收到的数据变成了其他数据。

    此致、

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

    您好、Marlyn、

    我是否可以知道有任何更新?

    此致、

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

    Marlyn 不在办公室(许多其他主题专家也不在办公室)。 她将在1月的第一周返回、届时您可以得到回复。 感谢您的理解和耐心。

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

    您好 Ben、

    [引用 userid="534511" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1180577/tms320f28335-sci-communication/4454406 #4454406"]但如果多个字节接受(如主器件发送01 00 02),从器件接收的数据将变为其他数据,则会出错。

    我很高兴缺失的停止位问题已得到解决。 您能不能描述接受多个字节时的错误是什么?  

     是否可以尝试添加两个停止位而不是一个停止位?

    此致、

    Marlyn