コード例 #1
0
ファイル: app.c プロジェクト: wjw890912/Power-measurement
static  void  AppTask_2 (void *p_arg)
{
	INT8U  err;
	
   	(void)p_arg;

    APP_TRACE_INFO(("AppTask_2\n\r"));

	pSecureEventFlagGrp = OSFlagCreate(0x0, &err);

    /* Enable Crypto clock */        
    CLK->AHBCLK |= CLK_AHBCLK_CRPTCKEN_Msk;

	BSP_IntVectSet(BSP_INT_ID_CRYPTO, CRYPTO_IRQHandler);
	BSP_IntEn(BSP_INT_ID_CRYPTO);
	PRNG_ENABLE_INT();

	while (1)
	{
		PRNG_Open(PRNG_KEY_SIZE_256, 0, 0);
		bsp_printf("Start PRNG...\n");
		PRNG_Start();
		OSFlagPend(pSecureEventFlagGrp, 0x1, OS_FLAG_WAIT_SET_ANY, 0, &err);
		dump_PRNG();
        OSTimeDlyHMSM(0, 0, 0, 100);
    }
}
コード例 #2
0
ファイル: bsp.c プロジェクト: Lyanzh/Learning_Material
static  void  BSP_TSI_Init (void)
{
    BSP_TSI_Slider.EndFlg = DEF_FALSE;                          /* Initialize global variables.                         */

    BSP_TSI_Slider.Electrodes[0].PinNbr    = BSP_TSI_PIN9;
    BSP_TSI_Slider.Electrodes[1].PinNbr    = BSP_TSI_PIN10;

    BSP_TSI_Slider.Electrodes[0].Threshold = BSP_TSI_THRESHOLD;
    BSP_TSI_Slider.Electrodes[1].Threshold = BSP_TSI_THRESHOLD;

    SIM_SCGC5   |= SIM_SCGC5_TSI_MASK;                          /* Enable clock gating for TSI.                         */

                                                                /* Enable proper GPIO as TSI channels.                  */
    PORTB_PCR16  = PORT_PCR_MUX(0);                             /* PTB16 as TSI channel 9.                              */
    PORTB_PCR17  = PORT_PCR_MUX(0);                             /* PTB17 as TSI channel 10.                             */

    BSP_IntVectSet(BSP_INT_ID_TSI0, BSP_TSI_IntHandler);        /* Register the interrupt handler.                      */
    BSP_IntEn(BSP_INT_ID_TSI0);                                 /* Enable the TSI module interrupts.                    */

    TSI0_GENCS  |= (TSI_GENCS_ESOR_MASK
                |   TSI_GENCS_MODE(0)
                |   TSI_GENCS_REFCHRG(4)
                |   TSI_GENCS_DVOLT(0)
                |   TSI_GENCS_EXTCHRG(7)
                |   TSI_GENCS_PS(4)
                |   TSI_GENCS_NSCN(11)
                |   TSI_GENCS_TSIIEN_MASK
                |   TSI_GENCS_STPE_MASK);

    TSI0_GENCS  |=  TSI_GENCS_TSIEN_MASK;                       /* Enable the TSI module.                               */

    BSP_TSI_SelfCal();                                          /* Self calibration.                                    */
}
コード例 #3
0
/**
 * In this function, the hardware should be initialized.
 * Called from ethernetif_init().
 *
 * @param netif the already initialized lwip network interface structure
 *        for this ethernetif
 */
