📄 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 LPC2888
*
* Filename : bsp.c
* Version : V1.00
* Programmer(s) : Brian Nagel
*********************************************************************************************************
*/
/*
*********************************************************************************************************
* #INCLUDES
*********************************************************************************************************
*/
#include <includes.h>
/*
*********************************************************************************************************
* #DEFINE CONSTANTS
*********************************************************************************************************
*/
#define CPU_OSC_FREQ 12 /* MHz */
#define BSP_LCD_NUMBER_OF_LINES 8
#define BSP_LCD_CHARACTERS_PER_LINE 16
#define BSP_LCD_NUMBER_OF_PAGES 9
#define BSP_LCD_NUMBER_OF_ROWS 65
#define BSP_LCD_COLUMNS_PER_PAGE 132
#define BSP_SYSFSR1_MADD 0x70
#define BSP_SYSFSR1_MSUB 0xF8
#define BSP_SYSFSR2_MADD 0x17
#define BSP_SYSFSR2_MSUB 0xE7
#define BSP_APB0FSR0_MADD 0xF0
#define BSP_APB0FSR0_MSUB 0xF0
/*
*********************************************************************************************************
* I/O PIN NAMES
*********************************************************************************************************
*/
#define BSP_LED 0x00000002
#define BSP_PB1 0x00000008
#define BSP_PB2 0x00000004
/*
*********************************************************************************************************
* LCD MODULE COMMANDS
*********************************************************************************************************
*/
#define LCD_DISPLAY_ON 0xAF
#define LCD_DISPLAY_OFF 0xAE
#define LCD_START_LINE_SET 0x40
#define LCD_PAGE_ADDRESS_SET 0xB0
#define LCD_COLUMN_ADDRESS_UPPER_BIT_SET 0x10
#define LCD_COLUMN_ADDRESS_LOWER_BIT_SET 0x00
#define LCD_ADC_SELECT_NORMAL 0xA0
#define LCD_ADC_SELECT_REVERSE 0xA1
#define LCD_DISPLAY_NORMAL 0xA6
#define LCD_DISPLAY_REVERSE 0xA7
#define LCD_ALL_POINTS_ON 0xA5
#define LCD_ALL_POINTS_OFF 0xA4
#define LCD_BIAS_SET_1_9 0xA2
#define LCD_BIAS_SET_1_7 0xA3
#define LCD_READ_MODIFY_WRITE 0xE0
#define LCD_EBD 0xEE
#define LCD_RESET_DISPLAY 0xE2
#define LCD_COMMON_OUTPUT_NORMAL 0xC0
#define LCD_COMMON_OUTPUT_REVERSE 0xC8
#define LCD_POWER_CONTROL_SET 0x28
#define LCD_V5_RESISTOR_RATIO 0x25
#define LCD_ELECTRONIC_VOLUME_SET 0x81
#define LCD_ELECTRONIC_VOLUME_INIT 0x30
#define LCD_NOP 0xE3
#define LCD_BOOSTER_CIRCUIT 0x04
#define LCD_VOLTAGE_REGULATOR 0x02
#define LCD_VOLTAGE_FOLLOWER 0x01
/*
*********************************************************************************************************
* EMC MODULE COMMANDS
*********************************************************************************************************
*/
#define EMCDYNAMICCONTROL_FORCECKE (1 << 0)
#define EMCDYNAMICCONTROL_FORCECLKOUT (1 << 1)
#define EMCDYNAMICCONTROL_SELFREFRESH (1 << 2)
#define EMCDYNAMICCONTROL_MMC (1 << 5)
#define EMCDYNAMICCONTROL_NOP (3 << 7)
#define EMCDYNAMICCONTROL_PALL (2 << 7)
#define EMCDYNAMICCONTROL_MODE (1 << 7)
#define EMCDYNAMICCONTROL_DP (1 << 13)
#define EMCDYNAMICCONTROL_0V (1 << 14)
#define EMCDYNAMICCONTROL_3V (2 << 14)
#define EMCDYNAMICCONFIG_LOWPOWERSDRAM (1 << 3)
#define EMCDYNAMICCONFIG_MICRONSYNCFLASH (2 << 3)
#define EMCDYNAMICCONFIG_BUFFERENABLE (1 << 19)
/*
*********************************************************************************************************
* MACROS
*********************************************************************************************************
*/
/*
*********************************************************************************************************
* LOCAL DATA TYPES
*********************************************************************************************************
*/
typedef void (*BSP_PFNCT)(void);
/*
*********************************************************************************************************
* LOCAL VARIABLES
*********************************************************************************************************
*/
const CPU_INT32U FLASH_MARKER @ 0x104FF800 = 0xAA55AA55;
static CPU_INT32U Int_Table[32]; /* This array holds the interrupt handler locations */
static CPU_INT08U BSP_LCD_Charset[][8] = {
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x4f,0x00,0x00 },// !
{ 0x00,0x00,0x00,0x00,0x07,0x00,0x07,0x00 },// "
{ 0x00,0x00,0x00,0x14,0x7f,0x14,0x7f,0x14 },// #
{ 0x00,0x00,0x00,0x24,0x2a,0x7f,0x2a,0x12 },// $
{ 0x00,0x00,0x00,0x23,0x13,0x08,0x64,0x62 },// %
{ 0x00,0x00,0x00,0x36,0x49,0x55,0x22,0x50 },// &
{ 0x00,0x00,0x00,0x00,0x05,0x03,0x00,0x00 },// '
{ 0x00,0x00,0x00,0x00,0x1c,0x22,0x41,0x00 },// (
{ 0x00,0x00,0x00,0x00,0x41,0x22,0x1c,0x00 },// )
{ 0x00,0x00,0x00,0x14,0x08,0x3e,0x08,0x14 },// *
{ 0x00,0x00,0x00,0x08,0x08,0x3e,0x08,0x08 },// +
{ 0x00,0x00,0x00,0x00,0x50,0x30,0x00,0x00 },// ,
{ 0x00,0x00,0x00,0x08,0x08,0x08,0x08,0x08 },// -
{ 0x00,0x00,0x00,0x00,0x60,0x60,0x00,0x00 },// .
{ 0x00,0x00,0x00,0x20,0x10,0x08,0x04,0x02 },// /
{ 0x00,0x00,0x00,0x3e,0x51,0x49,0x45,0x3e },// 0
{ 0x00,0x00,0x00,0x00,0x42,0x7f,0x40,0x00 },// 1
{ 0x00,0x00,0x00,0x42,0x61,0x51,0x49,0x46 },// 2
{ 0x00,0x00,0x00,0x21,0x41,0x45,0x4b,0x31 },// 3
{ 0x00,0x00,0x00,0x18,0x14,0x12,0x7f,0x10 },// 4
{ 0x00,0x00,0x00,0x27,0x45,0x45,0x45,0x39 },// 5
{ 0x00,0x00,0x00,0x3c,0x4a,0x49,0x49,0x30 },// 6
{ 0x00,0x00,0x00,0x01,0x71,0x09,0x05,0x03 },// 7
{ 0x00,0x00,0x00,0x36,0x49,0x49,0x49,0x36 },// 8
{ 0x00,0x00,0x00,0x06,0x49,0x49,0x29,0x1e },// 9
{ 0x00,0x00,0x00,0x00,0x36,0x36,0x00,0x00 },// :
{ 0x00,0x00,0x00,0x00,0x56,0x36,0x00,0x00 },// ;
{ 0x00,0x00,0x00,0x08,0x14,0x22,0x41,0x00 },// <
{ 0x00,0x00,0x00,0x14,0x14,0x14,0x14,0x14 },// =
{ 0x00,0x00,0x00,0x00,0x41,0x22,0x14,0x08 },// >
{ 0x00,0x00,0x00,0x02,0x01,0x51,0x09,0x06 },// ?
{ 0x00,0x00,0x00,0x32,0x49,0x79,0x41,0x3e },// @
{ 0x00,0x00,0x00,0x7e,0x11,0x11,0x11,0x7e },// A
{ 0x00,0x00,0x00,0x7f,0x49,0x49,0x49,0x36 },// B
{ 0x00,0x00,0x00,0x3e,0x41,0x41,0x41,0x22 },// C
{ 0x00,0x00,0x00,0x7f,0x41,0x41,0x22,0x1c },// D
{ 0x00,0x00,0x00,0x7f,0x49,0x49,0x49,0x41 },// E
{ 0x00,0x00,0x00,0x7f,0x09,0x09,0x09,0x01 },// F
{ 0x00,0x00,0x00,0x3e,0x41,0x49,0x49,0x7a },// G
{ 0x00,0x00,0x00,0x7f,0x08,0x08,0x08,0x7f },// H
{ 0x00,0x00,0x00,0x00,0x41,0x7f,0x41,0x00 },// I
{ 0x00,0x00,0x00,0x20,0x40,0x41,0x3f,0x01 },// J
{ 0x00,0x00,0x00,0x7f,0x08,0x14,0x22,0x41 },// K
{ 0x00,0x00,0x00,0x7f,0x40,0x40,0x40,0x40 },// L
{ 0x00,0x00,0x00,0x7f,0x02,0x0c,0x02,0x7f },// M
{ 0x00,0x00,0x00,0x7f,0x04,0x08,0x10,0x7f },// N
{ 0x00,0x00,0x00,0x3e,0x41,0x41,0x41,0x3e },// O
{ 0x00,0x00,0x00,0x7f,0x09,0x09,0x09,0x06 },// P
{ 0x00,0x00,0x00,0x3e,0x41,0x51,0x21,0x5e },// Q
{ 0x00,0x00,0x00,0x7f,0x09,0x19,0x29,0x46 },// R
{ 0x00,0x00,0x00,0x46,0x49,0x49,0x49,0x31 },// S
{ 0x00,0x00,0x00,0x01,0x01,0x7f,0x01,0x01 },// T
{ 0x00,0x00,0x00,0x3f,0x40,0x40,0x40,0x3f },// U
{ 0x00,0x00,0x00,0x1f,0x20,0x40,0x20,0x1f },// V
{ 0x00,0x00,0x00,0x3f,0x40,0x38,0x40,0x3f },// W
{ 0x00,0x00,0x00,0x63,0x14,0x08,0x14,0x63 },// X
{ 0x00,0x00,0x00,0x07,0x08,0x70,0x08,0x07 },// Y
{ 0x00,0x00,0x00,0x61,0x51,0x49,0x45,0x43 },// Z
{ 0x00,0x00,0x00,0x00,0x7f,0x41,0x41,0x00 },// [
{ 0x00,0x00,0x00,0x02,0x04,0x08,0x10,0x20 },// Backslash
{ 0x00,0x00,0x00,0x00,0x41,0x41,0x7f,0x00 },// ]
{ 0x00,0x00,0x00,0x04,0x02,0x01,0x02,0x04 },// ^
{ 0x00,0x00,0x00,0x40,0x40,0x40,0x40,0x40 },// _
{ 0x00,0x00,0x00,0x00,0x01,0x02,0x04,0x00 },// `
{ 0x00,0x00,0x00,0x20,0x54,0x54,0x54,0x78 },// a
{ 0x00,0x00,0x00,0x7f,0x48,0x44,0x44,0x38 },// b
{ 0x00,0x00,0x00,0x38,0x44,0x44,0x44,0x20 },// c
{ 0x00,0x00,0x00,0x38,0x44,0x44,0x48,0x7f },// d
{ 0x00,0x00,0x00,0x38,0x54,0x54,0x54,0x18 },// e
{ 0x00,0x00,0x00,0x08,0x7e,0x09,0x01,0x02 },// f
{ 0x00,0x00,0x00,0x0c,0x52,0x52,0x52,0x3e },// g
{ 0x00,0x00,0x00,0x7f,0x08,0x04,0x04,0x78 },// h
{ 0x00,0x00,0x00,0x00,0x44,0x7d,0x40,0x00 },// i
{ 0x00,0x00,0x00,0x20,0x40,0x44,0x3d,0x00 },// j
{ 0x00,0x00,0x00,0x7f,0x10,0x28,0x44,0x00 },// k
{ 0x00,0x00,0x00,0x00,0x41,0x7f,0x40,0x00 },// l
{ 0x00,0x00,0x00,0x7c,0x04,0x18,0x04,0x78 },// m
{ 0x00,0x00,0x00,0x7c,0x08,0x04,0x04,0x78 },// n
{ 0x00,0x00,0x00,0x38,0x44,0x44,0x44,0x38 },// o
{ 0x00,0x00,0x00,0x7c,0x14,0x14,0x14,0x08 },// p
{ 0x00,0x00,0x00,0x08,0x14,0x14,0x18,0x7c },// q
{ 0x00,0x00,0x00,0x7c,0x08,0x04,0x04,0x08 },// r
{ 0x00,0x00,0x00,0x48,0x54,0x54,0x54,0x20 },// s
{ 0x00,0x00,0x00,0x04,0x3f,0x44,0x40,0x20 },// t
{ 0x00,0x00,0x00,0x3c,0x40,0x40,0x20,0x7c },// u
{ 0x00,0x00,0x00,0x1c,0x20,0x40,0x20,0x1c },// v
{ 0x00,0x00,0x00,0x3c,0x40,0x30,0x40,0x3c },// w
{ 0x00,0x00,0x00,0x44,0x28,0x10,0x28,0x44 },// x
{ 0x00,0x00,0x00,0x0c,0x50,0x50,0x50,0x3c },// y
{ 0x00,0x00,0x00,0x44,0x64,0x54,0x4c,0x44 },// z
{ 0x00,0x00,0x00,0x00,0x08,0x36,0x41,0x00 },// {
{ 0x00,0x00,0x00,0x00,0x00,0x7f,0x00,0x00 },// |
{ 0x00,0x00,0x00,0x10,0x08,0x08,0x10,0x08 },// }
{ 0x00,0x00,0x00,0x78,0x46,0x41,0x46,0x78 }};// ~
/*
*********************************************************************************************************
* PROTOTYPES
*********************************************************************************************************
*/
static void BSP_CGU_Init (void);
static void BSP_Cache_Init (void);
static void BSP_Dummy_ISR_Handler (void);
static void BSP_IntInit (void);
static void SDRAM_Init (void);
static void PB_Init (void);
static void ADC_Init (void);
static void LCD_Init (void);
static void LCD_WrCmd (CPU_INT08U cmd);
static void LCD_WrData (CPU_INT08U data);
static void LCD_SetPosition (CPU_INT08U line, CPU_INT08U col);
static void Tmr_TickInit (void);
static void BSP_DelayM (CPU_INT08U ms);
/*
******************************************************************************************************************************
* 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.
*
* Argument(s): None
*
* Returns : None
*********************************************************************************************************
*/
void BSP_Init (void)
{
CPU_INT16U brightness;
BSP_CGU_Init(); /* Initialize the Clock Generation Unit */
BSP_Cache_Init(); /* Cache the lower part of RAM at 0x00000000 */
BSP_IntInit(); /* Initialize the interrupt controller */
Tmr_TickInit(); /* Initialize the timer for the uC/OS-II clock tick */
ADC_Init();
PB_Init();
LCD_Init(); /* Initialize the LCD module */
LCD_ClrScr(); /* Clear the LCD screen */
brightness = (ADC_GetStatus(1) >> 5) + 32;
LCD_SetBrightness(brightness);
}
/*
*********************************************************************************************************
* GET THE CPU CLOCK FREQUENCY
*
* Description: This function reads CPU registers to determine the CPU clock frequency of the chip in KHz.
*
* Argument(s): None
*
* Returns : The CPU clock frequency, in KHz.
*********************************************************************************************************
*/
CPU_INT32U BSP_CPU_ClkFreq (void)
{
CPU_INT32U msel;
CPU_INT32U cpu_clk_freq;
msel = (CPU_INT32U)(LPMSEL & 0x1F);
cpu_clk_freq = CPU_OSC_FREQ * (msel + 1) * 1000;
return (cpu_clk_freq);
}
/*
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -