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

28027上电串口接收报错

问题在“F28027串口FIFO收发中断问题”有描述。

写到flash后,重新上电,串口接收报错,导致无法接收数据,发送正常。
报错:寄存器SCIRXST-RX ERROR 1,寄存器SCIRXBUF-SCIFFFE/SCIFFPE 1

按一下复位按钮,接收就正常了。这是啥情况哦??有兄弟碰到过没有?
串口初始化代码:
void InitSci(void)
{
  // Initialize SCI-A:
  SciaRegs.SCICCR.all = 0x0007;   // 1 stop bit,  No loopback
                                  // No parity,8 char bits,
                                  // async mode, idle-line protocol
  SciaRegs.SCICTL1.all = 0x0003;  // enable TX, RX, internal SCICLK,
                                  // Disable RX ERR, SLEEP, TXWAKE
  // Disable RXRDY/BRKDT/TXRDY interrupt
  SciaRegs.SCICTL2.bit.TXINTENA = 0;
  SciaRegs.SCICTL2.bit.RXBKINTENA = 0;

  SciaRegs.SCIHBAUD = 0x0000;
  SciaRegs.SCILBAUD = SCI_PRD;   // 38400

  // FIFO enable configure
  SciaRegs.SCIFFTX.all = 0xC020;
  SciaRegs.SCIFFRX.all = 0x0021;
  // Disable FIFO interrupt
  SciaRegs.SCIFFTX.bit.TXFFIENA = 0;
  SciaRegs.SCIFFRX.bit.RXFFIENA = 0;
  SciaRegs.SCIFFCT.all = 0x00;

  SciaRegs.SCICTL1.bit.SWRESET = 1;     // Relinquish SCI from Reset
  SciaRegs.SCIFFTX.bit.TXFIFOXRESET = 1;
  SciaRegs.SCIFFRX.bit.RXFIFORESET  = 1;
}

dirtwillfly:

有没有可能是上电复位电路有问题?

问题在“F28027串口FIFO收发中断问题”有描述。

写到flash后,重新上电,串口接收报错,导致无法接收数据,发送正常。
报错:寄存器SCIRXST-RX ERROR 1,寄存器SCIRXBUF-SCIFFFE/SCIFFPE 1

按一下复位按钮,接收就正常了。这是啥情况哦??有兄弟碰到过没有?
串口初始化代码:
void InitSci(void)
{
  // Initialize SCI-A:
  SciaRegs.SCICCR.all = 0x0007;   // 1 stop bit,  No loopback
                                  // No parity,8 char bits,
                                  // async mode, idle-line protocol
  SciaRegs.SCICTL1.all = 0x0003;  // enable TX, RX, internal SCICLK,
                                  // Disable RX ERR, SLEEP, TXWAKE
  // Disable RXRDY/BRKDT/TXRDY interrupt
  SciaRegs.SCICTL2.bit.TXINTENA = 0;
  SciaRegs.SCICTL2.bit.RXBKINTENA = 0;

  SciaRegs.SCIHBAUD = 0x0000;
  SciaRegs.SCILBAUD = SCI_PRD;   // 38400

  // FIFO enable configure
  SciaRegs.SCIFFTX.all = 0xC020;
  SciaRegs.SCIFFRX.all = 0x0021;
  // Disable FIFO interrupt
  SciaRegs.SCIFFTX.bit.TXFFIENA = 0;
  SciaRegs.SCIFFRX.bit.RXFFIENA = 0;
  SciaRegs.SCIFFCT.all = 0x00;

  SciaRegs.SCICTL1.bit.SWRESET = 1;     // Relinquish SCI from Reset
  SciaRegs.SCIFFTX.bit.TXFIFOXRESET = 1;
  SciaRegs.SCIFFRX.bit.RXFIFORESET  = 1;
}

user3832255:

回复 dirtwillfly:

不能完全排除,但是可能性还是比较小。

原因有2:

1、上电复位后,除了串口接收寄存器错误外,发送正常,其他程序暂时没有发现问题。

2、用的是C2000 Launchpad开发板,从TI官方买的。

所以,暂时没有去怀疑复位电路,谢谢!

问题在“F28027串口FIFO收发中断问题”有描述。

写到flash后,重新上电,串口接收报错,导致无法接收数据,发送正常。
报错:寄存器SCIRXST-RX ERROR 1,寄存器SCIRXBUF-SCIFFFE/SCIFFPE 1

