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.

[参考译文] TMS320F28027:SCI 通信未连续接收。

Guru**** 2539500 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/593634/tms320f28027-sci-communication-is-not-receiving-continuously

器件型号:TMS320F28027

尊敬的所有人:

我正在使用 F28027、并且我正在尝试在两个 DSP 之间的 SCI 上进行通信。 发送器正在传输数据。 我观察到了"iton scope"。 但是接收器不连续接收。 我在发送器代码中有一个延迟环路、并且我保持延迟时间越长、在条件检查标志时接收器卡在打开状态越多。 当我增加延迟时间时、代码持续等待、就像没有传入数据一样。 当我缩短延迟时间时、它会变得更小。 有人能告诉我如何解决这个问题。 这是我的发送器和接收器代码。

for (;;)
{
SendChar=0;
for (SendChar=1;SendChar<=255;SendChar++)
{
delay_loop();
scia_txmit (SendChar);
/*while (SciaRegs.SCIFFRX.bit.RXFFST!=1){}//等待 XRDY =1为空状态
//检查接收到的字符
ReceivedChar = SciaRegs.SCIRXBUF.ALL;
if (ReceivedChar!= SendChar) error ();
LoopCount++;*/
}
}

void scia_init()
{

//02.03.2017适用于蓝牙的 SCI 配置
EALLOW;
GpioCtrlRegs.GPAPUD.bit.GPIO28 = 0;//为 gpio28启用上拉(SCIRXDA)
GpioCtrlRegs.GPAPUD.bit.GPIO29 = 1;//禁用 gpio29的上拉电阻器(SCITXDA)
GpioCtrlRegs.GPAQSEL2.bit.GPIO28 = 3;//asynch 输入 GPIO28 (SCIRXDA)
GpioCtrlRegs.GPAMUX2.bit.GPIO28 = 1;//将 gpio 配置为 SCI 发送器
GpioCtrlRegs.GPAMUX2.bit.GPIO29 = 1;//将 gpio 配置为 SCI 接收器
EDIS;



SciaRegs.SCICCR.bit.stopbits = 0;//一停止位
SciaRegs.SCICCR.bit.PARITYENA=0;//禁用奇偶校验
SciaRegs.SCICCR.bit.LOOPBKENA=0;//循环回扫禁用(当 Tx 连接内部 Rx 时) SciaRegs.SCICCR.bit.TXICCR.1/

TXICES.1/ TXICTR.1/ TXICTRENA


= 0;//使能 TXICTLT.TXICEST.TXIC.1/ TXICEST.TXIC.CLA.1/ TXICEST.TXICT.TXICEST.1/位= 0;//使能 TXICEST.TXICT.TXICEST.TXICT.TXICR=0

//使能 TXRDY 中断
SciaRegs.SCICTL2.bit.RXBKINTENA=1;//使能 RXRDY 中断
//örnekte ikikikez yazılmış?

SciaRegs.SCIHBAUD = 0x0000;
SciaRegs.SCILBAUD = 0x000F;//LSPCLK = 12.5MHz (50MHz SYSCLK) BAUD=LSPCLK/(16*8)

SciaRegs.SCICCR.bit.LOOPBKENA=1;//启用回路
SCRIVA23 =0xICTL1;所有 SCICTL1; //从复位中放弃 SCI
}

//发送器函数
void scia_txmit (int a)
{

SciaRegs.SCITXBUF = A;

}

void scia_fifo_init ()
{
SciaRegs.SCIFFTX.ALL=0xE040;
SciaRegs.SCIFFRX.ALL=0x2044;SciaRegs.scfct.all



}void fall.e0=0x2044;void scfac.cloop (void = 0=0.clay)

I;
表示(I = 0;I < 100;I++){}

上面写入的代码用于发送器侧。

我使用计时器中断来实现延迟时间、但我遇到了相同的问题。

对于接收器端、我已经将一个名为 received 的变量描述为 uint8。 然而、接收器 DSP 将其显示为 unsigned char。 我想了解原因。 正如我之前说过的、它经常在 while 条件下(取决于延迟时间)

这里是接收器代码

 

for (;;){
//asm (" NOP");//主循环(中断发出)
SciaRegs.SCICTL1.bit.RXENA=1;
while (SciaRegs.SCIRXST.bit.RXRDY = 0){}//等待 XRDY =1为空状态
//while (SciaRegs.SCIFFRX.bit.RXFFST!=1){}
//获取字符
接收= SciaRegs.SCIRXBUF.ALL;
接收=接收和0x00FF;
SciaRegs.SCIFFRX.bit.RXFFINTCLR = 1;
//asm (" NOP");
//SciaRegs.SCIFFRX.bit.RXFFINTCLR = 1;
}

