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

📄 bsp.c

📁 UCOS在LPC2378开发板里面的原版移植程序.并且里面还包含了最新的UCPROBE,很强哦,另外还有UCOSVIEW和大量文档.
💻 C
📖 第 1 页 / 共 4 页
字号:
/*
*********************************************************************************************************
*                                     MICRIUM BOARD SUPPORT SUPPORT
*
*                          (c) Copyright 2003-2006; 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
*
*                                             NXP LPC2378
*                                                on the
*                                   IAR LPC2378-SK Evaluation Board
*
* Filename      : bsp.c
* Version       : V1.00
* Programmer(s) : Brian Nagel
*********************************************************************************************************
*/

#include <includes.h>

/*
*********************************************************************************************************
*                                          #DEFINE CONSTANTS
*********************************************************************************************************
*/
                                                                /* GPIO0 Pins                                               */
#define  GPIO0_RD1              ((CPU_INT32U)(1 <<  0))
#define  GPIO0_TD1              ((CPU_INT32U)(1 <<  1))
#define  GPIO0_TXD0             ((CPU_INT32U)(1 <<  2))
#define  GPIO0_RXD0             ((CPU_INT32U)(1 <<  3))
#define  GPIO0_RD2              ((CPU_INT32U)(1 <<  4))
#define  GPIO0_TD2              ((CPU_INT32U)(1 <<  5))
#define  GPIO0_SSEL1            ((CPU_INT32U)(1 <<  6))
#define  GPIO0_SCK1             ((CPU_INT32U)(1 <<  7))
#define  GPIO0_MISO1            ((CPU_INT32U)(1 <<  8))
#define  GPIO0_MOSI1            ((CPU_INT32U)(1 <<  9))
#define  GPIO0_TXD2             ((CPU_INT32U)(1 << 10))
#define  GPIO0_RXD2             ((CPU_INT32U)(1 << 11))
#define  GPIO0_Z_OUT            ((CPU_INT32U)(1 << 12))
#define  GPIO0_USB_LINK         ((CPU_INT32U)(1 << 13))
#define  GPIO0_USB_CONNECT      ((CPU_INT32U)(1 << 14))
#define  GPIO0_TXD1             ((CPU_INT32U)(1 << 15))
#define  GPIO0_RXD1             ((CPU_INT32U)(1 << 16))
#define  GPIO0_CP               ((CPU_INT32U)(1 << 17))
#define  GPIO0_BUT2             ((CPU_INT32U)(1 << 18))
#define  GPIO0_MCICLK           ((CPU_INT32U)(1 << 19))
#define  GPIO0_MCICMD           ((CPU_INT32U)(1 << 20))
#define  GPIO0_MCIPWR           ((CPU_INT32U)(1 << 21))
#define  GPIO0_MCIDAT0          ((CPU_INT32U)(1 << 22))
#define  GPIO0_Y_OUT            ((CPU_INT32U)(1 << 23))
#define  GPIO0_X_OUT            ((CPU_INT32U)(1 << 24))
#define  GPIO0_MIC_IN           ((CPU_INT32U)(1 << 25))
#define  GPIO0_AOUT             ((CPU_INT32U)(1 << 26))
#define  GPIO0_SDA0             ((CPU_INT32U)(1 << 27))
#define  GPIO0_SCL0             ((CPU_INT32U)(1 << 28))
#define  GPIO0_BUT1             ((CPU_INT32U)(1 << 29))
#define  GPIO0_PHY_INT          ((CPU_INT32U)(1 << 30))
#define  GPIO0_U2DP             ((CPU_INT32U)(1 << 31))

                                                                /* GPIO1 Pins                                               */
