📄 bsp.c
字号:
*********************************************************************************************************
* BSP_LED_Toggle()
*
* Description : TOGGLE any or all the LEDs on the board.
*
* Argument(s) : led The ID of the LED to control:
*
* 0 TOGGLE all LEDs on the board
* 1 TOGGLE LED 1
* 2 TOGGLE LED 2
* 3 TOGGLE LED 3
* 4 TOGGLE LED 4
*
* Return(s) : none.
*
* Caller(s) : Application.
*
* Note(s) : none.
*********************************************************************************************************
*/
void BSP_LED_Toggle (CPU_INT08U led)
{
CPU_INT32U pins;
pins = GPIO_ReadOutputData(GPIOC);
switch (led) {
case 0:
BSP_LED_Toggle(1);
BSP_LED_Toggle(2);
BSP_LED_Toggle(3);
BSP_LED_Toggle(4);
break;
case 1:
if ((pins & BSP_GPIOF_LED1) == 0) {
GPIO_SetBits( GPIOF, BSP_GPIOF_LED1);
} else {
GPIO_ResetBits(GPIOF, BSP_GPIOF_LED1);
}
break;
case 2:
if ((pins & BSP_GPIOF_LED2) == 0) {
GPIO_SetBits( GPIOF, BSP_GPIOF_LED2);
} else {
GPIO_ResetBits(GPIOF, BSP_GPIOF_LED2);
}
break;
case 3:
if ((pins & BSP_GPIOF_LED3) == 0) {
GPIO_SetBits( GPIOF, BSP_GPIOF_LED3);
} else {
GPIO_ResetBits(GPIOF, BSP_GPIOF_LED3);
}
break;
case 4:
if ((pins & BSP_GPIOF_LED4) == 0) {
GPIO_SetBits( GPIOF, BSP_GPIOF_LED4);
} else {
GPIO_ResetBits(GPIOF, BSP_GPIOF_LED4);
}
break;
default:
break;
}
}
/*
*********************************************************************************************************
*********************************************************************************************************
* MEMORY FUNCTIONS
*********************************************************************************************************
*********************************************************************************************************
*/
/*
*********************************************************************************************************
* BSP_NAND_Init()
*
* Description : Initialize FSMC for NAND flash.
*
* Argument(s) : none.
*
* Return(s) : none.
*
* Caller(s) : Application.
*
* Note(s) : none.
*********************************************************************************************************
*/
void BSP_NAND_Init (void)
{
GPIO_InitTypeDef gpio_init;
FSMC_NANDInitTypeDef nand_init;
FSMC_NAND_PCCARDTimingInitTypeDef p;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE | RCC_APB2Periph_GPIOF | RCC_APB2Periph_GPIOG, ENABLE);
/* ---------------------- CFG GPIO -------------------- */
/* CLE, ALE, D0..3, NOW, NWE & NCE2 NAND pin cfg. */
gpio_init.GPIO_Pin = GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_14 | GPIO_Pin_15 |
GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_7;
gpio_init.GPIO_Speed = GPIO_Speed_50MHz;
gpio_init.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOD, &gpio_init);
/* D4..7 NAND pin configuration. */
gpio_init.GPIO_Pin = GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10;
GPIO_Init(GPIOE, &gpio_init);
/* NWAIT NAND pin configuration. */
gpio_init.GPIO_Pin = GPIO_Pin_6;
gpio_init.GPIO_Speed = GPIO_Speed_50MHz;
gpio_init.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GPIOD, &gpio_init);
/* INT2 NAND pin configuration. */
gpio_init.GPIO_Pin = GPIO_Pin_6;
GPIO_Init(GPIOG, &gpio_init);
/* ---------------------- CFG FSMC -------------------- */
p.FSMC_SetupTime = 0x1;
p.FSMC_WaitSetupTime = 0x3;
p.FSMC_HoldSetupTime = 0x2;
p.FSMC_HiZSetupTime = 0x1;
nand_init.FSMC_Bank = FSMC_Bank2_NAND;
nand_init.FSMC_Waitfeature = FSMC_Waitfeature_Enable;
nand_init.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_8b;
nand_init.FSMC_ECC = FSMC_ECC_Enable;
nand_init.FSMC_ECCPageSize = FSMC_ECCPageSize_512Bytes;
nand_init.FSMC_AddressLowMapping = FSMC_AddressLowMapping_Direct;
nand_init.FSMC_TCLRSetupTime = 0x00;
nand_init.FSMC_TARSetupTime = 0x00;
nand_init.FSMC_CommonSpaceTimingStruct = &p;
nand_init.FSMC_AttributeSpaceTimingStruct = &p;
FSMC_NANDInit(&nand_init);
FSMC_NANDCmd(FSMC_Bank2_NAND, ENABLE); /* FSMC NAND bank cmd test. */
}
/*
*********************************************************************************************************
* BSP_NOR_Init()
*
* Description : Initialize FSMC for NOR flash.
*
* Argument(s) : none.
*
* Return(s) : none.
*
* Caller(s) : Application.
*
* Note(s) : none.
*********************************************************************************************************
*/
void BSP_NOR_Init (void)
{
GPIO_InitTypeDef gpio_init;
FSMC_NORSRAMInitTypeDef nor_init;
FSMC_NORSRAMTimingInitTypeDef p;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE | RCC_APB2Periph_GPIOF | RCC_APB2Periph_GPIOG, ENABLE);
/* ---------------------- CFG GPIO -------------------- */
/* NOR data lines configuration. */
gpio_init.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_14 | GPIO_Pin_15;
gpio_init.GPIO_Mode = GPIO_Mode_AF_PP;
gpio_init.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOD, &gpio_init);
gpio_init.GPIO_Pin = GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11 |
GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;
GPIO_Init(GPIOE, &gpio_init);
/* NOR address lines configuration. */
gpio_init.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 |
GPIO_Pin_5 | GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;
GPIO_Init(GPIOF, &gpio_init);
gpio_init.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5;
GPIO_Init(GPIOG, &gpio_init);
gpio_init.GPIO_Pin = GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13;
GPIO_Init(GPIOD, &gpio_init);
gpio_init.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6;
GPIO_Init(GPIOE, &gpio_init);
/* NOE and NWE configuration. */
gpio_init.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5;
GPIO_Init(GPIOD, &gpio_init);
/* NE2 configuration. */
gpio_init.GPIO_Pin = GPIO_Pin_9;
GPIO_Init(GPIOG, &gpio_init);
/* ---------------------- CFG FSMC -------------------- */
p.FSMC_AddressSetupTime = 0x05;
p.FSMC_AddressHoldTime = 0x00;
p.FSMC_DataSetupTime = 0x07;
p.FSMC_BusTurnAroundDuration = 0x00;
p.FSMC_CLKDivision = 0x00;
p.FSMC_DataLatency = 0x00;
p.FSMC_AccessMode = FSMC_AccessMode_B;
nor_init.FSMC_Bank = FSMC_Bank1_NORSRAM2;
nor_init.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable;
nor_init.FSMC_MemoryType = FSMC_MemoryType_NOR;
nor_init.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b;
nor_init.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable;
nor_init.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;
nor_init.FSMC_WrapMode = FSMC_WrapMode_Disable;
nor_init.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState;
nor_init.FSMC_WriteOperation = FSMC_WriteOperation_Enable;
nor_init.FSMC_WaitSignal = FSMC_WaitSignal_Disable;
nor_init.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable;
nor_init.FSMC_AsyncWait = FSMC_AsyncWait_Disable;
nor_init.FSMC_WriteBurst = FSMC_WriteBurst_Disable;
nor_init.FSMC_ReadWriteTimingStruct = &p;
nor_init.FSMC_WriteTimingStruct = &p;
FSMC_NORSRAMInit(&nor_init);
/* Enable FSMC Bank1_NOR Bank. */
FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM2, ENABLE);
}
/*
*********************************************************************************************************
*********************************************************************************************************
* OS PROBE FUNCTIONS
*********************************************************************************************************
*********************************************************************************************************
*/
/*
*********************************************************************************************************
* OSProbe_TmrInit()
*
* Description : Select & initialize a timer for use with the uC/Probe Plug-In for uC/OS-II.
*
* Argument(s) : none.
*
* Return(s) : none.
*
* Caller(s) : OSProbe_Init().
*
* Note(s) : none.
*********************************************************************************************************
*/
#if ((APP_OS_PROBE_EN == DEF_ENABLED) && \
(OS_PROBE_HOOKS_EN == 1))
void OSProbe_TmrInit (void)
{
TIM_TimeBaseInitTypeDef tim_init;
tim_init.TIM_Period = 0xFFFF;
tim_init.TIM_Prescaler = 256;
tim_init.TIM_ClockDivision = TIM_CKD_DIV4;
tim_init.TIM_CounterMode = TIM_CounterMode_Up;
#if (OS_PROBE_TIMER_SEL == 2)
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
TIM_TimeBaseInit(TIM2, &tim_init);
TIM_SetCounter(TIM2, 0);
TIM_PrescalerConfig(TIM2, 256, TIM_PSCReloadMode_Immediate);
TIM_Cmd(TIM2, ENABLE);
#elif (OS_PROBE_TIMER_SEL == 3)
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
TIM_TimeBaseInit(TIM3, &tim_init);
TIM_SetCounter(TIM3, 0);
TIM_PrescalerConfig(TIM3, 256, TIM_PSCReloadMode_Immediate);
TIM_Cmd(TIM3, ENABLE);
#elif (OS_PROBE_TIMER_SEL == 4)
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);
TIM_TimeBaseInit(TIM4, &tim_init);
TIM_SetCounter(TIM4, 0);
TIM_PrescalerConfig(TIM4, 256, TIM_PSCReloadMode_Immediate);
TIM_Cmd(TIM4, ENABLE);
#endif
}
#endif
/*
*********************************************************************************************************
* OSProbe_TmrRd()
*
* Description : Read the current counts of a 16-bit free running timer.
*
* Argument(s) : none.
*
* Return(s) : The 16-bit counts of the timer in a 32-bit variable.
*
* Caller(s) : OSProbe_TimeGetCycles().
*
* Note(s) : none.
*********************************************************************************************************
*/
#if ((APP_OS_PROBE_EN == DEF_ENABLED) && \
(OS_PROBE_HOOKS_EN == 1))
CPU_INT32U OSProbe_TmrRd (void)
{
#if (OS_PROBE_TIMER_SEL == 2)
return ((CPU_INT32U)TIM_GetCounter(TIM2));
#elif (OS_PROBE_TIMER_SEL == 3)
return ((CPU_INT32U)TIM_GetCounter(TIM3));
#elif (OS_PROBE_TIMER_SEL == 4)
return ((CPU_INT32U)TIM_GetCounter(TIM4));
#endif
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -