打印

请教TMS320F2812 SCI发送延迟问题(不能立即发送)

[复制链接]
2196|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
TMS320F2812通过SCIA向PC发送数据,PC用串口助手接收,PC接收总是延后2个字符。代码如下:
char *tmp;
tmp = "123456789";
Scia_Putstring(tmp, strlen_2812(tmp));
……………………………………
// ===========================================
void Scia_Putchar(unsigned char buf)
{
  //while (SciaRegs.SCICTL2.bit.TXRDY == 0){}
  while (SciaRegs.SCIFFTX.bit.TXFFST != 0) {}
  SciaRegs.SCITXBUF = buf;
}
// ============================================
void Scia_Putstring(const char * pBuf, unsigned int uLen)
{
  unsigned int i;
  for(i=0; i< uLen; i++)
  {
    if(pBuf == '\n')
    {
      Scia_Putchar('\r');
    }
    Scia_Putchar(pBuf);
  }
}
单步执行:
(1)“1”和“2”后,串口助手收到字节为0;
(2)“2”发送完后,SCIFFTX的SCIFFTX位一直为1,表示发送FIFO内有数据。一直在while (SciaRegs.SCIFFTX.bit.TXFFST != 0) {}等待
(3)跳出while循环,发送“3”的时候,串口助手收到1;发送4的时候,收到2,依次类推。
(4)“8”和“9”总是收不到。
下图是“2”发送完的截图(CCS3.3)。
请教一下怎样才能让2812发送完单个字符后,PC端马上接收到?

相关帖子

沙发
warcraftiii|  楼主 | 2012-8-10 17:21 | 只看该作者
SCI初始化:
void InitSci(void)
{
        // Initialize SCI-A:
       
        EALLOW;
        GpioMuxRegs.GPFMUX.all = 0x0030;  // GPIO to be SCIA
        EDIS;

        SciaRegs.SCIFFTX.all=0xE040;
        SciaRegs.SCIFFRX.all=0x204f;
        SciaRegs.SCIFFCT.all=0x0;
      
        SciaRegs.SCICCR.all = 0x07;        // 1 bit stop, disable parity, idle mode, 8 bits data
       
        SciaRegs.SCICTL1.all = 0x03; // enable TX, receive data buffer in SCIRXBUF
        //SciaRegs.SCICTL2.all = 0x03; //enable RXRDY and TXRDY interrupt
        SciaRegs.SCICTL2.all = 0x0;   // disable RXRDY and TXRDY interrupt
                                                   //2010, comment
        SciaRegs.SCIHBAUD = 0x00;    /* SCI=LSPCLK/[(BAUD+1)*8] , LSPCLK defined in LOSPCP*/
        SciaRegs.SCILBAUD = 0xF3;    /* SCI=LSPCLK/[(f3+1)*8] , LSPCLK=SYSCLKOUT/4 , SYSCLKOUT = 150Mhz ? */
                                                  /* SCI ~ 19211 */
        SciaRegs.SCICTL1.all = 0x23;  // Enable SCI after reset

}

使用特权

评论回复
板凳
warcraftiii|  楼主 | 2012-8-13 09:58 | 只看该作者
简单说, 就是SICA发送tmp:
char *tmp;
tmp = "123456789";
Scia_Putstring(tmp, strlen_2812(tmp));
(1)单步执行,2812发送“1”和“2”后,PC收不到数据。
(2)2812发送“3”后,PC收到“1”。
(3)Scia_Putstring(tmp, strlen_2812(tmp));执行完毕后,PC收不到“8”和“9”。要等SCIA再次发送数据时,PC才能收到“8”和“9”
(4)无论是否启用SCI的FIFO,都是上述现象。
(5)SCIA的所有中断都已禁用。
为什么会产生这个现象?在其他类型单片机上的串口是可以发送后PC立即收到的。
怎样才能让2812发送完一个字符后,PC端立即收到这个字符呢?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

56

帖子

1

粉丝