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.

[参考译文] TMS320F28386S:SCIA I/O

Guru**** 2526700 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1177361/tms320f28386s-scia-i-o

器件型号:TMS320F28386S

下面的代码取自 FLASH_kernel_C28x_dual_ex1_sci_get_function_cpu1.c 我添加了尝试写入和读取的 while 环路。

该写入会将"abc"置于 COM7 Putty 终端上、但从未返回读操作。

请提供建议。

int32_t sciGetFunction(uint32_t  BootMode)
{
    uint32_t EntryAddr;
    uint16_t command;
    uint16_t data[10]; // 16*10 = 128 + 32
    uint16_t length;

    //
    // Check if SCI is enabled or not
    //
    if(SysCtl_isPeripheralPresent(SYSCTL_PERIPH_PRESENT_SCIA) != 0x01)
    {
        return 0xFFFFFFFF;
    }

    //
    // Assign GetWordData to the SCI-A version of the
    // function. GetWordData is a pointer to a function.
    //
    getWordData = sciaGetWordData;

    //
    // Initialize the SCI-A port for communications
    // with the host.
    //
    sciaInit(SCI_BOOT_ALT1);
    char buf[128];
    char buf2[128];
    strcpy(buf, "abc");
    while(1)
    {
    SCI_writeCharArray(SCIA_BASE, (uint16_t *) buf, strlen(buf));
    DEVICE_DELAY_US(2000000U);
    SCI_readCharArray(SCIA_BASE, (uint16_t *) buf2, 4);
    DEVICE_DELAY_US(2000000U);
    }
...
}

void sciaInit(uint32_t  BootMode)
{
    //
    // Enable the SCI-A clocks
    //
    EALLOW;

    SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_SCIA);

    //
    // TRM, 0x0007 -> scaler of 14. OSCLOK low speed scaling for SCI.
    //
    SysCtl_setLowSpeedClock(SYSCTL_LSPCLK_PRESCALE_4);

    // reset SCI channels.
    SCI_resetChannels(SCIA_BASE);
    HWREGH(SCIA_BASE + SCI_O_FFTX) &= ~SCI_FFTX_TXFIFORESET;

    //
    // 1 stop bit, No parity, 8-bit character
    // No loopback
    //
    // CLK speed and Baud rate get overwritten in autobaud_lock function later.
    //
    SCI_disableLoopback(SCIA_BASE);
    SCI_setConfig(
            SCIA_BASE, DEVICE_LSPCLK_FREQ, 9600U, //DEFAULT_BAUD,
            SCI_CONFIG_WLEN_8 | SCI_CONFIG_STOP_ONE | SCI_CONFIG_PAR_NONE);


    //
    // Enable TX, RX, Use internal SCICLK
    //
    HWREGH(SCIA_BASE + SCI_O_CTL1) = (SCI_CTL1_TXENA | SCI_CTL1_RXENA);

    //
    // Disable RxErr, Sleep, TX Wake,
    // Disable Rx Interrupt, Tx Interrupt
    //
    HWREGB(SCIA_BASE + SCI_O_CTL2) = 0x0U;

    SCI_disableFIFO(SCIA_BASE);
    //
    // Relinquish SCI-A from reset
    //
    SCI_enableModule(SCIA_BASE);

    EDIS;

    GPIO_setMasterCore(84, GPIO_CORE_CPU1);
    GPIO_setPinConfig(GPIO_84_SCIA_TX);
    GPIO_setDirectionMode(84, GPIO_DIR_MODE_OUT);
    GPIO_setPadConfig(84, GPIO_PIN_TYPE_STD);
    GPIO_setQualificationMode(84, GPIO_QUAL_ASYNC);

    return;
}

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

    尊敬的 John:

    您能否提供发送和接收的顺序? 现在、代码是如何设置的、您必须在预期的时间接收4个字节、否则它将无法正常工作。

    此外、请尝试阻塞式读取(readCharArrayBlocking)以查看这是否是时序问题。


    此致、

    Vince

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

    很抱歉耽误你的回答、天气不好(尽管达拉斯现在还不错)。

    我的跟进工作做得不好。 我用不同的初始化重新编写了该项目 、谁知道还有什么、它是否起作用。

    但我感谢你的建议,我会记住这点。

    John