/***********************************************************************
 * $Id: system_LPC43xx.h 8242 2011-10-11 15:15:25Z nxp28536 $
 *
 * Project: LPC43xx Common
 *
 * Description:
 *     CMSIS Cortex-M4 Device Peripheral Access Layer Header File
 *     for the NXP LPC43xx Device Series
 *
 ***********************************************************************
 * Software that is described herein is for illustrative purposes only
 * which provides customers with programming information regarding the
 * products. This software is supplied "AS IS" without any warranties.
 * NXP Semiconductors assumes no responsibility or liability for the
 * use of the software, conveys no license or title under any patent,
 * copyright, or mask work right to the product. NXP Semiconductors
 * reserves the right to make changes in the software without
 * notification. NXP Semiconductors also make no representation or
 * warranty that such application will be suitable for the specified
 * use without further testing or modification.
 **********************************************************************/


#ifndef __SYSTEM_LPC18xx_H
#define __SYSTEM_LPC18xx_H

#include <stdint.h>
#include "scu.h"

#ifdef __cplusplus
 extern "C" {
#endif 

#define BUTTON0	!((LPC_GPIO3->PIN>>6)&1)	// P6.10
#define BUTTON1	!((LPC_GPIO2->PIN>>0)&1)	// P4.0

/*----------------------------------------------------------------------------
  Clock Variable definitions
  DO NOT SET MANUALLY, SET WITH SetClock AND SetPL160M
 *----------------------------------------------------------------------------*/
extern uint32_t XtalFrequency; 				
extern uint32_t PL160M_0Frequency; 
extern uint32_t PL160M_1Frequency; 
extern uint32_t PL160M_2Frequency; 
extern uint32_t PL550Frequency; 
extern uint32_t PL550FracFrequency;  //New in Falcon
extern uint32_t IDIVAFrequency;
extern uint32_t IDIVBFrequency;
extern uint32_t IDIVCFrequency;
extern uint32_t IDIVDFrequency;
extern uint32_t IDIVEFrequency;
extern uint32_t M0Frequency;
extern uint32_t USB1Frequency;
extern uint32_t M4Frequency;
extern uint32_t SPIFIFrequency;
extern uint32_t SPIFrequency;
extern uint32_t EnetRxFrequency;
extern uint32_t EnetTxFrequency;
extern uint32_t EXTFrequency;
extern uint32_t VPB1Frequency;
extern uint32_t VPB3Frequency;
extern uint32_t LCDFrequency;
extern uint32_t SCIFrequency;
extern uint32_t SDIOFrequency;
extern uint32_t SSP0Frequency;
extern uint32_t SSP1Frequency;
extern uint32_t UART0Frequency;
extern uint32_t UART1Frequency;
extern uint32_t UART2Frequency;
extern uint32_t UART3Frequency;
extern uint32_t OUTFrequency;
extern uint32_t AOTESTFrequency;
extern uint32_t ISOFrequency;
extern uint32_t BSRFrequency;
extern uint32_t CLK_TESTFrequency;
extern uint32_t APLLFrequency;
extern uint32_t SPARE0Frequency;
extern uint32_t SPARE1Frequency;


typedef enum CLKDIV
{
	DIV1	= 1,
	DIV2	= 2,
	DIV4	= 4,
	DIV8 	= 8,
	DIV16	= 16,
	DIV256	= 256,
} CLKDIV_Type;

typedef enum CLKSRC
{
	SRC_OSC32K    	= 0,
	SRC_IRC        	= 1,
	SRC_ENET_RX_CLK	= 2,
	SRC_ENET_TX_CLK = 3,
	SRC_EXT_TCK 	= 4,
	RESERVED    	= 5,  // Do NOT use
	SRC_XTAL       	= 6,
	SRC_PL550M_0   	= 7,
	SRC_PL550M_FRAC	= 8, //New in Falcon
	SRC_PL160M_0   	= 9,
	SRC_PL160M_1   	= 10,
	SRC_PL160M_2   	= 11,
	SRC_IDIV_0     	= 12,
	SRC_IDIV_1     	= 13,
	SRC_IDIV_2     	= 14,
	SRC_IDIV_3     	= 15,
	SRC_IDIV_4     	= 16,
	NOT_DEFINED		= 0xFFFFFFF,	// Force a signed int enum, so every possible frequency can be entered
} CLKSRC_Type;

typedef enum CLKBASE
{
	PL550M 			= 0, //PL550Frac is new, should be added???
	PL160M 			= 1,
	IDIVA_4 		= 2,
	IDIVB_16 		= 3,
	IDIVC_16 		= 4,
	IDIVD_16 		= 5,
	IDIVE_256 		= 6,
	BASE_SAFE_CLK 	= 7,
	BASE_USB0_CLK 	= 8,
	BASE_M0_CLK 	= 9,
	BASE_USB1_CLK 	= 10,
	BASE_M4_CLK 	= 11,
	BASE_SPIFI_CLK 	= 12,
	BASE_SPI_CLK 	= 13,
	BASE_PHY_RX_CLK = 14,
	BASE_PHY_TX_CLK = 15,
	BASE_VPB1_CLK 	= 16,
	BASE_VPB3_CLK 	= 17,
	BASE_LCD_CLK 	= 18,
	BASE_VADC_CLK 	= 19,	//New
	BASE_SDIO_CLK 	= 20,
	BASE_SSP0_CLK 	= 21,
	BASE_SSP1_CLK 	= 22,
	BASE_UART0_CLK 	= 23,
	BASE_UART1_CLK 	= 24,
	BASE_UART2_CLK 	= 25,
	BASE_UART3_CLK 	= 26,
	BASE_OUT_CLK 	= 27,
	BASE_AOTEST_CLK = 28,
	BASE_ISO_TCK 	= 29,
	BASE_BSR_TCK 	= 30,
	BASE_CLK_TEST	= 31,
	BASE_APLL_CLK 	= 32, //New in Falcon
	BASE_SPARE0_CLK	= 33, //New in Falcon
	BASE_SPARE1_CLK	= 34, //New in Falcon
	XTAL			= 253,
	ENET_RX			= 254,
	ENET_TX			= 255,
}CLKBASE_Type;	

// PL550M
#define	MODE1A		(0x3<<2)	// Normal operating mode without post-divider and without pre-divider	
#define	MODE1B	   	(0x2<<2)	// Normal operating mode with post-divider and without pre-divider
#define	MODE1C	   	(0x1<<2)	// Normal operating mode without post-divider and with pre-divider
#define	MODE1D	   	(0x0<<2)	// Normal operating mode with post-divider and with pre-divider.
#define BYPASSOFF 	(0<<1)
#define CLKEN		(1<<4)

// PL160M
#define FBSEL 			(1<<6)
#define MSEL_FBDIV(n)	(n<<16)	// MSEL = feedback-divider value	2*M (1 to 2^15)
#define NSEL_PREDIV(n)	(n<<12)	// NSEL = pre-divider value			N	(1 to 2^8)		  	
#define PSEL_POSTDIV(n)	(n<<8)	// PSEL = post-divider value		P*2	(1 to 2^5)

// Generic clock properties
#define AUTO_BLOCK	(1<<11)
#define PD_ENABLE	(1<<0)

extern void SystemInit(void);
extern void SetClock(CLKBASE_Type target_clk, CLKSRC_Type src_clk, CLKDIV_Type div);
extern void SetPL160M(CLKSRC_Type src_clk, uint32_t mult);
extern void SetPLLUSB(CLKSRC_Type src_clk, uint8_t enable);
extern void EnableSourceClk(CLKSRC_Type src_clk);
extern void DisableSourceClk(CLKSRC_Type src_clk);
extern void IOInit(void);
extern uint32_t GetClockFrequency(CLKSRC_Type src_clk);

#ifdef __cplusplus
}
#endif

#endif /* __SYSTEM_LPC43xx_H */
