请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:TMS320F28377D Thread 中讨论的其他器件:C2000WARE
工具与软件:
两个28377D 器件通过串行端口通信。
通信参数配置如下:波特率设置为115200、RX FIFO 配置为8位、使用基于中断的方法执行通信。
发送器每次发送8个字节、当接收到第1帧(共8个字节)时操作正常、从第2次发送开始、接收过程中将出现数据偏移错误。
串行端口配置如下::
void InitSciBFIFO()
{
// ScibRegs.SCICCR.all = 0x0007; // 1 stop bit, No loopback
// // No parity,8 char bits,
// // async mode, idle-line protocol
ScibRegs.SCICCR.all = 0x0087; // 1 stop bit, No loopback
// No parity,8 char bits,
// async mode, idle-line protocol
ScibRegs.SCICTL1.all = 0x0003; // enable TX, RX, internal SCICLK,
// Disable RX ERR, SLEEP, TXWAKE
ScibRegs.SCICTL2.all = 0x0003;
//ScibRegs.SCICTL2.bit.TXINTENA = 0;
ScibRegs.SCICTL2.bit.RXBKINTENA = 1; //Enable SCIB _RX
//
// SCIA at 9600 baud
// @LSPCLK = 50 MHz (200 MHz SYSCLK) HBAUD = 0x02 and LBAUD = 0x8B.
// @LSPCLK = 30 MHz (120 MHz SYSCLK) HBAUD = 0x01 and LBAUD = 0x86.
// @LSPCLK = 25 MHz (100 MHz SYSCLK) HBAUD = 0x01 and LBAUD = 0x45.
ScibRegs.SCIHBAUD.all = 0x0000; // @LSPCLK = 50 MHz 115200
ScibRegs.SCILBAUD.all = 0x0036;
// ScibRegs.SCIHBAUD.all = 0x0000; // @LSPCLK = 50 MHz 1M
// ScibRegs.SCILBAUD.all = 0x0006;
ScibRegs.SCIFFTX.bit.TXFIFORESET = 0;
ScibRegs.SCIFFRX.bit.RXFIFORESET = 0;
ScibRegs.SCICTL1.all = 0x0023; // Relinquish SCI from Reset
// Enable SCIFIFO
ScibRegs.SCIFFTX.all = 0xF040; //Disable FIFO Using 4 Enable FIFO Using 6
ScibRegs.SCIFFRX.all = 0x2068; //FIFO interupter level 8 interrupter level == 5
ScibRegs.SCIFFCT.all = 0x0;
ScibRegs.SCIFFTX.bit.TXFFINTCLR = 1; //Avoid PowerUp DataTX
ScibRegs.SCIFFTX.bit.TXFFIENA = 0; //Avoid PowerUp DataTX
}中断处理
__interrupt void ScibRxfifo_isr(void)
{
volatile static Uint32 ScibInteruptimes = 0;
ScibInteruptimes++;
if (SCIB_Recdata.uStatus != FINISH)
{
while(ScibRegs.SCIFFRX.bit.RXFFST)
{
SCIB_Recdata.uData[SCIB_Recdata.uIndex++] = ScibRegs.SCIRXBUF.all&0xff;
}
//update sci recevie status and set interrupt interval.
SCIB_Recdata.uStatus = WORKING;
SCIB_Recdata.ticker = SCIB_Recdata.spacetime;
}
ScibRegs.SCIFFRX.bit.RXFFOVRCLR = 1; // Clear Overflow flag
ScibRegs.SCIFFRX.bit.RXFFINTCLR = 1; // Clear Interrupt flag
ScibRegs.SCIFFRX.bit.RXFIFORESET = 1;
// Issue PIE ack
PieCtrlRegs.PIEACK.all = PIEACK_GROUP9; // Issue PIE ACK PIEACK_GROUP9
}
具体示例如下:
当我发送 0x01 0x47 0x6A 0x00 0x00 0x00 0x00 0x55时

在接收器的中断函数中进行观察。

接收数据为 0x00 0x55 0x01 0x47 0x6A 0x00 0x00 0x00

上述配置已经应用于 DSP 和 ARM 之间的通信工程、在通信过程中没有问题。 但是、在调试两个 DSP 之间的通信时、您对解决这个问题有什么建议吗?