コード例 #1
0
ファイル: MicoDriverUart.c プロジェクト: 70year/MICO
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;
}
コード例 #2
0
ファイル: main.c プロジェクト: hudieka/SC910
/*!
 * @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
        
    }

}