static void
low_level_init(struct netif *netif)
{
  SYS_ARCH_DECL_PROTECT(sr);
    
  /* set MAC hardware address length */
  netif->hwaddr_len = ETHARP_HWADDR_LEN;

  /* set MAC hardware address */
  netif->hwaddr[0] =  MACaddr[0];
  netif->hwaddr[1] =  MACaddr[1];
  netif->hwaddr[2] =  MACaddr[2];
  netif->hwaddr[3] =  MACaddr[3];
  netif->hwaddr[4] =  MACaddr[4];
  netif->hwaddr[5] =  MACaddr[5];

  /* maximum transfer unit */
  netif->mtu = 1500;

  /* device capabilities */
  /* don't set NETIF_FLAG_ETHARP if this device is not an ethernet one */
  netif->flags = NETIF_FLAG_BROADCAST | NETIF_FLAG_ETHARP | NETIF_FLAG_LINK_UP;

  SYS_ARCH_PROTECT(sr);
  
  /* Initialize Tx Descriptors list: Chain Mode */
  ETH_DMATxDescChainInit(DMATxDscrTab, &Tx_Buff[0][0], ETH_TXBUFNB);
  /* Initialize Rx Descriptors list: Chain Mode  */
  ETH_DMARxDescChainInit(DMARxDscrTab, &Rx_Buff[0][0], ETH_RXBUFNB);

/*----------added by Wang Mengyin 2010-07-20----------------------------------*/  
  // install Ethernet Interrupt Handlers
  // enable Ethernet Interrupt in NVIC and set up ISR
  BSP_IntVectSet(BSP_INT_ID_ETH, LwIP_Pkt_Handle);
  BSP_IntEn(BSP_INT_ID_ETH);
  
  /* Enable Ethernet Rx interrrupt */
  { int i;
    for(i=0; i<ETH_RXBUFNB; i++)
    {
      ETH_DMARxDescReceiveITConfig(&DMARxDscrTab[i], ENABLE);
    }
  }

#ifdef CHECKSUM_BY_HARDWARE
  /* Enable the checksum insertion for the Tx frames */
  { int i;
    for(i=0; i<ETH_TXBUFNB; i++)
    {
      ETH_DMATxDescChecksumInsertionConfig(&DMATxDscrTab[i], ETH_DMATxDesc_ChecksumTCPUDPICMPFull);
    }
  }
#endif

  SYS_ARCH_UNPROTECT(sr);
  
  /* Enable MAC and DMA transmission and reception */
  ETH_Start();

}
コード例 #4
0
ファイル: bsp_serial.c プロジェクト: Alegrowin/Universite
void  BSP_Ser_Init (CPU_INT32U  baud_rate)
{
    GPIO_InitTypeDef        gpio_init;
    USART_InitTypeDef       usart_init;
    USART_ClockInitTypeDef  usart_clk_init;


                                                                /* ------------------ INIT OS OBJECTS ----------------- */
    BSP_OS_SemCreate(&BSP_SerTxWait, BSP_UART2_TX_BUFFER_SIZE, "Serial Tx Wait");
    BSP_OS_SemCreate(&BSP_SerRxWait, 0, "Serial Rx Wait");
    BSP_OS_SemCreate(&BSP_SerLock, 1, "Serial Lock");

                                                                /* ----------------- INIT USART STRUCT ---------------- */
    usart_init.USART_BaudRate            = baud_rate;
    usart_init.USART_WordLength          = USART_WordLength_8b;
    usart_init.USART_StopBits            = USART_StopBits_1;
    usart_init.USART_Parity              = USART_Parity_No ;
    usart_init.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
    usart_init.USART_Mode                = USART_Mode_Rx | USART_Mode_Tx;

    usart_clk_init.USART_Clock           = USART_Clock_Disable;
    usart_clk_init.USART_CPOL            = USART_CPOL_Low;
    usart_clk_init.USART_CPHA            = USART_CPHA_2Edge;
    usart_clk_init.USART_LastBit         = USART_LastBit_Disable;


    BSP_PeriphEn(BSP_PERIPH_ID_USART2);
    BSP_PeriphEn(BSP_PERIPH_ID_IOPD);
    BSP_PeriphEn(BSP_PERIPH_ID_AFIO);
    GPIO_PinRemapConfig(GPIO_Remap_USART2, ENABLE);
                                                                /* ----------------- SETUP USART2 GPIO ---------------- */
                                                                /* Configure GPIOD.5 as push-pull.                      */
    gpio_init.GPIO_Pin   = GPIO_Pin_5;
    gpio_init.GPIO_Speed = GPIO_Speed_50MHz;
    gpio_init.GPIO_Mode  = GPIO_Mode_AF_PP;
    GPIO_Init(GPIOD, &gpio_init);

                                                                /* Configure GPIOD.6 as input floating.                 */
    gpio_init.GPIO_Pin   = GPIO_Pin_6;
    gpio_init.GPIO_Mode  = GPIO_Mode_IN_FLOATING;
    GPIO_Init(GPIOD, &gpio_init);

                                                                /* ------------- CLEAN UP RX & TX BUFFERS ------------- */
    Mem_Clr((void*)&BSP_SerialRxBuffer[0], BSP_UART2_RX_BUFFER_SIZE);
    Mem_Clr((void*)&BSP_SerialTxBuffer[0], BSP_UART2_TX_BUFFER_SIZE);
    BSP_TxBuffer_Head_ndx = 0;
    BSP_TxBuffer_Tail_ndx = 0;
    BSP_RxBuffer_Head_ndx = 0;
    BSP_RxBuffer_Tail_ndx = 0;

                                                                /* ------------------ SETUP USART2 -------------------- */
    USART_Init(USART2, &usart_init);
    USART_ClockInit(USART2, &usart_clk_init);
    USART_Cmd(USART2, ENABLE);

    BSP_IntVectSet(BSP_INT_ID_USART2, BSP_Ser_ISR_Handler);
    BSP_IntEn(BSP_INT_ID_USART2);
    BSP_SerialInitilizated = DEF_TRUE;
}
コード例 #5
0
ファイル: Servo.c プロジェクト: Alegrowin/Universite
/*
*********************************************************************************************************
* InitADCPort
*********************************************************************************************************
* Arguments:
*       none.
*
* Note(s)     : (1) The ADC clock configuration is done in BSP_Init(). The peripheral clock frecuency
*                   is set to 12 MHz.
*               (2) Vref+ = 3V3
*                   Vref- = GND
*
*********************************************************************************************************
*/
static void InitADCPort()
{
  RCC->APB2ENR |= 0x08 | 1<<9;                                /* Enable ADC1 & PORTB peripheral clock                     */
  GPIOB->CRL &= ~0x00ff;                                      /* Configure PB0 and PB1 as analog inputs                   */
  /*  Config: 00 (analog input)                               */
  /*  Mode:   00 (input mode)                                 */
  
  ADC1->CR1 = 0x00000180;                                     /* DAC1 Control Register 1                                  */
  /*  - No Analog Watchdog                                    */
  /*  - Independent mode                                      */
  /*  - Discontinuous mode: 1 channels                        */
  /*  - Discontinous mode on regular channels: DISABLED       */
  /*  - Discontinous mode on injected channels: DISABLED      */
  /*  - Scan mode: ENABLED                                    */
  /*  - End of converstion interrupt: ENABLED                 */
  ADC1->CR2 = 0x0000F001;                                     /* DAC1 Control Register 2                                  */
  /*  - Temperature sensor: DISABLED                          */
  /*  - Trigger for injected channles: JSWSTART (software)    */
  /*  - Data alignment: RIGHT                                 */
  /*  - DMA: DISABLED                                         */
  /*  - Single conversion mode                                */
  /*  - A/D converter ON (ADON = 1)                           */
  ADC1->SMPR1 = 0x00000000;                                   /* ADC1 sample time register 1                              */
  /*  - All channels to 1.5 cycles (1.17 us / conversion)     */
  ADC1->SMPR2 = 0x00000000;                                   /* ADC1 sample time register 2                              */
  /*  - All channels to 1.5 cycles (1.17 us / conversion)     */
  ADC1->JOFR1 = 0x00000000;                                   /* ADC1 injected channel data offset register 1             */
  ADC1->JOFR2 = 0x00000000;                                   /* ADC1 injected channel data offset register 2             */
  ADC1->JOFR3 = 0x00000000;                                   /* ADC1 injected channel data offset register 3             */
  ADC1->JOFR4 = 0x00000000;                                   /* ADC1 injected channel data offset register 4             */
  
  /*  - All channels to 1.5 cycles (1.17 us / conversion)     */
  ADC1->JSQR = 0x0014A000;                                    /* ADC1 injected channels sequence register                 */
  /*  - 2 channels                                            */
  /*  - JSQ4 = channel 9                                      */
  /*  - JSQ3 = channel 8                                      */
  
  ADC1->CR2 |= 0x08;                                          /* Reset ADC1 calibration                                   */
  while (ADC1->CR2 & 0x08);                                   /* Wait until reset calibration is completed                */
  ADC1->CR2 |= 0x04;                                          /* Activate ADC1 calibration                                */
  while (ADC1->CR2 & 0x04);                                   /* Wait until calibration is completed                      */
  
  BSP_IntVectSet((CPU_INT08U   )BSP_INT_ID_ADC1_2,            /* Set the ADC Interrupt vector                             */
                 (CPU_FNCT_VOID)ADC1_ISR_Handler);
  
  BSP_IntEn(BSP_INT_ID_ADC1_2);                               /* Enable the ADC global interrupt                          */
}
コード例 #6
0
void TERM_TASK_button(void *p_arg)
{
  
  OS_ERR err;
  CPU_TS ts;
  
  //init button
  GPIO_InitTypeDef GPIO_InitStructure;
  EXTI_InitTypeDef EXTI_InitStructure;
  
  BSP_PeriphEn(BSP_PERIPH_ID_IOPA);             
  GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_0;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_IPD;
  GPIO_Init(GPIOD, &GPIO_InitStructure);
  
  
  GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0);
  EXTI_InitStructure.EXTI_Line = EXTI_Line0;
  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
  EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  EXTI_Init(&EXTI_InitStructure);
  
  BSP_IntVectSet(BSP_INT_ID_EXTI0, ButtonISRHandler);
  BSP_IntEn(BSP_INT_ID_EXTI0);
  
  OSSemCreate(&SEM_buttonISR, "button isr", 0, &err);
  
  while (DEF_TRUE) {
    OSSemPend(&SEM_buttonISR, 0, OS_OPT_PEND_BLOCKING, &ts, &err);
    
    
    OSSemPend(&SEM_bias_y, 0, OS_OPT_PEND_NON_BLOCKING, &ts, &err);
    switch(err){
    case OS_ERR_NONE:
      
      bias_y += 100;
      OSSemPost(&SEM_bias_y, OS_OPT_POST_1, &err);
      break;
    }
    
  }  
}
コード例 #7
0
static void AppTaskRadioControlInit(void)
{
    GPIO_InitTypeDef  GPIO_InitStructure;
    USART_InitTypeDef USART_InitStructure;

    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART6, ENABLE);

    GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_6;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_AF;
    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
    GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_UP;
    GPIO_Init(GPIOC, &GPIO_InitStructure);
    GPIO_PinAFConfig(GPIOC, GPIO_PinSource6, GPIO_AF_USART6);

    GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_7;
    GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_AF;
    GPIO_Init(GPIOC, &GPIO_InitStructure);
    GPIO_PinAFConfig(GPIOC, GPIO_PinSource7, GPIO_AF_USART6);

    USART_InitStructure.USART_BaudRate   = 125000;
    USART_InitStructure.USART_WordLength = USART_WordLength_9b;
    USART_InitStructure.USART_StopBits   = USART_StopBits_1;
    USART_InitStructure.USART_Parity     = USART_Parity_No;
    USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
    USART_InitStructure.USART_Mode       = USART_Mode_Rx | USART_Mode_Tx;
    USART_Init(USART6, &USART_InitStructure);

    USART_WakeUpConfig(USART6, USART_WakeUp_AddressMark);
    USART_SetAddress(USART6, 0x05);

    USART_ITConfig(USART6, USART_IT_RXNE, ENABLE);
    USART_ITConfig(USART6, USART_IT_TC, ENABLE);
    USART_ClearFlag(USART6,USART_FLAG_RXNE);
    USART_ClearFlag(USART6,USART_FLAG_TC);

    BSP_IntVectSet(BSP_INT_ID_USART6, USART6_IRQHandler);
    BSP_IntPrioSet(BSP_INT_ID_USART6, 3);
    BSP_IntEn(BSP_INT_ID_USART6);

    USART_Cmd(USART6, ENABLE);
}
コード例 #8
0
ファイル: timer.c プロジェクト: nustpq/bridge_host
void AT91_TC_Init( CPU_INT08U timer_index, CPU_INT08U timer_div, void (*handler)( void ), CPU_INT32U delay_us )
{
    CPU_INT16U DIV[5] = {         2,//1 us ~ 2730 us
                                  8,
                                  32,
                                  128,
                                  1024  // 22us - 1.4s maxium
                        };   
    CPU_INT32U counter_top =   MCK / (1000*1000) * delay_us / ( DIV[timer_div] )  ; 
    
    if( counter_top & 0xFFFF0000 ) {
        counter_top = 0xFFFF; // if exceeds TC_RC ...
       
    }
    AT91C_BASE_PMC->PMC_PCER = (1 << ppcer_offset[timer_index]);
    pTCREG[timer_index]->TC_CCR = AT91C_TC_CLKDIS;
    pTCREG[timer_index]->TC_IDR = 0xFFFFFFFF;
    pTCREG[timer_index]->TC_CMR = timer_div
                                | AT91C_TC_CPCSTOP
                                | AT91C_TC_CPCDIS
                                | AT91C_TC_WAVESEL_UP_AUTO
                                | AT91C_TC_WAVE;
    
    pTCREG[timer_index]->TC_RC  = (CPU_INT16U) counter_top ;
    
    if( handler != NULL ) {
        pTCREG[timer_index]->TC_IER = AT91C_TC_CPCS | AT91C_TC_COVFS;    
        
        BSP_IntVectSet( ppcer_offset[timer_index],
                        (CPU_INT08U   )AT91C_AIC_PRIOR_HIGHEST,
                        (CPU_INT08U   )BSP_INT_SCR_TYPE_INT_HIGH_LEVEL_SENSITIVE,
                        (CPU_FNCT_VOID)handler);        
        BSP_IntClr(ppcer_offset[timer_index] );     
        BSP_IntEn(ppcer_offset[timer_index]); 
        pTCREG[timer_index]->TC_CCR = AT91C_TC_CLKEN +  AT91C_TC_SWTRG ;
        
    }    
    
}
コード例 #9
0
ファイル: os_viewc.c プロジェクト: jiraiyav5/gprs
void  OSView_InitTarget (INT32U baud_rate)
{

    GPIO_InitTypeDef        gpio_init;
    USART_InitTypeDef       usart_init;
    USART_ClockInitTypeDef  usart_clk_init;

	OSView_TmrInit();                                    /* Initialize the free running timer          */


                                                                /* ----------------- INIT USART STRUCT ---------------- */
    usart_init.USART_BaudRate            = baud_rate;
    usart_init.USART_WordLength          = USART_WordLength_8b;
    usart_init.USART_StopBits            = USART_StopBits_1;
    usart_init.USART_Parity              = USART_Parity_No ;
    usart_init.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
    usart_init.USART_Mode                = USART_Mode_Rx | USART_Mode_Tx;


    usart_clk_init.USART_Clock           = USART_Clock_Disable;
    usart_clk_init.USART_CPOL            = USART_CPOL_Low;
    usart_clk_init.USART_CPHA            = USART_CPHA_2Edge;
    usart_clk_init.USART_LastBit         = USART_LastBit_Disable;


#if (OS_VIEW_COMM_SEL == OS_VIEW_UART_1)
    BSP_PeriphEn(BSP_PERIPH_ID_USART1);

                                                                /* ----------------- SETUP USART1 GPIO ---------------- */
    BSP_PeriphEn(BSP_PERIPH_ID_IOPA);

                                                                /* Configure GPIOA.9 as push-pull                       */
    gpio_init.GPIO_Pin   = GPIO_Pin_9;
    gpio_init.GPIO_Speed = GPIO_Speed_50MHz;
    gpio_init.GPIO_Mode  = GPIO_Mode_AF_PP;
    GPIO_Init(GPIOA, &gpio_init);

                                                                /* Configure GPIOA.10 as input floating                 */
    gpio_init.GPIO_Pin   = GPIO_Pin_10;
    gpio_init.GPIO_Mode  = GPIO_Mode_IN_FLOATING;
    GPIO_Init(GPIOA, &gpio_init);

                                                                /* ------------------ SETUP USART1 -------------------- */
    USART_Init(USART1, &usart_init);
    USART_ClockInit(USART1, &usart_clk_init);
    USART_Cmd(USART1, ENABLE);

    BSP_IntVectSet(BSP_INT_ID_USART1, OSView_RxTxISRHandler);
    BSP_IntEn(BSP_INT_ID_USART1);
#endif

#if (OS_VIEW_COMM_SEL == OS_VIEW_UART_2)
    BSP_PeriphEn(BSP_PERIPH_ID_USART2);

                                                                /* ----------------- SETUP USART2 GPIO ---------------- */
    BSP_PeriphEn(BSP_PERIPH_ID_IOPA);

                                                                /* Configure GPIOA.2 as push-pull                       */
    gpio_init.GPIO_Pin   = GPIO_Pin_2;
    gpio_init.GPIO_Speed = GPIO_Speed_50MHz;
    gpio_init.GPIO_Mode  = GPIO_Mode_AF_PP;
    GPIO_Init(GPIOA, &gpio_init);

                                                                /* Configure GPIOA.3 as input floating                  */
    gpio_init.GPIO_Pin   = GPIO_Pin_3;
    gpio_init.GPIO_Mode  = GPIO_Mode_IN_FLOATING;
    GPIO_Init(GPIOA, &gpio_init);

                                                                /* ------------------ SETUP USART2 -------------------- */
    USART_Init(USART2, &usart_init);
    USART_ClockInit(USART2, &usart_clk_init);
    USART_Cmd(USART2, ENABLE);

    BSP_IntVectSet(BSP_INT_ID_USART2, OSView_RxTxISRHandler);
    BSP_IntEn(BSP_INT_ID_USART2);
#endif

#if (OS_VIEW_COMM_SEL == OS_VIEW_UART_3)
    BSP_PeriphEn(BSP_PERIPH_ID_USART3);

                                                                /* ----------------- SETUP USART3 GPIO ---------------- */
    BSP_PeriphEn(BSP_PERIPH_ID_IOPB);

                                                                /* Configure GPIOB.10 as push-pull                      */
    gpio_init.GPIO_Pin   = GPIO_Pin_10;
    gpio_init.GPIO_Speed = GPIO_Speed_50MHz;
    gpio_init.GPIO_Mode  = GPIO_Mode_AF_PP;
    GPIO_Init(GPIOB, &gpio_init);

                                                                /* Configure GPIOB.11 as input floating                 */
    gpio_init.GPIO_Pin   = GPIO_Pin_11;
    gpio_init.GPIO_Mode  = GPIO_Mode_IN_FLOATING;
    GPIO_Init(GPIOB, &gpio_init);

                                                                /* ------------------ SETUP USART3 -------------------- */
    USART_Init(USART3, &usart_init);
    USART_ClockInit(USART3, &usart_clk_init);
    USART_Cmd(USART3, ENABLE);

    BSP_IntVectSet(BSP_INT_ID_USART3, OSView_RxTxISRHandler);
    BSP_IntEn(BSP_INT_ID_USART3);
#endif
}
コード例 #10
0
ファイル: bsp_ser.c プロジェクト: WillJason/cortex-M-Serise
void  BSP_Ser_Init (CPU_INT32U  baud_rate)
{
    FlagStatus              tc_status;
    GPIO_InitTypeDef        gpio_init;
    USART_InitTypeDef       usart_init;
    USART_ClockInitTypeDef  usart_clk_init;


                                                                /* ------------------ INIT OS OBJECTS ----------------- */
    BSP_OS_SemCreate(&BSP_SerTxWait,   0, "Serial Tx Wait");
    BSP_OS_SemCreate(&BSP_SerRxWait,   0, "Serial Rx Wait");
    BSP_OS_SemCreate(&BSP_SerLock,     1, "Serial Lock");

#if (BSP_CFG_SER_CMD_HISTORY_LEN > 0u)
    BSP_SerCmdHistory[0] = (CPU_CHAR)'\0';
#endif

                                                                /* ----------------- INIT USART STRUCT ---------------- */
    usart_init.USART_BaudRate            = baud_rate;
    usart_init.USART_WordLength          = USART_WordLength_8b;
    usart_init.USART_StopBits            = USART_StopBits_1;
    usart_init.USART_Parity              = USART_Parity_No ;
    usart_init.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
    usart_init.USART_Mode                = USART_Mode_Rx | USART_Mode_Tx;

    usart_clk_init.USART_Clock           = USART_Clock_Disable;
    usart_clk_init.USART_CPOL            = USART_CPOL_Low;
    usart_clk_init.USART_CPHA            = USART_CPHA_2Edge;
    usart_clk_init.USART_LastBit         = USART_LastBit_Disable;


    BSP_PeriphEn(BSP_PERIPH_ID_USART2);
    BSP_PeriphEn(BSP_PERIPH_ID_IOPD);
    BSP_PeriphEn(BSP_PERIPH_ID_AFIO);
    GPIO_PinRemapConfig(GPIO_Remap_USART2, ENABLE);
                                                                /* ----------------- SETUP USART2 GPIO ---------------- */
                                                                /* Configure GPIOD.5 as push-pull.                      */
    gpio_init.GPIO_Pin   = GPIO_Pin_5;
    gpio_init.GPIO_Speed = GPIO_Speed_50MHz;
    gpio_init.GPIO_Mode  = GPIO_Mode_AF_PP;
    GPIO_Init(GPIOD, &gpio_init);

                                                                /* Configure GPIOD.6 as input floating.                 */
    gpio_init.GPIO_Pin   = GPIO_Pin_6;
    gpio_init.GPIO_Mode  = GPIO_Mode_IN_FLOATING;
    GPIO_Init(GPIOD, &gpio_init);

                                                                /* ------------------ SETUP USART2 -------------------- */
    USART_Init(USART2, &usart_init);
    USART_ClockInit(USART2, &usart_clk_init);
    USART_Cmd(USART2, ENABLE);
    
    USART_ITConfig(USART2, USART_IT_TC, DISABLE);
    USART_ITConfig(USART2, USART_IT_TXE, DISABLE);
    tc_status  = USART_GetFlagStatus(USART2, USART_FLAG_TC);
    
    while (tc_status == SET) {
        USART_ClearITPendingBit(USART2, USART_IT_TC);
        USART_ClearFlag(USART2, USART_IT_TC);
        BSP_OS_TimeDlyMs(10);
        tc_status = USART_GetFlagStatus(USART2, USART_FLAG_TC);        
    }
           
    BSP_IntVectSet(BSP_INT_ID_USART2, BSP_Ser_ISR_Handler);
    BSP_IntEn(BSP_INT_ID_USART2);
}