#define  GPIO1_E_TXD0           ((CPU_INT32U)(1 <<  0))
#define  GPIO1_E_TXD1           ((CPU_INT32U)(1 <<  1))
#define  GPIO1_E_TX_EN          ((CPU_INT32U)(1 <<  4))
#define  GPIO1_E_CRS0           ((CPU_INT32U)(1 <<  8))
#define  GPIO1_E_RXD0           ((CPU_INT32U)(1 <<  9))
#define  GPIO1_E_RXD1           ((CPU_INT32U)(1 << 10))
#define  GPIO1_E_RX_ER          ((CPU_INT32U)(1 << 14))
#define  GPIO1_E_RX_CLK         ((CPU_INT32U)(1 << 15))
#define  GPIO1_E_MDC            ((CPU_INT32U)(1 << 16))
#define  GPIO1_E_MDIO           ((CPU_INT32U)(1 << 17))
#define  GPIO1_UP               ((CPU_INT32U)(1 << 18))
#define  GPIO1_DOWN             ((CPU_INT32U)(1 << 19))
#define  GPIO1_SCK0             ((CPU_INT32U)(1 << 20))
#define  GPIO1_SSEL0            ((CPU_INT32U)(1 << 21))
#define  GPIO1_RIGHT            ((CPU_INT32U)(1 << 22))
#define  GPIO1_MISO0            ((CPU_INT32U)(1 << 23))
#define  GPIO1_MOSI0            ((CPU_INT32U)(1 << 24))
#define  GPIO1_CENTER           ((CPU_INT32U)(1 << 25))
#define  GPIO1_LCD_BL           ((CPU_INT32U)(1 << 26))
#define  GPIO1_LEFT             ((CPU_INT32U)(1 << 27))
#define  GPIO1_G_SEL2           ((CPU_INT32U)(1 << 28))
#define  GPIO1_WP               ((CPU_INT32U)(1 << 29))
#define  GPIO1_VBUS             ((CPU_INT32U)(1 << 30))
#define  GPIO1_AIN5             ((CPU_INT32U)(1 << 31))

                                                                /* GPIO2 Pins                                               */
#define  GPIO2_ISP_E            ((CPU_INT32U)(1 << 10))
#define  GPIO2_MCIDAT1          ((CPU_INT32U)(1 << 11))
#define  GPIO2_MCIDAT2          ((CPU_INT32U)(1 << 12))
#define  GPIO2_MCIDAT3          ((CPU_INT32U)(1 << 13))
#define  GPIO2_LCD_RST          ((CPU_INT32U)(1 << 26))


/*
*********************************************************************************************************
*                                               DATA TYPES
*********************************************************************************************************
*/

typedef  void (*BSP_FNCT_PTR)(void);                            /* Pointer to ISR handler function                          */

/*
*********************************************************************************************************
*                                              VARIABLES
*********************************************************************************************************
*/

        CPU_INT32U  VIC_SpuriousInt;

/*
*********************************************************************************************************
*                                              PROTOTYPES
*********************************************************************************************************
*/

static  void  PLL_Init          (void);
static  void  MAM_Init          (void);
static  void  GPIO_Init         (void);
static  void  VIC_Init          (void);
static  void  ADC_Init          (void);
static  void  LCD_LightInit     (void);

static  void  Tmr_TickInit      (void);


static  void  VIC_Dummy         (void);                         /* Prototypes for dummy interrupt handlers                  */
static  void  VIC_DummyWDT      (void);
static  void  VIC_DummySW       (void);
static  void  VIC_DummyDEBUGRX  (void);
static  void  VIC_DummyDEBUGTX  (void);
static  void  VIC_DummyTIMER0   (void);
static  void  VIC_DummyTIMER1   (void);
static  void  VIC_DummyUART0    (void);
static  void  VIC_DummyUART1    (void);
static  void  VIC_DummyPWM01    (void);
static  void  VIC_DummyI2C0     (void);
static  void  VIC_DummySPI      (void);
static  void  VIC_DummySSP1     (void);
static  void  VIC_DummyPLL      (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);
static  void  VIC_DummyAD0      (void);
static  void  VIC_DummyI2C1     (void);
static  void  VIC_DummyBOD      (void);
static  void  VIC_DummyETHERNET (void);
static  void  VIC_DummyUSB      (void);
static  void  VIC_DummyCAN01    (void);
static  void  VIC_DummyMMC      (void);
static  void  VIC_DummyGP_DMA   (void);
static  void  VIC_DummyTIMER2   (void);
static  void  VIC_DummyTIMER3   (void);
static  void  VIC_DummyUART2    (void);
static  void  VIC_DummyUART3    (void);
static  void  VIC_DummyI2C2     (void);
static  void  VIC_DummyI2S      (void);


/*
******************************************************************************************************************************
******************************************************************************************************************************
**                                         Global Functions
******************************************************************************************************************************
******************************************************************************************************************************
*/

/*
*********************************************************************************************************
*                                         BSP INITIALIZATION
*
* Description : This function should be called by your application code before you make use of any of the
*               functions found in this module.
*
* Arguements  : None
*
* Returns     : None
*********************************************************************************************************
*/

