⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bsp_ram.c

📁 uC/OS-II在LPC2214上的移植及多任务实例
💻 C
📖 第 1 页 / 共 3 页
字号:
/*
*********************************************************************************************************
*                                               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 + -