Thread 中讨论的其他器件:C2000WARE
工具与软件:
我已将 SYSCLK 配置为100MHz、并将 SCI 波特率配置为4,166,667。 我已经启用了 SCI TX FIFO、并在 ISR 中一次将2个字节加载到 FIFO 中。 无论我使用的 FIFO 级别是0、1还是2、都是如此。 传输不连续、并且2个字节之间始终存在一些死区时间。 如下图所示。
我目标的回复是持续的、对于 C2000来说、似乎没有问题。 此外、一旦将波特率减半、传输就变得连续了。
您有什么有关查看以及如何解决此问题的建议吗、尤其是因为 SCI 不支持 DMA?
BTW 我使用的是 C2000Ware 5.2.0。

void mySCI0_init(){
SCI_clearInterruptStatus(mySCI0_BASE, SCI_INT_RXFF | SCI_INT_TXFF | SCI_INT_FE | SCI_INT_OE | SCI_INT_PE | SCI_INT_RXERR | SCI_INT_RXRDY_BRKDT | SCI_INT_TXRDY);
SCI_clearOverflowStatus(mySCI0_BASE);
SCI_resetTxFIFO(mySCI0_BASE);
SCI_resetRxFIFO(mySCI0_BASE);
SCI_resetChannels(mySCI0_BASE);
SCI_setConfig(mySCI0_BASE, DEVICE_LSPCLK_FREQ, 4125000, (SCI_CONFIG_WLEN_8|SCI_CONFIG_STOP_ONE|SCI_CONFIG_PAR_NONE));
SCI_disableLoopback(mySCI0_BASE);
SCI_performSoftwareReset(mySCI0_BASE);
SCI_enableInterrupt(mySCI0_BASE, SCI_INT_RXFF | SCI_INT_TXFF);
SCI_setFIFOInterruptLevel(mySCI0_BASE, SCI_FIFO_TX0, SCI_FIFO_RX2);
SCI_enableFIFO(mySCI0_BASE);
SCI_enableModule(mySCI0_BASE);
}
//
// SCI0 TX ISR
//
__interrupt void INT_mySCI0_TX_ISR(void)
{
uint16_t char_tx[2];
if(xmtCount < xmtXferSize) {
char_tx[0] = (ledXmtBuffer[BUS1][xmtCount] & 0xFF00) >> 8;
char_tx[1] = (ledXmtBuffer[BUS1][xmtCount] & 0x00FF);
SCI_writeCharArray(mySCI0_BASE, char_tx, 2);
xmtCount++;
}
else {
// Signal to application the transfer is done
xmtDone[BUS1] = 1;
Interrupt_disable(INT_mySCI0_TX);
}
//
// Acknowledge this interrupt to receive more interrupts
//
SCI_clearInterruptStatus(mySCI0_BASE, SCI_INT_TXFF);
Interrupt_clearACKGroup(INTERRUPT_ACK_GROUP9);
return;
}
