📄 bsp_ram.c
字号:
/*
*********************************************************************************************************
* Philips LPC2214
* LPC2214 SMC Board Support Package
*
* (c) Copyright 2006, TOKHEIM HENGSHAN
* All Rights Reserved
*
*
* File : BSP.C
* By : ZHANG CAI
*********************************************************************************************************
*/
/*
**===========================================================================
** 2. INCLUDE FILES
** 2.1 Standard include files
**===========================================================================
*/
#include <bsp.h>
#define BSP_GLOBALS
/*
**===========================================================================
** 3. DECLARATIONS
** 3.1 Internal constants
**===========================================================================
*/
/*
*********************************************************************************************************
* CONSTANTS
*********************************************************************************************************
*/
#define BSP_DEBUG 0
#define BSP_PLL_STATUS_LOCKED (INT16U)(1 << 10)
#define BSP_UNDEF_INSTRUCTION_VECTOR_ADDR (*(INT32U *)0x00000004L)
#define BSP_SWI_VECTOR_ADDR (*(INT32U *)0x00000008L)
#define BSP_PREFETCH_ABORT_VECTOR_ADDR (*(INT32U *)0x0000000CL)
#define BSP_DATA_ABORT_VECTOR_ADDR (*(INT32U *)0x00000010L)
#define BSP_IRQ_VECTOR_ADDR (*(INT32U *)0x00000018L)
#define BSP_FIQ_VECTOR_ADDR (*(INT32U *)0x0000001CL)
#define BSP_IRQ_ISR_ADDR (*(INT32U *)0x00000038L)
#define BSP_FIQ_ISR_ADDR (*(INT32U *)0x0000003CL)
/*
*********************************************************************************************************
* EMC
*********************************************************************************************************
*/
#define BSP_BCFG0_EMC 0x1000FFEF /* Bank Configuration Register 0 */
#define BSP_BCFG0_EMC_MASK 0xFF00FFEF /* Used bits */
#define BSP_BCFG1_EMC 0x10008608 /* Bank Configuration Register 1 */
#define BSP_BCFG1_EMC_MASK 0xFF00FFEF /* Used bits */
#define BSP_BCFG2_EMC 0x1000FFEF /* Bank Configuration Register 2 */
#define BSP_BCFG2_EMC_MASK 0xFF00FFEF /* Used bits */
#define BSP_BCFG3_EMC 0x1000FFEF /* Bank Configuration Register 3 */
#define BSP_BCFG3_EMC_MASK 0xFF00FFEF /* Used bits */
/*
*********************************************************************************************************
* PCB
*********************************************************************************************************
*/
#define BSP_PINSEL0_PCB 0x800555C5 /* Pin Function Select Register 0 */
#define BSP_PINSEL0_PCB_MASK 0xFFFFFFFF /* Used bits */
#define BSP_PINSEL1_PCB 0x20000001 /* Pin Function Select Register 1 */
#define BSP_PINSEL1_PCB_MASK 0x3FCFFFFF /* Used bits */
#define BSP_PINSEL2_PCB 0x0F816914 /* Pin Function Select Register 2 */
#define BSP_PINSEL2_PCB_MASK 0x0FF3E9FC /* Used bits */
/*
*********************************************************************************************************
* SCB
*********************************************************************************************************
*/
#define BSP_MAMCR_SCB 0x00000002 /* BSPM Control Register */
#define BSP_MAMCR_SCB_MASK 0x00000003 /* Used bits */
#define BSP_MAMTIM_SCB 0x00000003 /* BSPM Timing Control Register */
#define BSP_MAMTIM_SCB_MASK 0x00000007 /* Used bits */
#define BSP_MEMMAP_SCB 0x00000001 /* Memory Mapping Control Register */
#define BSP_MEMMAP_SCB_MASK 0x00000003 /* Used bits */
#define BSP_PLLCON_SCB 0x00000001 /* PLL Control Register */
#define BSP_PLLCON_SCB_MASK 0x00000003 /* Used bits */
#define BSP_PLLCFG_SCB 0x00000044 /* PLL Configuration Register */
#define BSP_PLLCFG_SCB_MASK 0x0000007F /* Used bits */
#define BSP_PLLFEED_SCB 0x00000000 /* PLL Feed Register */
#define BSP_PLLFEED_SCB_MASK 0x000000FF /* Used bits */
#define BSP_PCON_SCB 0x00000000 /* Power Control Register */
#define BSP_PCON_SCB_MASK 0x00000003 /* Used bits */
#define BSP_PCONP_SCB 0x00000F9E /* Power Control for Peripherals Register */
#define BSP_PCONP_SCB_MASK 0x00001FBE /* Used bits */
#define BSP_VPBDIV_SCB 0x00000022 /* VPB Divider Register */
#define BSP_VPBDIV_SCB_MASK 0x00000003 /* Used bits */
#define BSP_EXTINT_SCB 0x00000000 /* External Interrupt Flag Register */
#define BSP_EXTINT_SCB_MASK 0x0000000F /* Used bits */
#define BSP_EXTWAKE_SCB 0x0000000F /* External Interrupt Wakeup Register */
#define BSP_EXTWAKE_SCB_MASK 0x0000000F /* Used bits */
#define BSP_EXTMODE_SCB 0x0000000F /* External Interrupt Mode Register */
#define BSP_EXTMODE_SCB_MASK 0x0000000F /* Used bits */
#define BSP_EXTPOLAR_SCB 0x00000000 /* External Interrupt Polarity Register */
#define BSP_EXTPOLAR_SCB_MASK 0x0000000F /* Used bits */
/*
*********************************************************************************************************
* GPIO
*********************************************************************************************************
*/
#define BSP_IO0PIN_GPIO 0x00000000 /* GPIO 0 Pin Value Register */
#define BSP_IO0PIN_GPIO_MASK 0xFFFFFFFF /* Used bits */
#define BSP_IO0SET_GPIO 0x00000000 /* GPIO 0 Output Set Register */
#define BSP_IO0SET_GPIO_MASK 0xFFFFFFFF /* Used bits */
#define BSP_IO0DIR_GPIO 0x3BFE0551 /* GPIO 0 Direction Register */
#define BSP_IO0DIR_GPIO_MASK 0xFFFFFFFF /* Used bits */
#define BSP_IO0CLR_GPIO 0x00000000 /* GPIO 0 output set register */
#define BSP_IO0CLR_GPIO_MASK 0xFFFFFFFF /* Used bits */
#define BSP_IO1PIN_GPIO 0x00000000 /* GPIO 1 Pin Value Register */
#define BSP_IO1PIN_GPIO_MASK 0xFFFFFFFF /* Used bits */
#define BSP_IO1SET_GPIO 0x00000000 /* GPIO 1 Output Set Register */
#define BSP_IO1SET_GPIO_MASK 0xFFFFFFFF /* Used bits */
#define BSP_IO1DIR_GPIO 0x0FF80000 /* GPIO 1 Direction Register */
#define BSP_IO1DIR_GPIO_MASK 0xFFFFFFFF /* Used bits */
#define BSP_IO1CLR_GPIO 0x00000000 /* GPIO 1 output set register */
#define BSP_IO1CLR_GPIO_MASK 0xFFFFFFFF /* Used bits */
#define BSP_IO2PIN_GPIO 0x00000000 /* GPIO 2 Pin Value Register */
#define BSP_IO2PIN_GPIO_MASK 0xFFFFFFFF /* Used bits */
#define BSP_IO2SET_GPIO 0x00000000 /* GPIO 2 Output Set Register */
#define BSP_IO2SET_GPIO_MASK 0xFFFFFFFF /* Used bits */
#define BSP_IO2DIR_GPIO 0x13F00000 /* GPIO 2 Direction Register */
#define BSP_IO2DIR_GPIO_MASK 0xFFFFFFFF /* Used bits */
#define BSP_IO2CLR_GPIO 0x00000000 /* GPIO 2 output set register */
#define BSP_IO2CLR_GPIO_MASK 0xFFFFFFFF /* Used bits */
#define BSP_IO3PIN_GPIO 0x00000000 /* GPIO 3 Pin Value Register */
#define BSP_IO3PIN_GPIO_MASK 0xFFFFFFFF /* Used bits */
#define BSP_IO3SET_GPIO 0x00000000 /* GPIO 3 Output Set Register */
#define BSP_IO3SET_GPIO_MASK 0xFFFFFFFF /* Used bits */
#define BSP_IO3DIR_GPIO 0xFFFFFFFF /* GPIO 3 Direction Register */
#define BSP_IO3DIR_GPIO_MASK 0xFFFFFFFF /* Used bits */
#define BSP_IO3CLR_GPIO 0x00000000 /* GPIO 3 output set register */
#define BSP_IO3CLR_GPIO_MASK 0xFFFFFFFF /* Used bits */
/*
*********************************************************************************************************
* DATA TYPES
*********************************************************************************************************
*/
typedef void (*BSP_PFNCT)(void);
/*
*********************************************************************************************************
* VARIABLES
*********************************************************************************************************
*/
INT32U Tmr_ReloadCnts;
INT32U VIC_SpuriousInt;
/*
*********************************************************************************************************
* PROTOTYPES
*********************************************************************************************************
*/
static void BSP_GPIO_Init(void);
static void BSP_PLL_Init(void);
void BSP_EMC_Init( void );
void BSP_SCB_Init( void );
void BSP_PCB_Init( void );
static void Tmr_TickInit(void);
static void VIC_Init(void);
static void VIC_Dummy(void);
static void VIC_DummyWDT(void);
static void VIC_DummyTIMER0(void);
static void VIC_DummyTIMER1(void);
static void VIC_DummyUART0(void);
static void VIC_DummyUART1(void);
static void VIC_DummySPI0(void);
static void VIC_DummyRTC(void);
static void VIC_DummyEINT0(void);
static void VIC_DummyEINT1(void);
static void VIC_DummyEINT2(void);
static void VIC_DummyEINT3(void);
/*
**===========================================================================
** 4. GLOBAL FUNCTIONS (declared as 'extern' in some header file)
**===========================================================================
*/
void BSP_EMC_Init( void )
/*
**---------------------------------------------------------------------------
**
** Abstract:
** Initialises the EMC module. Only sets those registers with
** values not equal to the power-on reset values.
**
** Parameters:
** None
**
** Returns:
** None
**
**---------------------------------------------------------------------------
*/
{
/*--- Init EMC registers ---*/
BCFG0 = ( BCFG0 & ~BSP_BCFG0_EMC_MASK ) | BSP_BCFG0_EMC;
BCFG1 = ( BCFG1 & ~BSP_BCFG1_EMC_MASK ) | BSP_BCFG1_EMC;
BCFG2 = ( BCFG2 & ~BSP_BCFG2_EMC_MASK ) | BSP_BCFG2_EMC;
BCFG3 = ( BCFG3 & ~BSP_BCFG3_EMC_MASK ) | BSP_BCFG3_EMC;
} /* BSP_EMC_Init */
void BSP_PCB_Init( void )
/*
**---------------------------------------------------------------------------
**
** Abstract:
** Initialises the PCB module. Only sets those registers with
** values not equal to the power-on reset values.
**
** Parameters:
** None
**
** Returns:
** None
**
**---------------------------------------------------------------------------
*/
{
/*--- Init PCB registers ---*/
PINSEL0 = BSP_PINSEL0_PCB;
PINSEL1 = ( PINSEL1 & ~BSP_PINSEL1_PCB_MASK ) | BSP_PINSEL1_PCB;
PINSEL2 = ( PINSEL2 & ~BSP_PINSEL2_PCB_MASK ) | BSP_PINSEL2_PCB;
} /* BSP_PCB_Init */
void BSP_SCB_Init( void )
/*
**---------------------------------------------------------------------------
**
** Abstract:
** Initialises the SCB module. Only sets those registers with
** values not equal to the power-on reset values.
**
** Parameters:
** None
**
** Returns:
** None
**
**---------------------------------------------------------------------------
*/
{
/*--- Init SCB registers ---*/
MAMCR = ( MAMCR & ~BSP_MAMCR_SCB_MASK ) | BSP_MAMCR_SCB;
MAMTIM = ( MAMTIM & ~BSP_MAMTIM_SCB_MASK ) | BSP_MAMTIM_SCB;
// MEMMAP = ( MEMMAP & ~BSP_MEMMAP_SCB_MASK ) | BSP_MEMMAP_SCB;
PCONP = ( PCONP & ~BSP_PCONP_SCB_MASK ) | BSP_PCONP_SCB;
EXTWAKE = ( EXTWAKE & ~BSP_EXTWAKE_SCB_MASK ) | BSP_EXTWAKE_SCB;
EXTMODE = ( EXTMODE & ~BSP_EXTMODE_SCB_MASK ) | BSP_EXTMODE_SCB;
} /* BSP_SCB_Init */
/*
*********************************************************************************************************
* Set the CPU Clock Frequency
*
* Description: This function sets up and activates the PLL
*********************************************************************************************************
*/
void BSP_PLL_Init (void)
{
PLLCON = 0x01; /* Activate the PLL */
VPBDIV = 0x00;
PLLCFG = (BSP_PLL_MSEL - 1); /* Set the multiplier */
PLLCFG |= ((BSP_PLL_PSEL - 1) << 5); /* Set the divider */
PLLFEED = 0xAA; /* Validation sequence, 0xAA */
PLLFEED = 0x55; /* Validation sequence, 0x55 */
while((PLLSTAT & BSP_PLL_STATUS_LOCKED) == 0); /* Wait, then verify that the PLL locks */
PLLCON = 0x03; /* Connect the PLL so cclk is driven by the PLL */
PLLFEED = 0xAA; /* Validation sequence, 0xAA */
PLLFEED = 0x55; /* Validation sequence, 0x55 */
}
/*
*********************************************************************************************************
* Get the CPU Clock Frequency
*
* Description: This function reads CPU registers to determine the CPU clock frequency of the chip.
*********************************************************************************************************
*/
INT32U BSP_CPU_ClkFreq (void)
{
INT32U msel;
INT32U cpu_clk_freq;
msel = (INT32U)(PLLCFG & 0x1F);
cpu_clk_freq = CPU_OSC_FREQ * (msel+1);
return (cpu_clk_freq);
}
/*
*********************************************************************************************************
* Get the Peripheral Clock Frequency
*
* Description: This function reads CPU registers to determine the peripheral clock frequency of the chip.
*********************************************************************************************************
*/
INT32U BSP_CPU_ClkFreqPeripheral (void)
{
INT32U msel;
INT32U vpbdiv;
INT32U cpu_clk_freq;
INT32U cpu_peripheral_clk_freq;
msel = (INT32U)(PLLCFG & 0x1F);
cpu_clk_freq = CPU_OSC_FREQ * (msel+1);
vpbdiv = (INT32U)(VPBDIV & 0x03);
switch (vpbdiv) {
case 0:
cpu_peripheral_clk_freq = cpu_clk_freq / 4;
break;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -