board.c 2.3 KB
Newer Older
M
Ming, Bai 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
/*
 * File      : board.c
 * This file is part of RT-Thread RTOS
 * COPYRIGHT (C) 2009 RT-Thread Develop Team
 *
 * The license and distribution terms for this file may be
 * found in the file LICENSE in this distribution or at
 * http://www.rt-thread.org/license/LICENSE
 *
 * Change Logs:
 * Date           Author       Notes
 * 2009-01-05     Bernard      first implementation
 */

#include <rthw.h>
#include <rtthread.h>

#include "stm32f4xx.h"
#include "board.h"

/**
 * @addtogroup STM32
 */

/*@{*/

/*******************************************************************************
* Function Name  : NVIC_Configuration
* Description    : Configures Vector Table base location.
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void NVIC_Configuration(void)
{
#ifdef  VECT_TAB_RAM
wzyy2's avatar
wzyy2 已提交
37 38
    /* Set the Vector Table base location at 0x20000000 */
    NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);
M
Ming, Bai 已提交
39
#else  /* VECT_TAB_FLASH  */
wzyy2's avatar
wzyy2 已提交
40 41
    /* Set the Vector Table base location at 0x08000000 */
    NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);
M
Ming, Bai 已提交
42 43 44 45 46 47 48 49 50 51 52 53 54 55
#endif

    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
}

/*******************************************************************************
 * Function Name  : SysTick_Configuration
 * Description    : Configures the SysTick for OS tick.
 * Input          : None
 * Output         : None
 * Return         : None
 *******************************************************************************/
void  SysTick_Configuration(void)
{
wzyy2's avatar
wzyy2 已提交
56 57
    RCC_ClocksTypeDef  rcc_clocks;
    rt_uint32_t         cnts;
M
Ming, Bai 已提交
58

wzyy2's avatar
wzyy2 已提交
59
    RCC_GetClocksFreq(&rcc_clocks);
M
Ming, Bai 已提交
60

wzyy2's avatar
wzyy2 已提交
61 62
    cnts = (rt_uint32_t)rcc_clocks.HCLK_Frequency / RT_TICK_PER_SECOND;
    cnts = cnts / 8;
M
Ming, Bai 已提交
63

wzyy2's avatar
wzyy2 已提交
64 65
    SysTick_Config(cnts);
    SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);
M
Ming, Bai 已提交
66 67 68 69 70 71 72 73
}

/**
 * This is the timer interrupt service routine.
 *
 */
void SysTick_Handler(void)
{
wzyy2's avatar
wzyy2 已提交
74 75
    /* enter interrupt */
    rt_interrupt_enter();
M
Ming, Bai 已提交
76

wzyy2's avatar
wzyy2 已提交
77
    rt_tick_increase();
M
Ming, Bai 已提交
78

wzyy2's avatar
wzyy2 已提交
79 80
    /* leave interrupt */
    rt_interrupt_leave();
M
Ming, Bai 已提交
81 82 83 84 85 86 87
}

/**
 * This function will initial STM32 board.
 */
void rt_hw_board_init()
{
wzyy2's avatar
wzyy2 已提交
88 89
    /* NVIC Configuration */
    NVIC_Configuration();
M
Ming, Bai 已提交
90

wzyy2's avatar
wzyy2 已提交
91 92
    /* Configure the SysTick */
    SysTick_Configuration();
M
Ming, Bai 已提交
93

wzyy2's avatar
wzyy2 已提交
94
    rt_hw_usart_init();
M
Ming, Bai 已提交
95
#ifdef RT_USING_CONSOLE
wzyy2's avatar
wzyy2 已提交
96
    rt_console_set_device(CONSOLE_DEVICE);
M
Ming, Bai 已提交
97 98 99 100
#endif
}

/*@}*/