コード例 #1
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;
}
コード例 #2
0
ファイル: main.c プロジェクト: wwwqimo/Cube_Sw
/*
*********************************************************************************************************
*                                          AppObjCreate()
*
* Description : Create application kernel objects tasks.
*
* Argument(s) : none
*
* Return(s)   : none
*
* Caller(s)   : AppTaskStart()
*
* Note(s)     : none.
*********************************************************************************************************
*/
static  void  AppObjCreate (void)
{
	/* 创建互斥信号量 */
	
  BSP_OS_SemCreate(&SEM_GPS_STO,
					0,	
					(CPU_CHAR *)"SEM_GPS_STO");     /* GPS存储信号灯 */
	
	BSP_OS_SemCreate(&SEM_TEL_STO,
					0,	
					(CPU_CHAR *)"SEM_TEL_STO");     /* 遥测存储信号灯 */
	
	BSP_OS_SemCreate(&SEM_PLOAD_STO,
					0,	
					(CPU_CHAR *)"SEM_PLOAD_STO");   /* 载荷存储信号灯 */
	
/********************姿控信号灯*********************/
	
	BSP_OS_SemCreate(&SEM_CYC_INFO,
					0,	
					(CPU_CHAR *)"SEM_CYC_INFO");    /* 信号采集信号灯 */
	
	BSP_OS_SemCreate(&SEM_MAG_DOT_DMP,
					0,	
					(CPU_CHAR *)"SEM_MAG_DOT_DMP");  /* 阻尼信号灯 */
	
	BSP_OS_SemCreate(&SEM_PIT_FLT_COM,
					0,	
					(CPU_CHAR *)"SEM_PIT_FLT_COM");  /* 滤波状态更新信号灯 */
	
	
	BSP_OS_SemCreate(&SEM_ATT_STA_CTL,
					0,	
					(CPU_CHAR *)"SEM_ATT_STA_CTL");  /* 三轴稳定信号灯 */
}
コード例 #3
0
void  BSP_Ser_Init (CPU_INT32U  baud_rate)
{
    CPU_INT08U  baud_clk;
    CPU_INT16U  brr;
    CPU_REG32   i;


                                                                /* Initialize 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");


    SYSTEM.PRCR.WORD        = 0xA50B;                           /* Protect off.                                         */
    MPC.PWPR.BIT.B0WI       =      0;                           /* Unlock protection register.                          */
    MPC.PWPR.BIT.PFSWE      =      1;                           /* Unlock MPC registers.                                */

    SYSTEM.MSTPCRA.BIT.ACSE =      0;                           /* clear ACSE Bit (All-Module Clock Stop Mode Enable).  */

    MSTP(SCI2)              =      0;                           /* Cancel stop state of SCI2 Periph to en wr to it.     */

    SYSTEM.PRCR.WORD        = 0xA500;                           /* Protect on.                                          */

    SCI2.SCR.BYTE           =   0x00;                           /* Clear bits TIE, RIE, RE, and TEIE in SCR to 0 ...    */
                                                                /* ... Set CKE to internal.                             */


                                                                /* Set up the UART I/O port and pins.                   */
    MPC.P50PFS.BYTE         =   0x4A;                           /* P50 is TxD2.                                         */
    MPC.P52PFS.BYTE         =   0x4A;                           /* P52 is RxD2.                                         */

    PORT5.PDR.BIT.B0        =      1;                           /* TxD2 is output.                                      */
    PORT5.PDR.BIT.B2        =      0;                           /* RxD2 is input.                                       */

    PORT5.PMR.BIT.B0        =      1;                           /* TxD2 is peripheral.                                  */
    PORT5.PMR.BIT.B2        =      1;                           /* RxD2 is peripheral.                                  */


    IR(SCI2, RXI2)          =      0;                           /* Clear any pending ISR.                               */
    IR(SCI2, TXI2)          =      0;
    IR(SCI2, TEI2)          =      0;

    IPR(SCI2, RXI2)         =      BSP_CFG_SER_IPL;             /* Set interrupt priority.                              */
    IPR(SCI2, TXI2)         =      BSP_CFG_SER_IPL;
    IPR(SCI2, TEI2)         =      BSP_CFG_SER_IPL;

    IEN(SCI2, RXI2)         =      1;                           /* Enable interrupt source.                             */
    IEN(SCI2, TXI2)         =      1;
    IEN(SCI2, TEI2)         =      1;


    BSP_IntVectSet(VECT_SCI2_RXI2, (CPU_FNCT_VOID)BSP_Ser_ISR_Rx_Handler);
    BSP_IntVectSet(VECT_SCI2_TXI2, (CPU_FNCT_VOID)BSP_Ser_ISR_Tx_Handler);



                                                                /* Set data transfer format in Serial Mode Register.    */
                                                                /*  -Asynchronous Mode.                                 */
                                                                /*  -8 bits.                                            */
                                                                /*  -no parity.                                         */
                                                                /*  -1 stop bit.                                        */
                                                                /*  -PCLK clock (n = 0).                                */
    SCI2.SMR.BYTE      = 0x00;

    SCI2.SCMR.BIT.SMIF =    0;                                  /* Set to 0 for serial communications interface mode.   */

    baud_clk           =    0;                                  /* Algorithm for finding BRR value                      */
    do {                                                        /* N = BRR (0-255), B = bit rate, n = baud clock        */
        brr = BSP_Ser_GetBRR(baud_clk, baud_rate);              /* N = Pclk / (64 * 2^(2 * n - 1) * B) - 1              */
        if (brr > 255) {
            baud_clk++;
        }
    } while (brr > 255);

    SCI2.SMR.BIT.CKS = baud_clk;
    SCI2.BRR         = brr;

    for (i = 0; i < 10000; i++) {                               /* Wait for at least 1 bit time                         */
        ;
    }
                                                                /* Enable RXI and TXI interrupts in SCI peripheral.     */
    SCI2.SCR.BYTE |= 0x30;
}
コード例 #4
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);
}