/*! * @brief Power manager user callback */ power_manager_error_code_t callback0(power_manager_notify_struct_t * notify, power_manager_callback_data_t * dataPtr) { user_callback_data_t * userData = (user_callback_data_t*) dataPtr; power_manager_error_code_t ret = kPowerManagerError; volatile bool isLastByteTranmistComplete = false; switch (notify->notifyType) { case kPowerManagerNotifyBefore: userData->before.counter++; do { isLastByteTranmistComplete = UART_HAL_GetStatusFlag(BOARD_DEBUG_UART_BASEADDR,kUartTxComplete); } while (!isLastByteTranmistComplete); disable_unused_pins(); ret = kPowerManagerSuccess; break; case kPowerManagerNotifyAfter: userData->after.counter++; enable_unused_pins(); ret = kPowerManagerSuccess; break; default: userData->err++; break; } userData->lastType = notify->notifyType; return ret; }
int serial_writable(serial_t *obj) { uint32_t uart_address[] = UART_BASE_ADDRS; if (UART_HAL_GetStatusFlag(uart_address[obj->index], kUartRxOverrun)) UART_HAL_ClearStatusFlag(uart_address[obj->index], kUartRxOverrun); return UART_HAL_IsTxDataRegEmpty(uart_address[obj->index]); }
/*! * @brief wait uart finished. * */ void wait_finish_uart(void) { uint32_t bytesRemaining = 0; volatile bool isLastByteTranmistComplete = false; do { UART_DRV_GetTransmitStatus(BOARD_DEBUG_UART_INSTANCE, &bytesRemaining); isLastByteTranmistComplete = UART_HAL_GetStatusFlag(BOARD_DEBUG_UART_BASEADDR,kUartTxComplete); } while ((bytesRemaining != 0) || (!isLastByteTranmistComplete)); }
/******************************************************************************* * Callback function for Power Manager. ******************************************************************************/ power_manager_error_code_t powerManagerCallback(power_manager_notify_struct_t * notify, power_manager_callback_data_t * dataPtr) { power_manager_error_code_t ret = kPowerManagerError; volatile bool isLastByteTranmistComplete = false; switch (notify->notifyType) { case kPowerManagerNotifyBefore: // Wait for any pending UART data to go out. do { isLastByteTranmistComplete = UART_HAL_GetStatusFlag(BOARD_DEBUG_UART_BASEADDR, kUartTxComplete); } while (!isLastByteTranmistComplete); // Disable the UART pins. PORT_HAL_SetMuxMode(PORTE, 0u, kPortPinDisabled); PORT_HAL_SetMuxMode(PORTE, 1u, kPortPinDisabled); ret = kPowerManagerSuccess; break; case kPowerManagerNotifyAfter: // Re-enable the UART pins. PORT_HAL_SetMuxMode(PORTE, 0u, kPortMuxAlt3); PORT_HAL_SetMuxMode(PORTE, 1u, kPortMuxAlt3); ret = kPowerManagerSuccess; break; default: break; } return ret; }
void uart0_irq() { uart_irq(UART_HAL_IsTxDataRegEmpty(UART0_BASE), UART_HAL_IsRxDataRegFull(UART0_BASE), 0); if (UART_HAL_GetStatusFlag(UART0_BASE, kUartRxOverrun)) UART_HAL_ClearStatusFlag(UART0_BASE, kUartRxOverrun); }