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

📄 bsp.c

📁 基于 Philips 公司的 ARM-7 使用之 uC/OS-II 作业系统,此例程是移植于 LPC-2888 上的应用,不同于一般的 Porting 其最主要是加入了支援 OS_View 观察器功能
💻 C
📖 第 1 页 / 共 4 页
字号:
/*
*********************************************************************************************************
*                                     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 + -