/*! * @brief Check send/receive non blocking functionality * */ int main(void) { uint8_t rxChar = 0, txChar = 0; uint32_t byteCountBuff = 0; lpuart_state_t lpuartStatePtr; // Fill in lpuart config data lpuart_user_config_t lpuartConfig = { .clockSource = BOARD_LPUART_CLOCK_SOURCE, .bitCountPerChar = kLpuart8BitsPerChar, .parityMode = kLpuartParityDisabled, .stopBitCount = kLpuartOneStopBit, .baudRate = BOARD_DEBUG_UART_BAUD }; // Enable clock for PORTs, setup board clock source hardware_init(); // Initialize the lpuart module with instance number and config structure LPUART_DRV_Init(BOARD_DEBUG_UART_INSTANCE, &lpuartStatePtr, &lpuartConfig); // Inform to start non blocking example byteCountBuff = sizeof(buffStart); LPUART_DRV_SendData(BOARD_DEBUG_UART_INSTANCE, buffStart, byteCountBuff); while (kStatus_LPUART_TxBusy == LPUART_DRV_GetTransmitStatus(BOARD_DEBUG_UART_INSTANCE, NULL)){} // Inform user of what to do byteCountBuff = sizeof(bufferData1); LPUART_DRV_SendData(BOARD_DEBUG_UART_INSTANCE, bufferData1, byteCountBuff); while (kStatus_LPUART_TxBusy == LPUART_DRV_GetTransmitStatus(BOARD_DEBUG_UART_INSTANCE, NULL)){} // Send/receive non blocking function while(true) { // Wait to receive input data LPUART_DRV_ReceiveData(BOARD_DEBUG_UART_INSTANCE, &rxChar, 1); while (kStatus_LPUART_RxBusy == LPUART_DRV_GetReceiveStatus(BOARD_DEBUG_UART_INSTANCE, NULL)){} txChar = rxChar; // Wait for the transfer finish, OR do something else LPUART_DRV_SendData(BOARD_DEBUG_UART_INSTANCE, &txChar, 1); } }
/*! * @brief wait uart finished. * */ void wait_finish_uart(void) { uint32_t bytesRemaining = 0; volatile bool isLastByteTranmistComplete = false; do { LPUART_DRV_GetTransmitStatus(BOARD_DEBUG_UART_INSTANCE, &bytesRemaining); isLastByteTranmistComplete = LPUART_HAL_GetStatusFlag(BOARD_DEBUG_UART_BASEADDR,kLpuartTxComplete); } while ((bytesRemaining != 0) || (!isLastByteTranmistComplete)); }
// Send function void gsm_uart_send_task(void *arg) { // Create protected queue to send data to gsm modem xSemaphore_uart_gsm_send_handle = xSemaphoreCreateMutex(); xQueue_uart_gsm_send_handle = xQueueCreate(UART_GSM_SEND_QUEUE_SIZE, sizeof( char )); // Create byte send buffer char queue_data_buffer; char uart_send_buffer[255]; uint32_t bytes_remaining; // Enter while loop and send when new data is added to queue while(true) { vTaskDelay(10/portTICK_RATE_MS); uint8_t buffer_counter = 0; if( xQueueReceive( xQueue_uart_gsm_send_handle, &queue_data_buffer, LONG_TIME) ) { *uart_send_buffer = queue_data_buffer; while(xQueueReceive( xQueue_uart_gsm_send_handle, &queue_data_buffer, 0)) { buffer_counter++; *(uart_send_buffer + buffer_counter) = queue_data_buffer; } *(uart_send_buffer + buffer_counter+1) = NULL; // Send package to gsm module LPUART_DRV_SendData(FSL_LPUARTCOM1, &uart_send_buffer, (buffer_counter+1)); // Add to virtual com queue // add_string_to_queue(uart_send_buffer, xQueue_virtual_com_send_handle, 0, xSemaphore_virtual_com_send_handle, 10); while((LPUART_DRV_GetTransmitStatus(FSL_LPUARTCOM1, &bytes_remaining) == kStatus_UART_TxBusy)) { vTaskDelay(2/portTICK_RATE_MS); } } } }