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.

[参考译文] CCS/MSP432P401R:检查串行缓冲器大小

Guru**** 2540720 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/586740/ccs-msp432p401r-check-serial-buffer-size

器件型号:MSP432P401R

工具/软件:Code Composer Studio

大家好、

我希望从 EUSCIA0的串行缓冲器中读取一条消息。 在这种情况下、我不知道消息的长度。 我想知道缓冲区中当前消息的长度、或者在读取缓冲区以保存字符之前检查缓冲区是否为空。 到目前为止、我找不到任何指向正确方向并在驱动程序库的用户指南中查看过的示例、我可以找到的最接近的例子是 UART_queryStatusFlags、然后可能是 EUSCI_A_UART_BUSY 的标志。 请提供任何帮助。

提前感谢!

Thomas

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

    Thomas、您好!

    硬件缓冲器保存一个字节、而不是更多。 您可以在接收下一个将覆盖现有字节的字节之前将接收到的字节复制到输入缓冲区中。

    Dennis

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

    查看以下内容:

    www.simplyembedded.org/.../

    我做了一些更简单的事情:

    // RX 串行填充
    uint8_t serRxBufAvail (void);
    uint8_t serRxGet (void);
    
    #define SER_RX_BUFSIZE (64)// 2
    uint8_t serpts RxBuf[SER_RX_BUFIdSIZE]的幂;
    
    //要读取的下一个数据的 Readx。
    // WriteIdx 会向下一个要写入的空空间添加点。
    volatile uint8_t serRxReadIdx、serRxWriteIdx;
    #define RX_DEFAULT "No Data!"
    #define RX_CLEAR " "//15个空空
    
    
    EUSCIA0_IRQHandler (void){
    uint8_t Rx;
    
    uint32_t status = MAP_UART_getEnabableInterruptStatus (EUSCI_A0_BASE);
    
    MAP_UART_clearInterruptFlag (EUSCI_A0_BASE、STATUS);
    
    if (status & EUSCI_A_UART_RUST_RATE_RATE_RATE_Rx+
    
    
    
    )= EUSCI_RATE_RATE_RATE_RATE_RATE_Rx+= EQ+= EAUT+= EQ_RATE_RATE_RATE_RATE_RATE_RATE_RATE_RATE_Rx+= EQ+(EQ+)
    (0):(serRxWriteIdx);
    
    }否则(status & EUSCI_A_UART_Transmit_interrupt_FLAG){
    if (serBufTxIdx = 0)
    return;
    if (serTxBuf[serBufTxIdx]= 0){
    // done
    serBufTxIdx = 0;
    }
    
    
    
    
    
    
    可能需要关闭某些 UART_transmitxIdx 中断;}[serTX+= 0_transmit0+}
    
    uint8_t serRxBufAvail (void)
    {
    if (serRxWriteIdx = serRxReadIdx){
    return 0;
    }否则(serRxWriteIdx - serRxIdIdx > 0){
    return (serRxWriteReadx - serRxReadIdx);
    }else{
    return (serRxRxWriteIdx +
    
    
    
    
    
    
    )= serxRxRxRxRxInd +!}sereIdx (sRxRxRxRxRxRxeIdx +)= srx +!(sereRxRxRxRxRxRxRxRxRxRxRxRxRxRxRxDx +)= sereIdx +)= srx (srx +
    
    serRxReadIdx =(serRxReadIdx = SER_RX_BUFSIZE)? (0):(serRxReadIdx);
    }否则{
    ret ='.';
    }
    return;
    }