OSStatus MicoUartSend( mico_uart_t uart, const void* data, uint32_t size ) { // /* Reset DMA transmission result. The result is assigned in interrupt handler */ uint32_t Instance = getInstanceBy(uart); uart_interfaces[uart].tx_dma_result = kGeneralErr; #ifndef NO_MICO_RTOS mico_rtos_lock_mutex(&uart_interfaces[uart].tx_mutex); #endif MicoMcuPowerSaveConfig(false); #ifdef UART_IRQ_APP if (UART_DRV_SendData(Instance, data, size) == kStatus_UART_Success){ #else if (UART_DRV_EdmaSendData(Instance, data, size) == kStatus_UART_Success){ #endif #ifndef NO_MICO_RTOS mico_rtos_set_semaphore( &uart_interfaces[ uart ].tx_complete ); #else uart_interfaces[ uart ].rx_complete = true; #endif } #ifndef NO_MICO_RTOS mico_rtos_get_semaphore( &uart_interfaces[ uart ].tx_complete, MICO_NEVER_TIMEOUT ); #else while(uart_interfaces[ uart ].tx_complete == false); uart_interfaces[ uart ].tx_complete = false; #endif // return uart_interfaces[uart].tx_dma_result; MicoMcuPowerSaveConfig(true); #ifndef NO_MICO_RTOS mico_rtos_unlock_mutex(&uart_interfaces[uart].tx_mutex); #endif return kNoErr; } void UART_DRV_CompleteReceiveData(uint32_t instance) { assert(instance < HW_UART_INSTANCE_COUNT); uart_state_t * uartState = (uart_state_t *)g_uartStatePtr[instance]; uint32_t baseAddr = g_uartBaseAddr[instance]; mico_uart_t uart = getUartBy(instance); /* Disable receive data full interrupt */ UART_HAL_SetRxDataRegFullIntCmd(baseAddr, false); /* Signal the synchronous completion object. */ if (uartState->isRxBlocking) { mico_rtos_set_semaphore(&uart_interfaces[uart].rx_complete); //OSA_SemaPost(&uartState->rxIrqSync); } /* Update the information of the module driver state */ uartState->isRxBusy = false; }
/*! * @brief Main demo function */ int main(void) { unsigned long t1 = 0; int i = 0; uint32_t byteCountBuff = 0; for(i = 0; i < SINGAL_NUM;i++) { //SIN g_uiPWM_Data[i] = (uint16_t)(HALF_LVDT_PWM_PERIOD*sin(2*PI/SINGAL_NUM * i + PI) + HALF_LVDT_PWM_PERIOD); //g_uiPWM_Data[i] = (uint16_t)(2048*sin(2*PI/SINGAL_NUM * i + PI) + 2048); //TRI //g_uiPWM_Data[i] = i + (PWM0_PERIOD/PWM0_POINT_NUM); } sc910_load_param(); // init the hardware board hardware_init(); Kinetis_FlashInit(); while(1) { sc910_input(); sc910_iec(); //sc910_output(); CstModbusSendAck(); sc910_comm_process(); sc910_save_param(); //fir_cal(); #if 0 //For Uart TEST if((get_1ms() - t1) > 1000) { RS485_EN = 1; t1 = get_1ms(); //UART0_D = i; byteCountBuff = sizeof(buffStart); UART_DRV_EdmaSendData(BOARD_DEBUG_UART_INSTANCE, buffStart, byteCountBuff); i++; //RS485_EN = 0; } #endif } }