TI中文支持网
TI专业的中文技术问题搜集分享网站

28035 SCI串口通信问题

在用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相关的只读寄存器中。

赞(0)
未经允许不得转载:TI中文支持网 » 28035 SCI串口通信问题
分享到: 更多 (0)