This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

28377SCIC模块帧格式错误



调试28377的通信模块,使用scib发送数据,scia和scic接收数据。接收数据使用中断模式,scia可以接收到正确数据,scic接收数据会发生帧格式错误(读取scic的SCIRXBUF.all寄存器的数值是-32768)。scia和scic的模块配置完全一样,调整波特率后也发生同样错误,请问是怎么回事?需要怎么调整?

  • 请问您使用的是官方开发板,launchpad还是controlcard?能否给出工程代码?谢谢
  • 遇到同样的问题
    同样的配置,SCIA和SCIB可以正常工作,但是SCIC和SCID却不能正常工作
    //
    // Defines
    //
    #define SCIC_CPU_FREQ 200E6
    #define SCIC_LSPCLK_FREQ SCIC_CPU_FREQ/4
    #define SCIC_SCI_FREQ 192E2
    #define SCIC_SCI_PRD (SCIC_LSPCLK_FREQ/(SCIC_SCI_FREQ*8))-1

    void scic_init()
    {
    uint16_t BRR = SCIC_SCI_PRD;
    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.bit.TXINTENA = 0;
    ScicRegs.SCICTL2.bit.RXBKINTENA = 1;
    ScicRegs.SCIHBAUD.all = (uint8_t)(BRR >> 8);
    ScicRegs.SCILBAUD.all = (uint8_t)(BRR >> 0);

    ScicRegs.SCICCR.bit.LOOPBKENA = 0; // Enable loop back
    ScicRegs.SCIFFTX.all = 0xC020;
    ScicRegs.SCIFFRX.all = 0x0020;
    ScicRegs.SCIFFCT.all = 0x00;

    ScicRegs.SCICTL1.all = 0x0023; // Relinquish SCI from Reset
    ScicRegs.SCIFFTX.bit.TXFIFORESET = 1;
    ScicRegs.SCIFFRX.bit.RXFIFORESET = 1;
    }

    //
    // scicTxFifoIsr - SCIC Transmit FIFO ISR
    //
    interrupt void scicTxFifoIsr(void)
    {
    if(comm.txpos < comm.txlen)
    {
    ScicRegs.SCITXBUF.all = comm.txbuf[comm.txpos++];
    }
    else
    {
    while(ScicRegs.SCICTL2.bit.TXEMPTY == 0);
    ScicRegs.SCICTL1.bit.TXENA = 0;
    ScicRegs.SCICTL1.bit.RXENA = 1;
    ScicRegs.SCICTL2.bit.TXINTENA = 0;
    ScicRegs.SCICTL2.bit.RXBKINTENA = 1;
    comm.txpos = 0;
    comm.txlen = 0;
    }

    ScicRegs.SCIFFTX.bit.TXFFINTCLR = 1; // Clear SCI Interrupt flag
    PieCtrlRegs.PIEACK.all |= 0x080; // Issue PIE ACK
    }

    //
    // scicRxFifoIsr - SCIC Receive FIFO ISR
    //
    interrupt void scicRxFifoIsr(void)
    {
    sFifoIn(&fifo, (uint8_t)(ScicRegs.SCIRXBUF.all));

    ScicRegs.SCIFFRX.bit.RXFFOVRCLR = 1; // Clear Overflow flag
    ScicRegs.SCIFFRX.bit.RXFFINTCLR = 1; // Clear Interrupt flag

    PieCtrlRegs.PIEACK.all |= 0x080; // Issue PIE ack
    }
    以上是SCIC的配置初始化函数和中断函数,请教哪里有问题,该怎么解决?