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.

28377S SCIC模块不正常工作



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

//
// 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的配置初始化函数和中断函数,请教哪里有问题,该怎么解决?