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-F280039C:使用开发板上的 GPIO10和 GPIO11运行 sci_ex3_echoback 例程来发送 SCI 数据失败。

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1428291/launchxl-f280039c-running-the-sci_ex3_echoback-routine-using-gpio10-and-gpio11-on-the-development-board-to-send-sci-data-fails

器件型号:LAUNCHXL-F280039C

工具与软件:

您好、TI 工程师。
下面是我在 sci_ex3_echoback 例程上修改的代码、我通过示波器的触发模式测量 SCI_TX 引脚对其进行了测试。 我在代码的第36行(msgtx[0]=0xF)设置了一个断点、但是当我运行到这一行时、示波器上没有波形。 当我点击 CCS 软件上的 Terminate 按钮时、示波器选择 SCI_TX 波形、这个波形看起来像这样。 我想问这种现象的原因是什么?

#include "driverlib.h"
#include "device.h"

uint16_t msgtx[1]={0xF};

void main(void)
{

    Device_init();
    Device_initGPIO();
    
    GPIO_setPinConfig(GPIO_10_SCIB_TX);
    GPIO_setDirectionMode(10,GPIO_DIR_MODE_OUT);
    GPIO_setPadConfig(10,GPIO_PIN_TYPE_STD);
    GPIO_setQualificationMode(10,GPIO_QUAL_ASYNC);
    
    GPIO_setPinConfig(GPIO_11_SCIB_RX);
    GPIO_setDirectionMode(11,GPIO_DIR_MODE_IN);
    GPIO_setPadConfig(11,GPIO_PIN_TYPE_STD);
    GPIO_setQualificationMode(11,GPIO_QUAL_ASYNC);
    
    Interrupt_initModule();
    Interrupt_initVectorTable();
    
    SCI_disableModule(SCIB_BASE);
    SCI_setConfig(SCIB_BASE,DEVICE_LSPCLK_FREQ,9600,(SCI_CONFIG_WLEN_8|SCI_CONFIG_STOP_ONE|SCI_CONFIG_PAR_NONE));
    SCI_resetChannels(SCIB_BASE);
    SCI_resetRxFIFO(SCIB_BASE);
    SCI_resetTxFIFO(SCIB_BASE);
    SCI_clearInterruptStatus(SCIB_BASE,SCI_INT_TXFF,SCI_INT_RXFF);
    SCI_enableFIFO(SCIB_BASE);
    SCI_enableModule(SCIB_BASE);
    
    SCI_writeCharArray(SCIB_BASE,(uint16_t*)msgtx,1);
    while(SCI_isTransmitterBusy(SCIB_BASE));
    msgtx[0]=0xf;
}

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

    当程序到达断点时、ScibRegs 寄存器的值将进行补充、如下所示:可以看到 SCICTL2.TXEMPTY=0、SCICTL1.TXENA=1、但为什么不发送数据?

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

    默认情况下、当 CCS 命中您的断点时、SCI 将立即停止传输。 请尝试设置 SCIPRI。 FREESOFT 位设置为2h 或3h、以启用自由运行、从而查看这是否可以解决您的问题。

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

    您好、Gus。

    感谢您的答复。  

    在我设置 SCIPRI 之后。 FREESOFT 位为2h 或3h、我仍然没有触发示波器采样。 不过、当我设置 SCIPRI 时。 FREESOFT 位为0并注释掉"SCI_enableFIFO (SCIB_BASE)"、即使使用断点、我也能够对 SCI_TX 波形进行采样。

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

    Zhen、

    我建议您坚持使用原始示例中给出的序列。 只需更改 SCI 基地址。 例如、在传输开始之前给出了一个附加的 SCI_performSoftwareReset。  

        //
        // Initialize SCIA and its FIFO.
        //
        SCI_performSoftwareReset(SCIA_BASE);
    
        //
        // Configure SCIA for echoback.
        //
        SCI_setConfig(SCIA_BASE, DEVICE_LSPCLK_FREQ, 9600, (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);