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.

[参考译文] TMS320F2.8377万D:如何处理10位UART

Guru**** 2551110 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/629630/tms320f28377d-how-to-handle-10-bit-uart

部件号:TMS320F2.8377万D
主题中讨论的其他部件:TMS320F2.8374万D

大家好,  

我 需要  通过 UART与其他MCU通信,这是异步 10位 通信。

现在  我可以看到 简单的9位 (8 + add),但如何处理10位通信?   是否有任何建议?  

谢谢你  

此致

卡洛

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

    所需的波特率是多少?

    奇偶校验可配置为奇数或偶数,因此我认为在发送时,您可以计算哪种奇偶校验模式将给出正确的第10个发送位? 这不会高效,但可能比点按更好。

    如果启用奇偶校验,SCI将接收10位。 然后,您可以计算奇偶校验并对照奇偶校验错误标志进行检查,以确定在奇偶校验插槽中接收到的最后一个位。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,
    我要求Carlo提供此模式。
    我需要一个10位的2Mbit

    幸运的是,我可以使用专用内核(我有一个TMS320F2.8374万D)来完成此任务.....

    TX不是问题;在ADDR模式下,使用TXWAKE位控制位9,我有一个算法来估计奇偶校验并更改奇偶校验标志以根据需要强制使用第10位。

    问题与RX有关
    我发现PE标志只能通过SW重置或SCI重置来重置。
    此事件将重置SCI状态机,这将导致下一个字节的检测丢失。


    我找到了一个解决方法,启用FIFO并使用RXBUFREG (PE)的位14;它似乎在读取寄存器后就会自动清除。

    正确吗?
    是否有替代解决方案?

    附注
    FIFO似乎也不能保留RXWAKE标志和PE;我的意思是,如果我收到3个字节,并且读取FIFO,RXWAKE和PE总是指第一个元素。 正确吗?


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

    您好,Emanuele,

    基于我的理解:

    SCIRXST.PE奇偶校验 错误标志只能通过模块重置来重置,因此,正如您所说的那样,除非在传入消息之间有很长的时间,否则这可能不会有帮助。

    SCIRXBUF.SCIFFPE是接收FIFO顶部的奇偶校验错误, SCIRXST.RXWAKE是FIFO顶部的地址位。  我对这些位的理解是,FIFO确实存储了地址和奇偶校验位。  我认为您需要做的是:

    对于接收FIFO中的每个项目:

    • 读取 SCIRXST.RXWAKE位。   
    • 读取 SCIRXBUF寄存器的全部16位。
      • 注意:这将自动加载RXWAKE和SCIRXBUF,并使用FIFO中的下一个值
    • 组装收到的10位,其中SCIRXBUF的0-7位是消息的0-7位,SCIRXBUF位14是位8,RXWAKE位是位9。  

    由于读取SCIRXBUF会将下一个值加载到RXWAKE中,因此读取RXWAKE需要在读取SCIRXBUF之前完成。