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

📄 bsp.c

📁 在IAR EWARM开发环境下的ucos_2操作系统在LPC2200上的应用
💻 C
📖 第 1 页 / 共 3 页
字号:
/*
*********************************************************************************************************
*                                     MICIRUM BOARD SUPPORT PACKAGE
*
*                          (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 write a similar
*                   product.  This file may only be used in accordance with a license
*                   and should not be redistributed in any way.
*********************************************************************************************************
*/

/*
*********************************************************************************************************
*
*                                         BOARD SUPPORT PACKAGE
*
*                                              NXP LPC2138
*
* Filename      : bsp.c
* Version       : V1.00
* Programmer(s) : FT
*********************************************************************************************************
*/

/*
*********************************************************************************************************
*                                             INCLUDE FILES
*********************************************************************************************************
*/

#define  BSP_MODULE
#include <includes.h>


/*
*********************************************************************************************************
*                                            LOCAL DEFINES
*********************************************************************************************************
*/

                                                                /* PLL configuration register                                */
#define  BSP_PLLCFG_M                            3              /* CPUclk < 70 Mhz. Fcco 156-320 Mhz. Fosc = 10-25 Mhz ...   */ 
                                                                /* ... CPUclk = Fosc   * M     = 60 Mhz.               ...   */   
#define  BSP_PLLCFG_P                            1              /* ... Fcco   = CPUClk * 2 * P = 240 Mhz                     */
                                                                /* ---------------------- GPIO0 PINS ----------------------- */
#define  BSP_GPI00_LED_GRP              0x00003FFF              /* GPIO Port 0.0-0.13 : Board LED                            */
#define  BSP_GPIO0_PB2                  DEF_BIT_14              /* GPIO Port 0.15     : Board EINT2                          */
#define  BSP_GPIO0_PB3                  DEF_BIT_15              /* GPIO Port 0.16     : Board EINT3                          */
#define  BSP_GPIO0_PB1                  DEF_BIT_16              /* GPIO Port 0.14     : Board EINT1                          */
#define  BSP_GPIO0_PB_GRP               BSP_GPIO0_PB1 | \
                                        BSP_GPIO0_PB2 | \
                                        BSP_GPIO0_PB3                                            

#define  BSP_GPIO0_74HC595_DS           DEF_BIT_24              /* GPIO0 port 0.24    : 74HC595  Data input                  */
#define  BSP_GPIO0_74HC595_SH_CP        DEF_BIT_25              /* GPIO0 port 0.24    : 74HC595  Shift register   clk input  */
#define  BSP_GPIO0_74HC595_ST_CP        DEF_BIT_26              /* GPIO0 port 0.24    : 74HC595  Storage register clk input  */
#define  BSP_GPIOO_74HC595_GRP          BSP_GPIO0_74HC595_DS    | \
                                        BSP_GPIO0_74HC595_SH_CP | \
                                        BSP_GPIO0_74HC595_ST_CP

#define  BSP_74HC595_NBR_OUT                     8              /* Number of parallel output of the IC 74HC595               */
#define  BSP_74HC595_LIGHT_LCD_PIN_NBR           0              /* 74HC595 Light LCD pin number                              */
#define  BSP_74HC595_LCD_RW_PIN_NBR              1              /* 74HC595 RE LCD pin number                                 */
#define  BSP_74HC595_LCD_RS_PIN_NBR              2              /* 74HC595 RS LCD pin number                                 */
#define  BSP_74HC595_LCD_E_PIN_NBR               3              /* 74HC595 E LCD pin number                                  */


/*
*********************************************************************************************************
*                                           LOCAL CONSTANTS
*********************************************************************************************************
*/


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


/*
*********************************************************************************************************
*                                            LOCAL TABLES
*********************************************************************************************************
*/


/*
*********************************************************************************************************
*                                       LOCAL GLOBAL VARIABLES
*********************************************************************************************************
*/

        CPU_INT32U  VIC_SpuriousInt;

#ifdef DISP_MODULE_PRESENT
static  CPU_INT08U  BSP_74HC595_Data;                           /* The current parallel output of the 74HC5950 IC            */
#endif

/*
*********************************************************************************************************
*                                      LOCAL FUNCTION PROTOTYPES
*********************************************************************************************************
*/

static  void  BSP_LED_Init         (void);

static  void  BSP_PB_Init          (void);

