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.8035万:软件多次重置SCI模块

Guru**** 2526880 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/614895/tms320f28035-software-reset-sci-module-for-many-times

部件号:TMS320F2.8035万

Champs,

我是向客户询问此问题。

当 RX上有噪音时,它们会添加软件SCI复位,并使用LED指示是否发生SCI复位。

当他们将系统置于嘈杂的环境中时,他们发现一开始就有软件SCI重置,这是预期的。

但是,当他们测试系统很长时间(几个小时)时,系统似乎挂起了SCI (不再 是TX/RX),但其他功能(如C2000的PWM)仍正常工作。

因此,我们有疑问,需要您的支持来澄清此问题:

1)如何正确地"重置SCI"?

到目前为止,我们将SCI重置如下:

EALLOW;

SciaRegs.SCICTL1.bit.RXENA =0;

SciaRegs.SCICTL1.bit.TXENA =0;

SciaRegs.SCICTL2.bit.RXBKINTENA =0;

SciaRegs.SCICTL2.bit.TXINTENA =0;

PieCtrlRegs.PIEIER9.bit.INTx1=0;

PieCtrlRegs.PIEIER9.bit.INTx2=0;

SysCtrlRegs.PCLKCR0.bit.SCIANCLK=0;

EDIS;

300毫秒后,我们将启用它。

EALLOW;

SciaRegs.SCIRXST.Bit.RXRDY=0;

SciaRegs.SCICTL2.bit.TXRDY=0;

PieCtrlRegs.PIEIER9.bit.INTx1=1;

PieCtrlRegs.PIEIER9.bit.INTx2=1;

PieCtrlRegs.PIEACK.ALL || PIEACK_group9;

 

SysCtrlRegs.PCLKCR0.bit.SCIANCLK=1;

SciaRegs.SCICTL1.bit.SWRESET=0;

SciaRegs.SCICTL1.bit.SWRESET=1;

SciaRegs.SCICT2.bit.RXBKINTENA=1;

SciaRegs.SCICTL1.bit.RXENA =1;

SciaRegs.SCICTL1.bit.TXENA =1;

EDIS;

 

 

2)如果我们多次重置SCI模块,是否有任何问题或问题?

 

 

3)重置SCI模块时,是否还清除RX缓冲区?

 

 

 

韦恩

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,
    我写这封信是为了告诉您,一位C2000小组成员已被指派担任此职位,应该很快就会回答。

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

    我更新了背景,但上述问题相同。

    "通过检测寄存器SCIRXST中的错误,当RX上有噪音时,他们添加软件SCI复位,并使用LED指示是否发生正常的SCI中断和SCI错误复位。

    当他们将系统置于嘈杂的环境中时,他们发现一开始就有软件SCI重置,这是预期的。

    但是,当他们测试系统很长时间(几个小时)时,系统似乎挂起了SCI (在PC的连续RX期间没有更多的TX),但其他功能(如C2000的PWM)仍正常工作。 即使他们将环境从嘈杂改为非嘈杂,SCI仍然挂起,因为没有SCI ISR。
    SCI模块应在发出噪音后一次又一次地重置,然后SCI应正常工作。'


    因此,我们有疑问,需要您的支持来澄清此问题:

    1)如何正确地"重置SCI"?

    到目前为止,我们将SCI重置如下:

    EALLOW;
    SciaRegs.SCICTL1.bit.RXENA =0;
    SciaRegs.SCICTL1.bit.TXENA =0;
    SciaRegs.SCICTL2.bit.RXBKINTENA =0;
    SciaRegs.SCICTL2.bit.TXINTENA =0;
    PieCtrlRegs.PIEIER9.bit.INTx1=0;
    PieCtrlRegs.PIEIER9.bit.INTx2=0;
    SysCtrlRegs.PCLKCR0.bit.SCIANCLK=0;
    EDIS;

    300毫秒后,我们将启用它。
    EALLOW;
    SciaRegs.SCIRXST.Bit.RXRDY=0;
    SciaRegs.SCICTL2.bit.TXRDY=0;
    PieCtrlRegs.PIEIER9.bit.INTx1=1;
    PieCtrlRegs.PIEIER9.bit.INTx2=1;
    PieCtrlRegs.PIEACK.ALL || PIEACK_group9;

    SysCtrlRegs.PCLKCR0.bit.SCIANCLK=1;
    SciaRegs.SCICTL1.bit.SWRESET=0;
    SciaRegs.SCICTL1.bit.SWRESET=1;
    SciaRegs.SCICT2.bit.RXBKINTENA=1;
    SciaRegs.SCICTL1.bit.RXENA =1;
    SciaRegs.SCICTL1.bit.TXENA =1;
    EDIS;


    2)如果我们多次重置SCI模块,是否有任何问题或问题?


    3)当我们重置SCI模块时,RX缓冲器和SCIRXST是否也被清除?



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

    2017年8月7日编辑

    下面第3点应改为:3. SCICTL1.bit.SWRESET不会重置RX缓冲区,但SCIRXST将重置... 这两个都通过系统重置进行重置。

    此致,
    科迪

    ________________________________________________________________

    韦恩,

    1. 我看不出 这个代码有什么明显的错误。
    2. 否,SCI模块的许多重置都没有问题。
      1. 如果您发送连续数据并重置SCI模块,则它可能会在帧的一半范围内出现并导致即时成帧错误,这将导致您必须再次重置SCI模块。 您可以通过在设备之间进行握手来避免此类问题。

    3. 是的,它们已重置。

    此致,
    科迪

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

    感谢您提供信息。
    我们正在对其进行调试,以确定是否存在任何意外引发的SCI中断标志。

    关于重置,请帮助我们澄清通过SWRESET (SiaRegs.SCICTL1.bit.SWRESET),SysCtrlRegs.PCLKCR0.bit.SCIAENCLK和系统重置(通过看门狗,BOR,POR)进行的重置吗?

    -使用SW复位(SSciaRegs.SCICTL1.bit.SWRESET)仅复位记录的状态位(即 TXRDY,TXEMPTY,RXWAKE,PE,PE, FE,BRKDT,RXRDY,RX错误)已重置,但SCI配置位和数据缓冲区(RX缓冲区,TX缓冲区)均未重置。

    -仅使用SysCtrlRegs.PCLKCR0.bit.SCIAENCLK停止并恢复SCI模块时钟,但不会影响SCI模块的内容。 即,所有寄存器都不会重置为默认值。

    -使用系统重置(通过看门狗,BOR,POR)可以完全重置SCI的所有寄存器。

    我的上述理解是否正确?


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

    韦恩,

    正确。

    此致,
    科迪

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

    感谢您的澄清。
    我们已经找到了解决这一问题的办法。
    谢谢你。


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

    您好Wayne:

    为解决问题而拥挤。

    听到您解决了这个问题,这是很好的。 我发现了同样的问题,我仍在寻找解决方案。 你能给我一个提示吗?
    此致
    约阿金
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Joachim,

    我不知道我们的情况是相同还是相似。

    它可能取决于您触发SCI中断的方式。

    在本例中,我们最初认为SWRESET会重置Tx/Rx缓冲区中的所有寄存器,直到我们意识到它只重置某些寄存器(如上所述)。

    请注意,不会清除Tx和Rx缓冲区。

    如果没有正确的ACK,他们可能会意外地再次触发中断,这样就不能再触发或维修中断。

    您可以检查SCI显示挂起时是否意外设置了SCI INT标志。

    此外,您可以尝试根据应用程序正确清除Tx/Rx缓冲区,看看这是否有帮助。

    韦恩