按一下复位按钮,接收就正常了。这是啥情况哦??有兄弟碰到过没有?
串口初始化代码:
void InitSci(void)
{
  // Initialize SCI-A:
  SciaRegs.SCICCR.all = 0x0007;   // 1 stop bit,  No loopback
                                  // No parity,8 char bits,
                                  // async mode, idle-line protocol
  SciaRegs.SCICTL1.all = 0x0003;  // enable TX, RX, internal SCICLK,
                                  // Disable RX ERR, SLEEP, TXWAKE
  // Disable RXRDY/BRKDT/TXRDY interrupt
  SciaRegs.SCICTL2.bit.TXINTENA = 0;
  SciaRegs.SCICTL2.bit.RXBKINTENA = 0;

  SciaRegs.SCIHBAUD = 0x0000;
  SciaRegs.SCILBAUD = SCI_PRD;   // 38400

  // FIFO enable configure
  SciaRegs.SCIFFTX.all = 0xC020;
  SciaRegs.SCIFFRX.all = 0x0021;
  // Disable FIFO interrupt
  SciaRegs.SCIFFTX.bit.TXFFIENA = 0;
  SciaRegs.SCIFFRX.bit.RXFFIENA = 0;
  SciaRegs.SCIFFCT.all = 0x00;

  SciaRegs.SCICTL1.bit.SWRESET = 1;     // Relinquish SCI from Reset
  SciaRegs.SCIFFTX.bit.TXFIFOXRESET = 1;
  SciaRegs.SCIFFRX.bit.RXFIFORESET  = 1;
}

Eric Ma:

回复 user3832255:

elkite,

建议你直接检测一下芯片的接收引脚,应该会有一个电平的波动,有可能是xds100芯片导致的。

可以在上电后清除一下串口接收缓存。

Eric

问题在“F28027串口FIFO收发中断问题”有描述。

写到flash后,重新上电,串口接收报错,导致无法接收数据,发送正常。
报错:寄存器SCIRXST-RX ERROR 1,寄存器SCIRXBUF-SCIFFFE/SCIFFPE 1

按一下复位按钮,接收就正常了。这是啥情况哦??有兄弟碰到过没有?
串口初始化代码:
void InitSci(void)
{
  // Initialize SCI-A:
  SciaRegs.SCICCR.all = 0x0007;   // 1 stop bit,  No loopback
                                  // No parity,8 char bits,
                                  // async mode, idle-line protocol
  SciaRegs.SCICTL1.all = 0x0003;  // enable TX, RX, internal SCICLK,
                                  // Disable RX ERR, SLEEP, TXWAKE
  // Disable RXRDY/BRKDT/TXRDY interrupt
  SciaRegs.SCICTL2.bit.TXINTENA = 0;
  SciaRegs.SCICTL2.bit.RXBKINTENA = 0;

  SciaRegs.SCIHBAUD = 0x0000;
  SciaRegs.SCILBAUD = SCI_PRD;   // 38400

  // FIFO enable configure
  SciaRegs.SCIFFTX.all = 0xC020;
  SciaRegs.SCIFFRX.all = 0x0021;
  // Disable FIFO interrupt
  SciaRegs.SCIFFTX.bit.TXFFIENA = 0;
  SciaRegs.SCIFFRX.bit.RXFFIENA = 0;
  SciaRegs.SCIFFCT.all = 0x00;

  SciaRegs.SCICTL1.bit.SWRESET = 1;     // Relinquish SCI from Reset
  SciaRegs.SCIFFTX.bit.TXFIFOXRESET = 1;
  SciaRegs.SCIFFRX.bit.RXFIFORESET  = 1;
}

user3832255:

回复 Eric Ma:

清除一下串口接收缓存,清哪个寄存器,请Eric Ma 明示。。

28027看了一下,好像没有专门清接收缓存的寄存器。

问题在“F28027串口FIFO收发中断问题”有描述。

写到flash后,重新上电,串口接收报错,导致无法接收数据,发送正常。
报错:寄存器SCIRXST-RX ERROR 1,寄存器SCIRXBUF-SCIFFFE/SCIFFPE 1

按一下复位按钮,接收就正常了。这是啥情况哦??有兄弟碰到过没有?
串口初始化代码:
void InitSci(void)
{
  // Initialize SCI-A:
  SciaRegs.SCICCR.all = 0x0007;   // 1 stop bit,  No loopback
                                  // No parity,8 char bits,
                                  // async mode, idle-line protocol
  SciaRegs.SCICTL1.all = 0x0003;  // enable TX, RX, internal SCICLK,
                                  // Disable RX ERR, SLEEP, TXWAKE
  // Disable RXRDY/BRKDT/TXRDY interrupt
  SciaRegs.SCICTL2.bit.TXINTENA = 0;
  SciaRegs.SCICTL2.bit.RXBKINTENA = 0;

  SciaRegs.SCIHBAUD = 0x0000;
  SciaRegs.SCILBAUD = SCI_PRD;   // 38400

  // FIFO enable configure
  SciaRegs.SCIFFTX.all = 0xC020;
  SciaRegs.SCIFFRX.all = 0x0021;
  // Disable FIFO interrupt
  SciaRegs.SCIFFTX.bit.TXFFIENA = 0;
  SciaRegs.SCIFFRX.bit.RXFFIENA = 0;
  SciaRegs.SCIFFCT.all = 0x00;

  SciaRegs.SCICTL1.bit.SWRESET = 1;     // Relinquish SCI from Reset
  SciaRegs.SCIFFTX.bit.TXFIFOXRESET = 1;
  SciaRegs.SCIFFRX.bit.RXFIFORESET  = 1;
}

Eric Ma:

回复 user3832255:

elkite,

有没有测一下上电的时候 rx引脚有没有干扰呢?

可以在初始完后先读取接收寄存器,就是清缓冲区了。

Eric

问题在“F28027串口FIFO收发中断问题”有描述。

写到flash后,重新上电,串口接收报错,导致无法接收数据,发送正常。
报错:寄存器SCIRXST-RX ERROR 1,寄存器SCIRXBUF-SCIFFFE/SCIFFPE 1

按一下复位按钮,接收就正常了。这是啥情况哦??有兄弟碰到过没有?
串口初始化代码:
void InitSci(void)
{
  // Initialize SCI-A:
  SciaRegs.SCICCR.all = 0x0007;   // 1 stop bit,  No loopback
                                  // No parity,8 char bits,
                                  // async mode, idle-line protocol
  SciaRegs.SCICTL1.all = 0x0003;  // enable TX, RX, internal SCICLK,
                                  // Disable RX ERR, SLEEP, TXWAKE
  // Disable RXRDY/BRKDT/TXRDY interrupt
  SciaRegs.SCICTL2.bit.TXINTENA = 0;
  SciaRegs.SCICTL2.bit.RXBKINTENA = 0;

  SciaRegs.SCIHBAUD = 0x0000;
  SciaRegs.SCILBAUD = SCI_PRD;   // 38400

  // FIFO enable configure
  SciaRegs.SCIFFTX.all = 0xC020;
  SciaRegs.SCIFFRX.all = 0x0021;
  // Disable FIFO interrupt
  SciaRegs.SCIFFTX.bit.TXFFIENA = 0;
  SciaRegs.SCIFFRX.bit.RXFFIENA = 0;
  SciaRegs.SCIFFCT.all = 0x00;

  SciaRegs.SCICTL1.bit.SWRESET = 1;     // Relinquish SCI from Reset
  SciaRegs.SCIFFTX.bit.TXFIFOXRESET = 1;
  SciaRegs.SCIFFRX.bit.RXFIFORESET  = 1;
}

user3832255:

回复 Eric Ma:

手头暂时没有示波器,没有测。

初始化完后,读一下接收寄存器,接收还是报错。

tmp = (UINT8)SciaRegs.SCIRXBUF.bit.RXDT;

改成:

for(i=0;i<4;i++)

{

   tmp = (UINT8)SciaRegs.SCIRXBUF.bit.RXDT;

}

还是不行。

把3个寄存器发上来后发现:

SciA.p_sen[0] = (UINT8)SciaRegs.SCIRXBUF.bit.RXDT; SciA.p_sen[1] = (UINT8)SciaRegs.SCIRXBUF.bit.SCIFFPE; SciA.p_sen[2] = (UINT8)SciaRegs.SCIRXBUF.bit.SCIFFPE; SciA.p_sen[3] = (UINT8)SciaRegs.SCIRXST.bit.RXERROR;

0x6F,0x01,0x01,0x01

赞(0)
未经允许不得转载:TI中文支持网 » 28027上电串口接收报错
分享到: 更多 (0)