您好! 我将通过 UART 将 MSP432微控制器与 WIZ550S2E 串行转以太网转换器相连。 我的程序在中断中工作、并使用16字节消息与 TCP 服务器(Hercules)进行通信。 当一条消息被接收时、ISR 唤醒 MCU、然后 MCU 对消息进行解释并发送一个响应(例如:接收 hello 并以 ACK - 16字节编码消息进行响应)。
问题是、有时(在从服务器发送10-20 (有时更少)个 hello 消息之后) MCU 不响应。 我可以确认消息已被接收、因为我使用逻辑分析仪将其可视化、并且当 MCU 不响应时、消息存储在 RX 缓冲器中。
我可以看到消息存储在 RX 缓冲区中、因为我看到 MCU 不响应并检查 RX 缓冲区内容后暂停程序执行。
我将这种情况解释为 MCU 在收到消息后不执行代码或不从睡眠状态唤醒。 这是我的中断代码:
void EUSCIA0_IRQHandler (void) { unsigned int status; STATUS = MAP_SPI_getEnabledInterruptStatus (EUSCI_A0_BASE); MAP_SPI_clearInterruptFlag (EUSCI_A0_BASE、STATUS); if (extension1_spiMode = true) { IF (STATUS 和 EUSCI_A_SPI_Transmit 中断) { extension1SpiTxFlag = true; MAP_Interrupt_disableSlepOnIsrExit(); 返回; } IF (STATUS & EUSCI_A_SPI_Receive_interrupt) { extension1SpiRxFlag = true; MAP_Interrupt_disableSlepOnIsrExit(); 返回; } } 其他 { IF (STATUS & EUSCI_A_UART_Transmit _INTERRUPT) { extension1UartTxFlag = true; MAP_Interrupt_disableSlepOnIsrExit(); 返回; } IF (STATUS & EUSCI_A_UART_receive_interrupt) { extension1UartRxFlag = true; IF (WIZ550S2E_EXTENSION_IN_USE) { //if (extensionManager_rxFined=false) //{ extensionManager_rxBuffer[extensionManager_rxBytes]= MAP_UART_receiveData (EUSCI_A0_BASE); extensionManager_rxBytes++; IF (WIZ550S2E_isInCommandMode = true) { if (extensionManager_rxBuffer[extensionManager_rxBytes-1]== extensionManager_rxTerminator)//'\n' { extensionManager_rxFined= true; MAP_Interrupt_disableSlepOnIsrExit(); 返回; } } 其他 {//"[R、0、16]\r\nabcdefghifdmf\r\n";16字节消息+ 10字节消息+\r\n if (extensionManager_rxBuffer[extensionManager_rxBytes-1]== extensionManager_rxTerminator)//'\n' { WIZ550S2E_endLineCount++; } IF (WIZ550S2E_endLineCount = 2) { WIZ550S2E_endLineCount = 0; extensionManager_rxFined= true; } if (enableOxines= true & extensionManager_rxFined= true) { CommandReceived = true; MAP_Interrupt_disableSlepOnIsrExit(); 返回; } if (extensionManager_rxFined== true) { MAP_Interrupt_disableSlepOnIsrExit(); 返回; } } //} } } MAP_Interrupt_enableSlepOnIsrExit(); }
我使用的是 SimpleLink SDK 1.50.0.0、CCS 7.2.0、未进行优化。
是否有人遇到这种行为? 您是否知道导致这种情况的原因以及如何避免这种情况?
如果您需要其他信息、请告诉我。
谢谢、
克里斯蒂安