在用28035做SCI串口通信时遇到了一个问题,我想通过SCI从28035像电脑串口发送DATA2[5]={0x1122, 0x3344, 0x5566, 0x7788, 0x99AA};
因为只能发送8bit因此我将DATA2[5]做了一个位移变换成DATA[10],然后通过SCI传送,程序如下:
DATA[0] = DATA1[0];
DATA[1] = DATA1[0]>>8;
DATA[2] = DATA1[1];
DATA[3] = DATA1[1]>>8;
DATA[4] = DATA1[2];
DATA[5] = DATA1[2]>>8;
DATA[6] = DATA1[3];
DATA[7] = DATA1[3]>>8;
DATA[8] = DATA1[4];
DATA[9] = DATA1[4]>>8;
for(k = 0; k<10; k++)
{
SciaRegs.SCITXBUF = DATA[k]; // 传送数据
}
/*============================SCI 通信程序=============================== */
void scia_fifo_init()
{
SciaRegs.SCICCR.all =0x0007;
SciaRegs.SCICTL1.all =0x0003;
SciaRegs.SCICTL2.bit.TXINTENA =1;
SciaRegs.SCICTL2.bit.RXBKINTENA =1;
SciaRegs.SCIHBAUD = 0x0000; //波特率为9600
SciaRegs.SCILBAUD = 0x00C2;
SciaRegs.SCICCR.bit.LOOPBKENA =0;
SciaRegs.SCIFFTX.all=0xC022;
SciaRegs.SCIFFRX.all=0xC022;
SciaRegs.SCIFFCT.all=0x00;
SciaRegs.SCICTL1.all =0x0023;
SciaRegs.SCIFFTX.bit.TXFIFOXRESET=1;
SciaRegs.SCIFFRX.bit.RXFIFORESET=1;
}
// Transmit a character from the SCI
void scia_xmit(Uint16 a)
{
SciaRegs.SCITXBUF=a;
}
但是每次通过串口调试助手只能接收到 22 88 77 AA 99, 其他的 11, 33, 44, 55, 66都从未收到过,请问这是怎么回事?肯定各位大哥帮忙看一下。
Johnson Chen1:
楼主可以先参考SCI的例程,修改为loopback模式,不用接电脑,看这时候C2000发送的数据和 接收到得数据是否一样,如果一样的话,再改为正常模式和电脑通讯。
在用28035做SCI串口通信时遇到了一个问题,我想通过SCI从28035像电脑串口发送DATA2[5]={0x1122, 0x3344, 0x5566, 0x7788, 0x99AA};
因为只能发送8bit因此我将DATA2[5]做了一个位移变换成DATA[10],然后通过SCI传送,程序如下:
DATA[0] = DATA1[0];
DATA[1] = DATA1[0]>>8;
DATA[2] = DATA1[1];
DATA[3] = DATA1[1]>>8;
DATA[4] = DATA1[2];
DATA[5] = DATA1[2]>>8;
DATA[6] = DATA1[3];
DATA[7] = DATA1[3]>>8;
DATA[8] = DATA1[4];
DATA[9] = DATA1[4]>>8;
for(k = 0; k<10; k++)
{
SciaRegs.SCITXBUF = DATA[k]; // 传送数据
}
/*============================SCI 通信程序=============================== */
void scia_fifo_init()
{
SciaRegs.SCICCR.all =0x0007;
SciaRegs.SCICTL1.all =0x0003;
SciaRegs.SCICTL2.bit.TXINTENA =1;
SciaRegs.SCICTL2.bit.RXBKINTENA =1;
SciaRegs.SCIHBAUD = 0x0000; //波特率为9600
SciaRegs.SCILBAUD = 0x00C2;
SciaRegs.SCICCR.bit.LOOPBKENA =0;
SciaRegs.SCIFFTX.all=0xC022;
SciaRegs.SCIFFRX.all=0xC022;
SciaRegs.SCIFFCT.all=0x00;
SciaRegs.SCICTL1.all =0x0023;
SciaRegs.SCIFFTX.bit.TXFIFOXRESET=1;
SciaRegs.SCIFFRX.bit.RXFIFORESET=1;
}
// Transmit a character from the SCI
void scia_xmit(Uint16 a)
{
SciaRegs.SCITXBUF=a;
}
但是每次通过串口调试助手只能接收到 22 88 77 AA 99, 其他的 11, 33, 44, 55, 66都从未收到过,请问这是怎么回事?肯定各位大哥帮忙看一下。
Jones Chen:
DATA[0] = DATA1[0]; DATA[1] = DATA1[0]>>8; DATA[2] = DATA1[1]; DATA[3] = DATA1[1]>>8; DATA[4] = DATA1[2]; DATA[5] = DATA1[2]>>8; DATA[6] = DATA1[3]; DATA[7] = DATA1[3]>>8; DATA[8] = DATA1[4]; DATA[9] = DATA1[4]>>8;
这个应该都是 DATA2[]吧。
另外,建议楼主改成
DATA[0] = DATA2[0]&0x00FF;
DATA[1] = (DATA2[0]&0xFF00)>>8);
在用28035做SCI串口通信时遇到了一个问题,我想通过SCI从28035像电脑串口发送DATA2[5]={0x1122, 0x3344, 0x5566, 0x7788, 0x99AA};
因为只能发送8bit因此我将DATA2[5]做了一个位移变换成DATA[10],然后通过SCI传送,程序如下:
DATA[0] = DATA1[0];
DATA[1] = DATA1[0]>>8;
DATA[2] = DATA1[1];
DATA[3] = DATA1[1]>>8;
DATA[4] = DATA1[2];
DATA[5] = DATA1[2]>>8;
DATA[6] = DATA1[3];
DATA[7] = DATA1[3]>>8;
DATA[8] = DATA1[4];
DATA[9] = DATA1[4]>>8;
for(k = 0; k<10; k++)
{
SciaRegs.SCITXBUF = DATA[k]; // 传送数据
}
/*============================SCI 通信程序=============================== */
void scia_fifo_init()
{
SciaRegs.SCICCR.all =0x0007;
SciaRegs.SCICTL1.all =0x0003;
SciaRegs.SCICTL2.bit.TXINTENA =1;
SciaRegs.SCICTL2.bit.RXBKINTENA =1;
SciaRegs.SCIHBAUD = 0x0000; //波特率为9600
SciaRegs.SCILBAUD = 0x00C2;
SciaRegs.SCICCR.bit.LOOPBKENA =0;
SciaRegs.SCIFFTX.all=0xC022;
SciaRegs.SCIFFRX.all=0xC022;
SciaRegs.SCIFFCT.all=0x00;
SciaRegs.SCICTL1.all =0x0023;
SciaRegs.SCIFFTX.bit.TXFIFOXRESET=1;
SciaRegs.SCIFFRX.bit.RXFIFORESET=1;
}
// Transmit a character from the SCI
void scia_xmit(Uint16 a)
{
SciaRegs.SCITXBUF=a;
}
但是每次通过串口调试助手只能接收到 22 88 77 AA 99, 其他的 11, 33, 44, 55, 66都从未收到过,请问这是怎么回事?肯定各位大哥帮忙看一下。
Sam Xie:
回复 Johnson Chen1:
我将数据读取循环中加入了3ms左右的延时,就可以读取到正确的数据了,不知道是为何?
for(k = 0; k<10; k++) { SciaRegs.SCITXBUF = DATA[k]; // 传送数据 delay_loop(); delay_loop(); delay_loop(); }
在用28035做SCI串口通信时遇到了一个问题,我想通过SCI从28035像电脑串口发送DATA2[5]={0x1122, 0x3344, 0x5566, 0x7788, 0x99AA};
因为只能发送8bit因此我将DATA2[5]做了一个位移变换成DATA[10],然后通过SCI传送,程序如下:
DATA[0] = DATA1[0];
DATA[1] = DATA1[0]>>8;
DATA[2] = DATA1[1];
DATA[3] = DATA1[1]>>8;
DATA[4] = DATA1[2];
DATA[5] = DATA1[2]>>8;
DATA[6] = DATA1[3];
DATA[7] = DATA1[3]>>8;
DATA[8] = DATA1[4];
DATA[9] = DATA1[4]>>8;
for(k = 0; k<10; k++)
{
SciaRegs.SCITXBUF = DATA[k]; // 传送数据
}
/*============================SCI 通信程序=============================== */
void scia_fifo_init()
{
SciaRegs.SCICCR.all =0x0007;
SciaRegs.SCICTL1.all =0x0003;
SciaRegs.SCICTL2.bit.TXINTENA =1;
SciaRegs.SCICTL2.bit.RXBKINTENA =1;
SciaRegs.SCIHBAUD = 0x0000; //波特率为9600
SciaRegs.SCILBAUD = 0x00C2;
SciaRegs.SCICCR.bit.LOOPBKENA =0;
SciaRegs.SCIFFTX.all=0xC022;
SciaRegs.SCIFFRX.all=0xC022;
SciaRegs.SCIFFCT.all=0x00;
SciaRegs.SCICTL1.all =0x0023;
SciaRegs.SCIFFTX.bit.TXFIFOXRESET=1;
SciaRegs.SCIFFRX.bit.RXFIFORESET=1;
}
// Transmit a character from the SCI
void scia_xmit(Uint16 a)
{
SciaRegs.SCITXBUF=a;
}
但是每次通过串口调试助手只能接收到 22 88 77 AA 99, 其他的 11, 33, 44, 55, 66都从未收到过,请问这是怎么回事?肯定各位大哥帮忙看一下。
Jones Chen:
回复 Sam Xie:
可能是你发送的太快了,你可以在FIFO中查询一下发送FIFO的填充情况,根据这个情况来判断什么时候进行发送。
有一个发送或者接受FIFO的Length寄存器。还有可以查看发送缓冲是否BUSY等,应该在Status相关的只读寄存器中。