static  void  BSP_PLL_Init         (void);

#ifdef DISP_MODULE_PRESENT
static  void  BSP_74HC595_Init     (void);
static  void  BSP_74HC595_SetBit   (CPU_INT08U  bit);
static  void  BSP_74HC595_ClrBit   (CPU_INT08U  bit);
static  void  BSP_74HC595_WrByte   (CPU_INT08U  data);

static  void  BSP_DispE_High       (void);
static  void  BSP_DispE_Low        (void);
static  void  BSP_DispRW_Low       (void);
#endif

static  void  BSP_Tmr_TickInit     (void);

static  void  BSP_VIC_Init         (void);
static  void  BSP_VIC_Dummy        (void);
static  void  BSP_VIC_DummyWDT     (void);
static  void  BSP_VIC_DummyDBGRx   (void);
static  void  BSP_VIC_DummyDBGTx   (void);
static  void  BSP_VIC_DummyTIMER0  (void);
static  void  BSP_VIC_DummyTIMER1  (void);
static  void  BSP_VIC_DummyUART0   (void);
static  void  BSP_VIC_DummyUART1   (void);
static  void  BSP_VIC_DummyI2C0    (void);
static  void  BSP_VIC_DummySPI     (void);
static  void  BSP_VIC_DummySSP     (void);
static  void  BSP_VIC_DummyPLL     (void);
static  void  BSP_VIC_DummyRTC     (void);
static  void  BSP_VIC_DummyEINT0   (void);
static  void  BSP_VIC_DummyEINT1   (void);

/*
*********************************************************************************************************
*                                     LOCAL CONFIGURATION ERRORS
*********************************************************************************************************
*/

/*
*********************************************************************************************************
*********************************************************************************************************
**                                         GLOBAL FUNCTIONS
*********************************************************************************************************
*********************************************************************************************************
*/

/*
*********************************************************************************************************
*                                             BSP_Init()
*
* Description : Initialize the Board Support Package (BSP).
*
* Argument(s) : none.
*
* Return(s)   : none.
*
* Note(s)     : (1) This function SHOULD be called before any other BSP function is called.
*********************************************************************************************************
*/

void  BSP_Init (void)
{
    MEMMAP = 1;                                             
    BSP_VIC_Init();   
    BSP_Tmr_TickInit();                                         /* Initialize the uC/OS-II tick interrupt                   */
    BSP_PB_Init();                                              /* Initialize the push button I/O                           */
    BSP_LED_Init();                                             /* Initialize the LED controls                              */
    BSP_PLL_Init();                                             /* Initialize PLL0 and the VPB Divider Register             */                                        /* Initialize the Vectored Interrupt Controller             */
}


/*
*********************************************************************************************************
*                                            BSP_CPU_ClkFreq()
*
* Description : Get the CPU clock frequency.
*
* Argument(s) : none.
*
* Return(s)   : The CPU clock frequency, in Hz.
*********************************************************************************************************
*/

CPU_INT32U  BSP_CPU_ClkFreq (void)
{
    CPU_INT32U  msel;
    CPU_INT32U  cpu_clk_freq;


    msel         = (CPU_INT32U)(PLLCFG & 0x1F);
    cpu_clk_freq =  BSP_BOARD_XTAL_FREQ * (msel + 1);
    return (cpu_clk_freq);
}


/*
*********************************************************************************************************
*                                            BSP_CPU_PclkFreq()
*
* Description : Get the peripheral clock frequency.
*
* Argument(s) : none.
*
* Return(s)   : The peripheral clock frequency, in Hz.
*********************************************************************************************************
*/

CPU_INT32U  BSP_CPU_PclkFreq (void)
{
    CPU_INT32U  vpbdiv;
    CPU_INT32U  clk_freq;
    CPU_INT32U  pclk_freq;


    
    clk_freq     = BSP_CPU_ClkFreq();

    vpbdiv       = (CPU_INT32U)(APBDIV & 0x03);
    switch (vpbdiv) {
        case 0:
             pclk_freq = clk_freq / 4;
             break;

        case 1:
             pclk_freq = clk_freq;
             break;

        case 2:
             pclk_freq = clk_freq / 2;
             break;

        default:
             pclk_freq = clk_freq / 4;
             break;
    }
    return (pclk_freq);
}


/*
*********************************************************************************************************
*                                          OS_CPU_ExceptHndlr()
*
* Description : Handle any exceptions.
*
* Argument(s) : except_id     ARM exception type:
*
*                                  OS_CPU_ARM_EXCEPT_RESET             0x00
*                                  OS_CPU_ARM_EXCEPT_UNDEF_INSTR       0x01
*                                  OS_CPU_ARM_EXCEPT_SWI               0x02
*                                  OS_CPU_ARM_EXCEPT_PREFETCH_ABORT    0x03
*                                  OS_CPU_ARM_EXCEPT_DATA_ABORT        0x04
*                                  OS_CPU_ARM_EXCEPT_ADDR_ABORT        0x05
*                                  OS_CPU_ARM_EXCEPT_IRQ               0x06
*                                  OS_CPU_ARM_EXCEPT_FIQ               0x07
*
* Return(s)   : none.
*
* Caller(s)   : OS_CPU_ARM_EXCEPT_HANDLER(), which is declared in os_cpu_a.s.
*********************************************************************************************************
*/

void  OS_CPU_ExceptHndlr (CPU_INT32U  except_id)
{
    CPU_FNCT_VOID  pfnct;
    if (except_id == OS_CPU_ARM_EXCEPT_IRQ) {
        pfnct = (CPU_FNCT_VOID)VICVectAddr4;                     /* Read the interrupt vector from the VIC                   */
        while (pfnct != (CPU_FNCT_VOID)0) {                     /* Make sure we don't have a NULL pointer                   */
          (*pfnct)();                                           /* Execute the ISR for the interrupting device              */
//            VICVectAddr = 1;                                    /* Acknowlege the VIC interrupt                             */
            pfnct = (CPU_FNCT_VOID)VICVectAddr;                 /* Read the interrupt vector from the VIC                   */
        }
    } else {
                                                                /* Infinite loop on other exceptions.                       */
                                                                /* Should be replaced by other behavior (reboot, etc.)      */
        while (DEF_TRUE) {
            ;
        }
    }
}


/*
*********************************************************************************************************
*                                           BSP_IntDisAll()
*
* Description : Disable ALL interrupts.
*
* Argument(s) : none.
*
* Return(s)   : none.
*********************************************************************************************************
*/

void  BSP_IntDisAll (void)
{
    VICIntEnClear = 0xFFFFFFFFL;                                /* Disable ALL interrupts                                   */
}


/*
*********************************************************************************************************
*********************************************************************************************************
**                                          uC/LCD FUNCTIONS
*********************************************************************************************************
*********************************************************************************************************
*/


/*
*********************************************************************************************************
*                                           BSP_LCD_LightOn()
*
* Description : This function is used to turn on the LCD's light.
*
* Arguments   : none
*
* Returns     : none
*********************************************************************************************************
*/
#ifdef DISP_MODULE_PRESENT
void  BSP_LCD_LightOn (void)
{
    BSP_74HC595_SetBit(BSP_74HC595_LIGHT_LCD_PIN_NBR);
}
#endif

/*
*********************************************************************************************************
*                                           BSP_LCD_LightOff()
*
* Description : This function is used to turn off the LCD's light.
*
* Arguments   : none
*
* Returns     : none
*********************************************************************************************************
*/
#ifdef DISP_MODULE_PRESENT
void  BSP_LCD_LightOff (void)
{
    BSP_74HC595_ClrBit(BSP_74HC595_LIGHT_LCD_PIN_NBR);

}
#endif


/*
*********************************************************************************************************
*                                            DispInitPort()
*
* Description : Initializes the I/O ports used by the display driver.
*
* Argument(s) : none.
*
* Return(s)   : none.
*
* Note(s)     : (1) The I/Os for the LCD module are initialized in BSP_IO_Init().
*********************************************************************************************************
*/

#ifdef DISP_MODULE_PRESENT
void  DispInitPort (void)
{
    BSP_74HC595_Init();
}
#endif

/*
*********************************************************************************************************
*                                              DispDataWr()
*
* Description : Sends a single byte to the display device.
*
* Argument(s) : 'data'      Data to send to the display device
*
* Return(s)   : none.
*
* Note(s)     : (1) The LPC2103 evaluation board uses a 4 bit interface trought the 74HC595 IC.
*                   The 'BSP_74HC595_Data' variable holds the current  parallel output og the 74HC595
*                   this is needed to modify specific bits in the output 

⌨️ 快捷键说明

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