📄 bsp.c
字号:
/*
*********************************************************************************************************
* MICIRUM BOARD SUPPORT PACKAGE
*
* (c) Copyright 2013; Micrium, Inc.; Weston, FL
*
* All rights reserved. Protected by international copyright laws.
* Knowledge of the source code may NOT be used to develop a similar product.
* Please help us continue to provide the Embedded community with the finest
* software available. Your honesty is greatly appreciated.
*********************************************************************************************************
*/
/*
*********************************************************************************************************
*
* BOARD SUPPORT PACKAGE
*
* ST Microelectronics STM32
* on the
*
* STM3240G-EVAL
* Evaluation Board
*
* Filename : bsp.c
* Version : V1.00
* Programmer(s) : FF
* DC
*********************************************************************************************************
*/
/*
*********************************************************************************************************
* INCLUDE FILES
*********************************************************************************************************
*/
#define BSP_MODULE
#include <bsp.h>
#include <bsp_os.h>
/*
*********************************************************************************************************
* LOCAL DEFINES
*********************************************************************************************************
*/
#define BSP_BIT_RCC_PLLCFGR_PLLM 25u
#define BSP_BIT_RCC_PLLCFGR_PLLN 336u
#define BSP_BIT_RCC_PLLCFGR_PLLP 2u
#define BSP_BIT_RCC_PLLCFGR_PLLQ 7u
#define BSP_GPIOG_LED1 DEF_BIT_06
#define BSP_GPIOG_LED2 DEF_BIT_08
#define BSP_GPIOI_LED3 DEF_BIT_09
#define BSP_GPIOC_LED4 DEF_BIT_07
/*
*********************************************************************************************************
* LOCAL CONSTANTS
*********************************************************************************************************
*/
/*
*********************************************************************************************************
* LOCAL DATA TYPES
*********************************************************************************************************
*/
/*
*********************************************************************************************************
* LOCAL TABLES
*********************************************************************************************************
*/
/*
*********************************************************************************************************
* LOCAL GLOBAL VARIABLES
*********************************************************************************************************
*/
/*
*********************************************************************************************************
* REGISTERS
*********************************************************************************************************
*/
#define BSP_REG_DEM_CR (*(CPU_REG32 *)0xE000EDFC)
#define BSP_REG_DWT_CR (*(CPU_REG32 *)0xE0001000)
#define BSP_REG_DWT_CYCCNT (*(CPU_REG32 *)0xE0001004)
#define BSP_REG_DBGMCU_CR (*(CPU_REG32 *)0xE0042004)
/*
*********************************************************************************************************
* REGISTER BITS
*********************************************************************************************************
*/
#define BSP_DBGMCU_CR_TRACE_IOEN_MASK 0x10
#define BSP_DBGMCU_CR_TRACE_MODE_ASYNC 0x00
#define BSP_DBGMCU_CR_TRACE_MODE_SYNC_01 0x40
#define BSP_DBGMCU_CR_TRACE_MODE_SYNC_02 0x80
#define BSP_DBGMCU_CR_TRACE_MODE_SYNC_04 0xC0
#define BSP_DBGMCU_CR_TRACE_MODE_MASK 0xC0
#define BSP_BIT_DEM_CR_TRCENA DEF_BIT_24
#define BSP_BIT_DWT_CR_CYCCNTENA DEF_BIT_00
/*
*********************************************************************************************************
* LOCAL FUNCTION PROTOTYPES
*********************************************************************************************************
*/
static void BSP_LED_Init (void);
/*
*********************************************************************************************************
* BSP_Init()
*
* Description : Initialize the Board Support Package (BSP).
*
* Argument(s) : none.
*
* Return(s) : none.
*
* Caller(s) : Application.
*
* Note(s) : (1) This function SHOULD be called before any other BSP function is called.
*
* (2) CPU instruction / data tracing requires the use of the following pins :
* (a) (1) Aysynchronous : PB[3]
* (2) Synchronous 1-bit : PE[3:2]
* (3) Synchronous 2-bit : PE[4:2]
* (4) Synchronous 4-bit : PE[6:2]
*
* (c) The application may wish to adjust the trace bus width depending on I/O
* requirements.
*********************************************************************************************************
*/
void BSP_Init (void)
{
BSP_IntInit();
RCC_DeInit();
RCC_HSEConfig(RCC_HSE_ON); /* HSE = 25MHz ext. crystal. */
RCC_WaitForHSEStartUp();
RCC_HCLKConfig(RCC_SYSCLK_Div1); /* HCLK = AHBCLK = PLL / AHBPRES(1) = 168MHz. */
RCC_PCLK2Config(RCC_HCLK_Div2); /* APB2CLK = AHBCLK / APB2DIV(2) = 84MHz. */
RCC_PCLK1Config(RCC_HCLK_Div4); /* APB1CLK = AHBCLK / APB1DIV(4) = 42MHz (max). */
/* PLLCLK = HSE * (PLLN / PLLM) = 336MHz. */
/* SYSCLK = PLLCLK / PLLP = 168MHz. */
/* OTG_FSCLK = PLLCLK / PLLQ = 48MHz. */
RCC_PLLConfig(RCC_PLLCFGR_PLLSRC_HSE,
BSP_BIT_RCC_PLLCFGR_PLLM,
BSP_BIT_RCC_PLLCFGR_PLLN,
BSP_BIT_RCC_PLLCFGR_PLLP,
BSP_BIT_RCC_PLLCFGR_PLLQ);
RCC_PLLCmd(ENABLE);
while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET) { /* Wait for PLL to lock. */
;
}
FLASH_SetLatency(FLASH_Latency_5); /* 5 Flash wait states when HCLK > 120MHz. */
FLASH_PrefetchBufferCmd(ENABLE);
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); /* HCLK = SYSCLK = PLL = 168MHz. */
while (RCC_GetSYSCLKSource() != RCC_CFGR_SWS_PLL) {
;
}
BSP_LED_Init(); /* Init LEDs. */
#ifdef TRACE_EN /* See project / compiler preprocessor options. */
BSP_CPU_REG_DBGMCU_CR |= BSP_DBGMCU_CR_TRACE_IOEN_MASK; /* Enable tracing (see Note #2). */
BSP_CPU_REG_DBGMCU_CR &= ~BSP_DBGMCU_CR_TRACE_MODE_MASK; /* Clr trace mode sel bits. */
BSP_CPU_REG_DBGMCU_CR |= BSP_DBGMCU_CR_TRACE_MODE_SYNC_04; /* Cfg trace mode to synch 4-bit. */
#endif
}
/*
*********************************************************************************************************
* BSP_CPU_ClkFreq()
*
* Description : Read CPU registers to determine the CPU clock frequency of the chip.
*
* Argument(s) : none.
*
* Return(s) : The CPU clock frequency, in Hz.
*
* Caller(s) : Application.
*
* Note(s) : none.
*********************************************************************************************************
*/
CPU_INT32U BSP_CPU_ClkFreq (void)
{
RCC_ClocksTypeDef rcc_clocks;
RCC_GetClocksFreq(&rcc_clocks);
return ((CPU_INT32U)rcc_clocks.HCLK_Frequency);
}
/*
*********************************************************************************************************
* BSP_Tick_Init()
*
* Description : Initialize all the peripherals that required OS Tick services (OS initialized)
*
* Argument(s) : none.
*
* Return(s) : none.
*
* Caller(s) : Application.
*
* Note(s) : none.
*********************************************************************************************************
*/
void BSP_Tick_Init (void)
{
CPU_INT32U cpu_clk_freq;
CPU_INT32U cnts;
cpu_clk_freq = BSP_CPU_ClkFreq(); /* Determine SysTick reference freq. */
#if (OS_VERSION >= 30000u)
cnts = cpu_clk_freq / (CPU_INT32U)OSCfg_TickRate_Hz; /* Determine nbr SysTick increments. */
#else
cnts = cpu_clk_freq / (CPU_INT32U)OS_TICKS_PER_SEC; /* Determine nbr SysTick increments. */
#endif
OS_CPU_SysTickInit(cnts); /* Init uC/OS periodic time src (SysTick). */
}
/*
*********************************************************************************************************
* BSP_LED_Init()
*
* Description : Initialize any or all the LEDs on the board.
*
* Argument(s) : led The ID of the LED to control:
*
* 0 inialize ALL LEDs
* 1 inialize user LED1
* 2 inialize user LED2
* 3 inialize user LED3
* 4 inialize user LED4
*
* Return(s) : none.
*
* Caller(s) : Application.
*
* Note(s) : none.
*********************************************************************************************************
*/
static void BSP_LED_Init()
{
GPIO_InitTypeDef gpio_init;
BSP_PeriphEn(BSP_PERIPH_ID_GPIOG); /* Configure GPIOG for LED1 and LED2 */
gpio_init.GPIO_Pin = BSP_GPIOG_LED1 | BSP_GPIOG_LED2;
gpio_init.GPIO_Mode = GPIO_Mode_OUT;
gpio_init.GPIO_OType = GPIO_OType_PP;
gpio_init.GPIO_PuPd = GPIO_PuPd_UP;
gpio_init.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOG, &gpio_init);
BSP_PeriphEn(BSP_PERIPH_ID_GPIOI); /* Configure GPIOI for LED3 */
gpio_init.GPIO_Pin = BSP_GPIOI_LED3;
GPIO_Init(GPIOI, &gpio_init);
BSP_PeriphEn(BSP_PERIPH_ID_GPIOC); /* Configure GPIOC for LED4 */
gpio_init.GPIO_Pin = BSP_GPIOC_LED4;
GPIO_Init(GPIOC, &gpio_init);
}
/*
*********************************************************************************************************
* BSP_LED_On()
*
* Description : Turn ON any or all the LEDs on the board.
*
* Argument(s) : led The ID of the LED to control:
*
* 0 turns ON ALL LEDs
* 1 turns ON user LED1
* 2 turns ON user LED2
* 3 turns ON user LED3
* 4 turns ON user LED4
*
* Return(s) : none.
*
* Caller(s) : Application.
*
* Note(s) : none.
*********************************************************************************************************
*/
void BSP_LED_On (CPU_INT08U led)
{
switch (led) {
case 0:
GPIO_SetBits(GPIOG, (BSP_GPIOG_LED1 | BSP_GPIOG_LED2));
GPIO_SetBits(GPIOI, BSP_GPIOI_LED3);
GPIO_SetBits(GPIOC, BSP_GPIOC_LED4);
break;
case 1:
GPIO_SetBits(GPIOG, BSP_GPIOG_LED1);
break;
case 2:
GPIO_SetBits(GPIOG, BSP_GPIOG_LED2);
break;
case 3:
GPIO_SetBits(GPIOI, BSP_GPIOI_LED3);
break;
case 4:
GPIO_SetBits(GPIOC, BSP_GPIOC_LED4);
break;
default:
break;
}
}
/*
*********************************************************************************************************
* BSP_LED_Off()
*
* Description : Turn OFF any or all the LEDs on the board.
*
* Argument(s) : led The ID of the LED to control:
*
* 0 turns OFF ALL the LEDs
* 1 turns OFF user LED1
* 2 turns OFF user LED2
* 3 turns OFF user LED3
* 4 turns OFF user LED4
*
* Return(s) : none.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -