主题中讨论的其他器件:LAUNCHXL-F28379D
尊敬的 TI 专家:
我正在使用 LaunchxL-F28379D 板。
我想要的是获取连续数据并发送带有 SCIB 的 ACK 或 NAK。
我在轮询模式、非 FIFO 中断和 FIFO 中断中对此进行了测试。
但是、在所有情况下、我都无法接收整个数据。
如果使用非 FIFO 中断、则只有在 PC 应用程序发送数据时等待200ms 以上才可以接收所有数据。
但 SCIB 上无法接收到无等待或100ms 等待的数据。
在不同的操作模式下、此症状是相同的。
在 FIFO 中断模式下、我将 FIFO 电平设置为2、并且可以成功接收两个连续字节、但如果前两个字节和后两个字节之间的等待时间不足、接下来的两个字节将被中断。
下面是我的非 FIFI 中断模式代码。
请任何人就我犯了什么错误向我提出建议。
在 main 函数中
Device_init();
Device_initGPIO();
//
// GPIO19 is the SCI Rx pin.
//
GPIO_setMasterCore(19, GPIO_CORE_CPU1);
GPIO_setPinConfig(GPIO_19_SCIRXDB);
GPIO_setDirectionMode(19, GPIO_DIR_MODE_IN);
GPIO_setPadConfig(19, GPIO_PIN_TYPE_STD);
GPIO_setQualificationMode(19, GPIO_QUAL_ASYNC);
//
// GPIO18 is the SCI Tx pin.
//
GPIO_setMasterCore(18, GPIO_CORE_CPU1);
GPIO_setPinConfig(GPIO_18_SCITXDB);
GPIO_setDirectionMode(18, GPIO_DIR_MODE_OUT);
GPIO_setPadConfig(18, GPIO_PIN_TYPE_STD);
GPIO_setQualificationMode(18, GPIO_QUAL_ASYNC);
Interrupt_initModule();
Interrupt_initVectorTable();
Interrupt_register(INT_SCIB_RX, scibRXFIFOISR);
setSCIB();
Interrupt_enable(INT_SCIB_RX);
Interrupt_clearACKGroup(INTERRUPT_ACK_GROUP9);
EINT;
ERTM;
for(;;)
{
}
在 setSCIB()中
void setSCIB(void)
{
SCI_performSoftwareReset(SCIB_BASE);
//
// Configure SCIA for echoback.
//
SCI_setConfig(SCIB_BASE, DEVICE_LSPCLK_FREQ, 9600, (SCI_CONFIG_WLEN_8 |
SCI_CONFIG_STOP_TWO |
SCI_CONFIG_PAR_NONE));
SCI_resetChannels(SCIB_BASE);
SCI_clearInterruptStatus(SCIB_BASE, SCI_INT_RXRDY_BRKDT);
SCI_enableModule(SCIB_BASE);
SCI_performSoftwareReset(SCIB_BASE);
SCI_enableInterrupt(SCIB_BASE, (SCI_INT_RXRDY_BRKDT));
}
在 scibRXFIFOISR()中
__interrupt void scibRXFIFOISR(void)
{
uint16_t i;
uint16_t rcvChar[2];
uint16_t fifoLevel;
rcvdData = SCI_readCharBlockingNonFIFO(SCIB_BASE);
SCI_clearOverflowStatus(SCIB_BASE);
SCI_clearInterruptStatus(SCIB_BASE, SCI_INT_RXRDY_BRKDT);
//
// Issue PIE ack
//
Interrupt_clearACKGroup(INTERRUPT_ACK_GROUP9);
}
提前感谢您。
此致、
James。