转载需附上源地址:https://blog.csdn.net/weixin_42226781/article/details/103747574
断开握手协议实现结果:
1)本身可以正常收发数据
2)当收到十六进制的11时,则断开通信
3)直到收到十六进制的aa时,又可以正常收发数据
#include "DSP2833x_Device.h"
#include "DSP2833x_Examples.h"
void scic_init(void);
unsigned int j;
unsigned int i;
unsigned int Sci_VarRx[100];
unsigned int mark;
void main()
{
InitSysCtrl();
InitScicGpio();
InitSci();
InitPieCtrl();
IER = 0x0000;
IFR = 0x0000;
DINT;
InitPieVectTable();
scic_init();
for(j = 0;j < 100;j++)
{
Sci_VarRx[j] = 0;
}
j = 0;
mark = 0;
for(;;)
{
if((ScicRegs.SCICTL2.bit.TXRDY == 1)&&(mark==1))
{
{
ScicRegs.SCITXBUF = Sci_VarRx[j];
j++;
}
j = 0;
mark = 0;
}
if(ScicRegs.SCIRXST.bit.RXRDY == 1)
{
Sci_VarRx[j] = ScicRegs.SCIRXBUF.all;
mark = 1;
if(Sci_VarRx[j] == 0x0011)
{
do{
mark = 0;
Sci_VarRx[j] = ScicRegs.SCIRXBUF.all;
}while(Sci_VarRx[j] != 0x00aa);
Sci_VarRx[j] = ScicRegs.SCIRXBUF.all;
mark = 1;
}
j = 0;
}
}
}
void scic_init()
{
ScicRegs.SCICCR.all =0x0007; // 1 stop bit, No loopback //配置通讯协议 // No parity,8 char bits, // async mode, idle-line protocol
ScicRegs.SCICTL1.all =0x0003; // enable TX, RX, internal SCICLK, // Disable RX ERR, SLEEP, TXWAKE
ScicRegs.SCICTL2.all =0x0003;
ScicRegs.SCICTL1.bit.TXENA = 1;
ScicRegs.SCICTL1.bit.RXENA = 1;
#if (CPU_FRQ_150MHZ)
ScicRegs.SCIHBAUD =0x0001; // 9600 baud @LSPCLK = 37.5MHz.
ScicRegs.SCILBAUD =0x00E7;
#endif
#if (CPU_FRQ_100MHZ)
ScicRegs.SCIHBAUD =0x0001; // 9600 baud @LSPCLK = 20MHz.
ScicRegs.SCILBAUD =0x0044;
#endif
ScicRegs.SCICCR.bit.LOOPBKENA = 0; // disable loop back
ScicRegs.SCICTL1.all =0x0023; // Relinquish SCI from Reset
}