/*
*********************************************************************************************************
* Philips LPC210x
* LPC210x Kick Start Card Board Support Package
*
* (c) Copyright 2004, Micrium, Weston, FL
* All Rights Reserved
*
*
* File : BSP.C
* By : Jean J. Labrosse
*********************************************************************************************************
*/
#include <includes.h>
/*
*********************************************************************************************************
* CONSTANTS
*********************************************************************************************************
*/
#ifndef __FLASH_PROJECT
#define BSP_UNDEF_INSTRUCTION_VECTOR_ADDR (*(INT32U *)0x00000004L)
#define BSP_SWI_VECTOR_ADDR (*(INT32U *)0x00000008L)
#define BSP_PREFETCH_ABORT_VECTOR_ADDR (*(INT32U *)0x0000000CL)
#define BSP_DATA_ABORT_VECTOR_ADDR (*(INT32U *)0x00000010L)
#define BSP_IRQ_VECTOR_ADDR (*(INT32U *)0x00000018L)
#define BSP_FIQ_VECTOR_ADDR (*(INT32U *)0x0000001CL)
#define BSP_IRQ_ISR_ADDR (*(INT32U *)0x00000038L)
#define BSP_FIQ_ISR_ADDR (*(INT32U *)0x0000003CL)
#endif
/*
*********************************************************************************************************
* DATA TYPES
*********************************************************************************************************
*/
unsigned long data;
typedef void (*BSP_FNCT_PTR)(void);
/*
*********************************************************************************************************
* VARIABLES
*********************************************************************************************************
*/
BSP_FNCT_PTR BSP_IntVectTbl[32]; /* array of function pointers to ISR's */
INT32U CIM_SpuriousInt; /* holds the vector number of the spurious ISR */
/*
*********************************************************************************************************
* PROTOTYPES
*********************************************************************************************************
*/
static void Tmr_TickInit(void);
static void CIM_Init(void);
static void ISR_CIM_Dummy(void); /* Dummy ISR, called from below ISR's if spurious */
static void ISR_CIM_SPI1(void); /* SPI1 end-transfer/overrun */
static void ISR_CIM_COMP2(void); /* COMP2 interrupt */
static void ISR_CIM_COMP1(void); /* COMP1 interrupt */
static void ISR_CIM_TAP(void); /* TAP interrupt */
static void ISR_CIM_SPI2(void); /* SPI2 end-transfer/overrun */
static void ISR_CIM_GIOA(void); /* GIO interrupt A */
static void ISR_CIM_HET1(void); /* HET interrupt 1 */
static void ISR_CIM_SCIRXERR(void); /* SCI1 or SCI2 error interrupt */
static void ISR_CIM_SCI1RX(void); /* SCI1 receive interrupt */
static void ISR_CIM_C2SIB(void); /* C2SIb interrupt */
static void ISR_CIM_SCCA(void); /* SCC interrupt A */
static void ISR_CIM_MIBADCEE(void); /* MibADC end event conversion */
static void ISR_CIM_SCI2RX(void); /* SCI2 receive interrupt */
static void ISR_CIM_SCI1TX(void); /* SCI1 transmit interrupt */
static void ISR_CIM_SSI(void); /* SW interrupt (SSI) */
static void ISR_CIM_HET2(void); /* HET interrupt 2 */
static void ISR_CIM_SCCB(void); /* SCC interrupt B */
static void ISR_CIM_SCI2TX(void); /* SCI2 transmit interrupt */
static void ISR_CIM_MIBADCE1(void); /* MibADC end Group 1 conversion */
static void ISR_CIM_GIOB(void); /* GIO interrupt B */
static void ISR_CIM_MIBADCE2(void); /* MibADC end Group 2 conversion */
void DelayHET_mS (unsigned long a) { while (--a!=0); }
/*
*******************************************************************************************************
Initialize the Led on the board
*******************************************************************************************************
*/
void InitSCI1(void) { /// This is neccesary because Led STAT is connected to SCI1CLK
SCI1PC1 &=~ CLK_FUNC; // CLK is assign as IO SCI1PC1_bit.CLK_FUNC = 0
SCI1PC1 |= CLK_DATA_DIR; // CLK as output SCI1PC1_bit.CLK_DATA_DIR = 1
}
/*
*****************************************************************************************************
Initialize the Buzzer on the board
*****************************************************************************************************
*/
void InitHET(void) {
HETDOUT = 0x00; // All pins to low
HETDIR |= 0x14; // HET pin 2 and pin 4 as output
}
/*
****************************************************************************************************
Make a beep on the buzzer
****************************************************************************************************
*/
void Beep(void) {
HETDOUT |= 0x4; // HET[2] - high
HETDOUT &= ~0x10; // HET[4] - low
DelayHET_mS(300000);
HETDOUT |= 0x10; // HET[2] - low
HETDOUT &= ~0x4; // HET[4] - high
DelayHET_mS(300000);
}
void Delay (unsigned long a) { while (--a!=0); }
void LCDInit()
{
LCDInit_low_level(); // Low level init
LCDSendCommand(DISP_ON); //LCD on
LCDSendCommand(CLR_DISP); //LCD clear
LCDSendCommand(DD_RAM_ADDR); //LCD set first row
}
void E_Pulse()
{
GIODOUTB_bit.GIODOUT0 = 1; //set E to high
Delay(100);
GIODOUTB_bit.GIODOUT0 = 0; //set E to low
}
void LCDInit_low_level(void)
{
HETDIR |= 0x1; // light_lcd pin as output
//first set D4, D5, D6, D7, RS, RW, E to output ports
GIODIRA_bit.GIODIR4 = 0x1; // D4
GIODIRA_bit.GIODIR5 = 0x1; // D5
GIODIRA_bit.GIODIR6 = 0x1; // D6
GIODIRA_bit.GIODIR7 = 0x1; // D7
GIODIRB_bit.GIODIR1 = 0x1; // RS
//GIODIRB_bit.GIODIRx = 0x1; //RW
GIODIRB_bit.GIODIR0 = 0x1; // E
//LCD initialization
GIODOUTB_bit.GIODOUT1 = 0; //set RS port to 0
//GIODOUTB_bit.GIODOUTx = 0; //set R/W port to 0
GIODOUTB_bit.GIODOUT0 = 0; //set E port to 0
Delay(110000); //delay ~110ms
GIODOUTA_bit.GIODOUT4 = 1; //set D4 port to 1
GIODOUTA_bit.GIODOUT5 = 1; //set D5 port to 1
E_Pulse(); //high->low to E port (pulse)
Delay(10000); //delay ~10ms
GIODOUTA_bit.GIODOUT4 = 1; //set D4 port to 1
GIODOUTA_bit.GIODOUT5 = 1; //set D5 port to 1
E_Pulse(); //high->low to E port (pulse)
Delay(10000); //delay ~10ms
GIODOUTA_bit.GIODOUT4 = 1; //set D4 port to 1
GIODOUTA_bit.GIODOUT5 = 1; //set D5 port to 1
E_Pulse(); //high->low to E port (pulse)
Delay(1