void scia_init()
{

//02.03.2017适用于蓝牙的 SCI 配置
EALLOW;
GpioCtrlRegs.GPAPUD.bit.GPIO28 = 0;//为 gpio28启用上拉(SCIRXDA)
//GpioCtrlRegs.GPAPUD.bit.GPIO29 = 1;//禁用 gpio29的上拉电阻器(SCITXDA)
GpioCtrlRegs.GPAQSEL2.bit.GPIO28 = 3;//asynch 输入 GPIO28 (SCIRXDA)
GpioCtrlRegs.GPAMUX2.bit.GPIO28 = 1;//将 gpio 配置为 SCI 接收器
//GpioCtrlRegs.GPAMUX2.bit.GPIO29 = 1;//将 gpio 配置为 SCI 发送器
EDIS;



SciaRegs.SCICCR.bit.stopbits = 0;//停止位
SciaRegs.SCICCR.bit.PARITYENA=0;//禁用奇偶校验
SciaRegs.SCICCR.bit.LOOPBKENA=0;//循环回扫禁用(当 Tx 连接内部 Rx 时) SciaRegs.SCICCR.bit.1/

TXICTR1.0001/

启用 TXICTRENA
= 0;// t.USTR1.t.USTRENA = 0;// TXICTL1.0001.t.US.CLTICEST.1/ TXICEST.US.CLA = 0;//

//启用 TXRDY 中断
SciaRegs.SCICTL2.all = 0x0002;//启用 RXRDY 中断
//örnekte ikikikez yazılmış?

//autobaud detection (14.03.2017)
SciaRegs.SCIFFCT.bit.CDC = 1;//启用 aTooboaud aligment
SciaRegs.SCIFFCT.bit.ABDbaud = 1;//清除 abd 位

SciaRegs.SCIHBAUD = 0x0000;//选择速度低于0xSCFCT.CLB=12.5MHz


;//启用 SCLCR.CLK = 0x251MHz;// SCLCLK = 0xSCLCR.CLK = 0x251MHz;/ SCLCR.CLK =0XCLK = 0xCLK = 0xCLK = 0xCLK = 0xCLK = 0xCLK = 0xCLK = 0xCLK = 0xCLK = 0xCLK = 0.CLK = 0.CLK = 0.CLK;/ SCLCR.CLK = 0xCLK =
//从复位中放弃 SCI

//SciaRegs.SCIFFTX.bit.TXFIFOXRESET=1;//启用 FIFO TX 中断以便禁用自动波特
}

void scia_fifo_init ()
{
SciaRegs.SCIFFTX.All=0xE040;
SciaRegs.SCIFFRX.All=0x2044;
SciaRegs.SCIFFCT.All=0x0;
}

如果有人立即帮助我、我会变得很亮。

非常感谢。

此致

法赫里

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

    很抱歉、您在使代码正常工作时遇到一些问题。 让我们看看我是否可以帮助解决这个问题。

    首先、从您所说的内容来看、发送器侧似乎按预期发送数据、而不会出现任何问题。 因此、我认为我们现在可以将其作为一个原因来消除。

    我将确认这一点、但我认为如果使用接收 FIFO、您必须使用 RXFFST、则不应使用 RXRDY。 当数据从移位寄存器移动到 FIFO 时、SCI 硬件将清零 RXRDY 位。 考虑将轮询循环移动到使用 RXFFST、我将尝试快速获得行为确认。

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

    您好、Mark

    感谢您的参与。 我已经解决了这个问题、但我仍在处理 SCI、因此如果我需要任何帮助、我将在这里为您写信

    再次感谢你。

    此致

    法赫里

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

    我很高兴听到你能够自己弄清楚这个问题。 您能否分享您对此问题的解决方案? 其他人可能会认为它有用。
    如果您将来有其他问题、请随时创建新帖子!

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

    您好、Mark

    很抱歉耽误你的回答。 在您提出建议后、我已使用 RXFFST 寄存器更改 RXRDY 标志。 我遇到接地问题、我解决了。 通过有线通信、它可以成功地进行通信。  

    不过,我又有另一个问题。 我已拔下电线并连接蓝牙器件以实现无线通信、当我将接收器引脚连接到蓝牙模块时、F28027的接地电平将上升。 因此、当发送数据时、DSP 无法接收数据。 因为接地电平不再为零。 我使用了一个缓冲器、但接地电平仍在上升。 您能告诉我您的想法、为什么会发生这种情况、以及我如何克服这种情况。

    谢谢你。

    此致。

    法赫里

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

    请创建一个新帖子、因为这听起来像是与此对话的初始主题无关的另一个问题。

    -Mark