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.

[参考译文] TMS570LS1227:SCI 多缓冲器的使用

Guru**** 2589280 points
Other Parts Discussed in Thread: TMS570LS1227, HALCOGEN, TMS570LS1224

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/928837/tms570ls1227-the-use-of-sci-multi-buffer

器件型号:TMS570LS1227
主题中讨论的其他器件: HALCOGENTMS570LS1224

尊敬的团队:

客户目前正在调试 TMS570LS1227的 SCI 多缓冲器。

根据规范、LS1227芯片的 sci 有一个8字节缓冲器。

将 Mbuf 模式 GCR1中的 bit 10设置为1、并将 SCIFORMAT 寄存器的所有16位18写入1、以实现多缓冲功能。

他试图更改 GCR1和 SCIFORMAT,但 参数不能修改。

sciInit 中的以下代码:

/**-全局控制1 */
sciREG->GCR1 =(uint32)((uint32) 1U << 25U)/*启用传输*/
|(uint32)((uint32) 1U << 24U)/*启用接收*/
|(uint32)(uint32) 1U < 10U (uint32)/*(
uint32)*(uint32)/u/u/uint32)
/*停止位数*/
|(uint32)((uint32) 0U << 3U)/*偶校验,否则为奇数*/
|(uint32)((uint32) 0U <<2U)/*启用奇偶校验*/
|(uint32)(uint32) 1u <<1U);/*异步模式*/长度


(*/1u)/*/(*/8U)/*长度/(*/1u 

但是在函数退出后、GCR1的位10仍然为0、格式值仍然为7。 为什么?


此外、该规范不介绍当多路复用器缓冲模式处于多路复用器缓冲模式时如何读取 RD 寄存器。 是否在检测到 RDY 信号后连续读取 RD 寄存器?

BR、

Susan  

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

    您好 Susan、

    TMS570LS1224有两个 SCI 模块:LIN/SCI、和 SCI。 HALCOGen 将 LIN/SCI 称为 SCI2、另一个称为 SCI。

    LIN/SCI 模块支持多缓冲模式、但另一个 SCI 模块不支持多缓冲模式。  

    在 中断模式或 DMA 模式下接收或发送数据时、多缓冲模式主要用于降低 CPU 负载。  

    接收数据后、可能会产生 RX 中断和 RXRDY 标志、以及 DMA 请求(RXDMA)。 用户需要从 LINREG->RDX 寄存器读取所有数据。 我更喜欢使用 DMA。

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

    感谢您的回复。

    我们是否有有关多缓冲模式的任何示例代码?

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

    此外、SCI/LIN 可以正常发送数据、但当我将 GCR1的 mbuf 模式设置为1时、串行调试助手不能接收数据。

    /**-全局控制1 */
    
    scilinREG->GCR1 =(uint32)((uint32) 1U <<25U)//启用发送*/
    
    |(uint32)((uint32) 1U << 24U)/*启用接收*/
    
    |(uint32)((uint32) 1U << 10U)/* mbuf 模式*/
    
    |(UINT32)((UINT32) 1U << 5U)//内部时钟(器件没有时钟引脚)*/
    
    |(uint32)((uint32)(1U-1U)<<4U)/*停止位数*/
    
    |(uint32)((uint32) 0U << 3U)/*偶校验、否则为奇数*/
    
    |(uint32)((uint32) 0U << 2U)/*启用奇偶校验*/
    
    |(uint32)((uint32) 1U << 1U);/*异步计时模式*//**
    
    -设置波特率*/
    
    scilinREG->BRS = 520U;/*波特率*/**
    
    -传输长度*/
    
    scilinREG->format =(8U - 1U)|(7<16);/*长度 

    用户指南中

    29.5.2.2在多缓冲模式下传输数据
    当 SCIGCR1中的 Mbuf 模式位设置为1时、选择多缓冲模式。 例如单缓冲器模式、
    您可以使用轮询、中断或 DMA 方法来写入要传输的数据。 传输的数据
    必须写入 SCITD 寄存器。 SCI 等待数据写入 SCITD 寄存器、然后
    将编程的字节数传输到 SCITXSHF、以便自动逐个发送。

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

    您好 Susan、

    多缓冲模式下的 TD 和 RD 寄存器为 LINTD[1:0]和 LINRD[1:0]。

    请参阅此应用手册:

    https://www.ti.com/lit/an/spna213/spna213.pdf?ts=1596649942063&ref_url=https%253A%252F%252Fwww.google.com%252F