void  BSP_Init (void)
{
    PLL_Init();                                                 /* Initialize the PLL                                       */
    MAM_Init();                                                 /* Initialize the Memory Acceleration Module                */
    GPIO_Init();                                                /* Initialize the board's I/Os                              */
    ADC_Init();                                                 /* Initialize the board's ADC                               */
    LCD_LightInit();                                            /* Initialize the PWM for the LCD backlight                 */
    VIC_Init();                                                 /* Initialize the Vectored Interrupt Controller             */
    Tmr_TickInit();                                             /* Initialize the uC/OS-II tick interrupt                   */
}


/*
*********************************************************************************************************
*                                      Get the CPU Clock Frequency
*
* Description : This function reads CPU registers to determine the CPU clock frequency
*
* Arguements  : None
*
* Returns     : The CPU Core clock in Hz
*
* Notes       : None
*********************************************************************************************************
*/

CPU_INT32U  BSP_CPU_ClkFreq (void)
{
    CPU_INT32U  msel;
    CPU_INT32U  nsel;
    CPU_INT32U  fin;
    CPU_INT32U  pll_clk_feq;                                    /* When the PLL is enabled, this is Fcco                    */
    CPU_INT32U  clk_div;
    CPU_INT32U  clk_freq;


    switch (CLKSRCSEL & 0x03) {                                 /* Determine the current clock source                       */
        case 0:
             fin        =  IRC_OSC_FRQ;
             break;

        case 1:
             fin        =  MAIN_OSC_FRQ;
             break;

        case 2:
             fin        =  RTC_OSC_FRQ;
             break;

        default:
             fin        =  IRC_OSC_FRQ;
             break;
    }

    if ((PLLSTAT & (1 << 25)) > 0) {                                /* If the PLL is currently enabled and connected        */
        msel        = (CPU_INT32U)(PLLSTAT & 0x3FFF) + 1;           /* Obtain the PLL multiplier                            */
        nsel        = (CPU_INT32U)((PLLSTAT >>   16) & 0x0F) + 1;   /* Obtain the PLL divider                               */
        pll_clk_feq = (2 * msel * fin / nsel);                      /* Compute the PLL output frequency                     */
    } else {
        pll_clk_feq = (fin);                                        /* The PLL is bypassed                                  */
    }

    clk_div         = (CPU_INT08U)(CCLKCFG & 0x0F) + 1;             /* Obtain the CPU core clock divider                    */
    clk_freq        = (CPU_INT32U)(pll_clk_feq / clk_div);          /* Compute the ARM Core clock frequency                 */

    return (clk_freq);
}

/*
*********************************************************************************************************
*                                      Get a Peripheral Clock Frequency
*
* Description : This function reads CPU registers to determine the the clock frequency for the specified
*               peripheral
*
* Arguements  : An ID, one of PCLK_??? defined in bsp.c
*
* Returns     : The peripheral's clock in Hz
*********************************************************************************************************
*/


CPU_INT32U  BSP_CPU_PclkFreq (CPU_INT08U  pclk)
{
    CPU_INT32U  clk_freq;
    CPU_INT32U  selection;


    clk_freq    = BSP_CPU_ClkFreq();

    switch (pclk) {
        case PCLK_WDT:
        case PCLK_TIMER0:
        case PCLK_TIMER1:
        case PCLK_UART0:
        case PCLK_UART1:
        case PCLK_PWM0:
        case PCLK_PWM1:
        case PCLK_I2C0:
        case PCLK_SPI:
        case PCLK_RTC:
        case PCLK_SSP1:
        case PCLK_DAC:
        case PCLK_ADC:
        case PCLK_CAN1:
        case PCLK_CAN2:
        case PCLK_ACF:
             selection = ((PCLKSEL0 >> (pclk * 2)) & 0x03);
             if (selection == 0) {
                 return (clk_freq / 4);
             } else if (selection == 1) {
                 return (clk_freq);
             } else if (selection == 2) {
                 return (clk_freq / 2);
             } else {
                 return (clk_freq / 8);
             }

        case PCLK_BAT_RAM:
        case PCLK_GPIO:
        case PCLK_PCB:
        case PCLK_I2C1:
        case PCLK_SSP0:
        case PCLK_TIMER2:
        case PCLK_TIMER3:

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -