📄 bsp.c
字号:
/*
*********************************************************************************************************
* 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 + -