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.

[参考译文] TMS320F2800157:SCI 发送和接收问题。

Guru**** 2538950 points
Other Parts Discussed in Thread: TMS320F2800157, SYSCONFIG

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1351016/tms320f2800157-sci-transmitting-and-receiving-problem

器件型号:TMS320F2800157
主题中讨论的其他器件: SysConfig

大家好!

我正在使用 TMS320F2800157 LaunchPad 微控制器。  

在使用 SCI (UART)协议的笔记本电脑(使用 FTDI 串行转 USB 电缆)和微控制器之间收发数据时、我将使用sci_ex2_loopback_interrupts and sci_ex3_echoback 代码。

但是、尽管尝试从环回模式切换到非环回模式、但系统仍然仅以环回模式运行。 在测试过程中、我观察到 LaunchPad 上的 SCIA 端口未在 GPIO 28和29上显示任何数据。 但寄存器显示传入和传出的数据。  

然后我们尝试了 SCIB、它是可操作的、但它仍然存在最后2字节传输数据的丢失。 不过、缺少的两个字节会伴随第二组传输数据。  此外、该数据不会出现在 Putty (或任何其他软件)上、但会被逻辑分析仪接收。


有人能帮助我们找出缺少 TX 最后两个字节的原因吗?


此致、

S·库马尔  

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

    尊敬的 Siva:

    您能否共享未接收到最后两个字节的情况的配置代码?

    谢谢!

    卢克

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

    我们使用 CCS 12.7和 C2000 5.2示例。

    我们使用了 SysConfig 文件来初始化 SCIB。

    这是我们的 main.c

    #include "driverlib.h"
    #include "device.h"
    #include "board.h"
    #include "c2000ware_libraries.h"
    
    // Main
    //
    void main(void)
    {
    
        //
        // Initialize device clock and peripherals
        //
        Device_init();
    
        //
        // Disable pin locks and enable internal pull-ups.
        //
        Device_initGPIO();
    
        //
        // Initialize PIE and clear PIE registers. Disables CPU interrupts.
        //
        Interrupt_initModule();
    
        //
        // Initialize the PIE vector table with pointers to the shell Interrupt
        // Service Routines (ISR).
        //
        Interrupt_initVectorTable();
    
        //
        // PinMux and Peripheral Initialization
        //
        Board_init();
    
        //
        // C2000Ware Library initialization
        //
        C2000Ware_libraries_init();
    
        //
        // Enable Global Interrupt (INTM) and real time interrupt (DBGM)
        //
        EINT;
        ERTM;
    
        uint16_t loopCounter = 0;
        uint16_t receivedChar;
        unsigned char *msg;
        uint16_t rxStatus = 0U;
    
        msg = "\r\n\n\nHello World!\0";
        SCI_writeCharArray(mySCI0_BASE, (uint16_t*)msg, 17);
        msg = "\r\nYou will enter a character, and the DSP will echo it back!\n\0";
        SCI_writeCharArray(mySCI0_BASE, (uint16_t*)msg, 62);
    
        //
        // Loop Forever
        //
        for(;;)
        {
            msg = "\r\nEnter a character: \0";
            SCI_writeCharArray(mySCI0_BASE, (uint16_t*)msg, 22);
    
            //
            // Read a character from the FIFO.
            //
            receivedChar = SCI_readCharBlockingFIFO(mySCI0_BASE);
    
            rxStatus = SCI_getRxStatus(mySCI0_BASE);
            if((rxStatus & SCI_RXSTATUS_ERROR) != 0)
            {
                //
                //If Execution stops here there is some error
                //Analyze SCI_getRxStatus() API return value
                //
                ESTOP0;
            }
    
            //
            // Echo back the character.
            //
            msg = "  You sent: \0";
            SCI_writeCharArray(mySCI0_BASE, (uint16_t*)msg, 13);
            SCI_writeCharBlockingFIFO(mySCI0_BASE, receivedChar);
    
            //
            // Increment the loop count variable.
            //
            loopCounter++;
    
        }
    }
    
    //
    // End of File
    //

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

    第一个 TX 数据包。

    例外输出:  "\r\n\n\nHello World!\0"

    我们得到的是:  "\r\n\n\n"Hello World"

    第二个 TX 数据包

    例外输出: "\r\n 您将输入一个字符,DSP 将回显它!\n\n0"

    我们得到的是: "!\0\r\n 您将输入一个字符,DSP 将回显它!"

    我们缺少第1个数据包的最后2个字节  

    在第二个 Tx 上、我们得到缺失的2个字节、然后是第二个数据包的其余部分。 此外、最后2个字节的数据包缺失、我们在第3个 TX 上得到了该数据包。 该模式会继续。

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

    尊敬的 Siva:

    我怀疑此问题可能是由于 SCI TX 缓冲区溢出所致。 您是否可以使用一条长度小于16字节的消息来测试此情况? 最后两个字节是否仍然丢失? 您在 FIFO 和非 FIFO 模式下是否会出现此问题?

    谢谢!

    卢克

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

    是的、我们用10个字节进行了测试、但最后仍然得到两个缺失的字节。 我们可以在非 FIFO 模式下看到这个问题。

    当我们启用 FIFO 时、缺少更多字节。

    我们不知道如何配置 FIFO 大小、因为我们使用 SysConfig 来启用通信协议。

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

    谢尔谢克、您好!

    您使用的是 Launchpad、控制卡还是定制电路板? 我 可以自行测试该问题以确定根本原因。

    谢谢!

    卢克

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

    Luke、您好!

    我们正在使用 Launchpad 进行测试。

    谢谢!

     S·库马尔

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

    尊敬的 Siva:

    我能够运行 sci_ex3_echoback、不会出现任何问题。 您似乎已经为使用 SysConfig 的此示例创建了一个版本。 当您未对代码添加任何修改时、能否确认导入的项目版本能够正常工作? 是否使用 CCS COM 端口进行测试?

    您是否在观察到此问题时设置断点? 断点将导致 SCI 在默认情况下停止中间传输、因此某些消息可能会被截断。

    谢谢!

    卢克