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.

[参考译文] SCI TX中断仅处理写入消息序列中的最后一条消息

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/583118/sci-tx-interrupt-only-handle-last-message-in-the-sequence-of-write-messages

主题中讨论的其他部件:TMS320F2.8335万

您好,

我正在为 SCI端口开发TMS320F2.8335万。

我已经开发了一个代码,它可以通过中断将char从TX线路传输到PC。 我在这里不是使用FIFO功能,而是使用过的标准SCI接口。

我的代码,如果我想通过TX线路发送两条连续消息,则仅最后一条消息已成功写入。

下面是相同的代码段。

----------------

char g_message[512]={0};
UINT16 g_index =0;

UINT16 g_messge_len = 0;

char x[]={"\r\ndddddddddafa dfbxd sgj@@$#@$@ fdgs ^^^&%$n"};
scia_sendline (x);

字符数据名称[]={"\n\n\r多米尔\n\r\n"};
scia_sendline (dataframe);

 

void scia_sendline(car *dataframe)

UINT16 I = 0;
while (dataframe[i]!='\0')

g_message[i]=数据流名称[i];
I++;
}
g_messge_len = i;
SciaRegs.SCITXBUF=g_message[g_index+];
}

void scia_init()

SciaRegs.SCICCR.ALL =0x0007;
SciaRegs.SCICTL1.all =0x0003;
SciaRegs.SCIHBAUD = 0x0001;
SciaRegs.SCILBAUD = 0x00E7;
SciaRegs.SCICTL2.bit.TXINTENA = 1;
SciaRegs.SCICTL1.all = 0x0023;
}

中断无效SCIA_TX_ISR(void)

如果(g_messge_len != g_index)
SciaRegs.SCITXBUF= g_message[g_index+];

PieCtrlRegs.PIEACK.ALL = PIEACK_group9;
}

请给我一些解决方案。 我需要从第一到最后的一系列消息。

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

    Bhoomil,

    您写入连续值时没有给SCI模块时间传输第一个值。 请记住,您设置的波特率决定了这种情况发生的速度。 要在消息传输完成时向用户指示,您可以查看TXRDY标志。 您可能尝试在此标志上设置中断,此标志也是一个选项。 选项如下:

    1.在主环路中为TXRDY标志写入消息,以检查是否可以再次传输

    2.设置设置TXRDY标志时发生的TXINT中断,并仅在此中断内传输。

    我建议您阅读 SCI用户指南

    此致,

    科迪