278 lines
		
	
	
		
			9.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			278 lines
		
	
	
		
			9.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
|   | /**********************************************************************
 | |||
|  | * $Id$		lpc43xx_cgu.h			2011-06-02 | |||
|  | *//**
 | |||
|  | * @file		llpc43xx_cgu.h | |||
|  | * @brief	Contains all macro definitions and function prototypes | |||
|  | * 			support for Clock Generation and Clock Control firmware | |||
|  | * 			library on lpc43xx | |||
|  | * @version	1.0 | |||
|  | * @date		02. June. 2011 | |||
|  | * @author	NXP MCU SW Application Team | |||
|  | * | |||
|  | * Copyright(C) 2011, NXP Semiconductor | |||
|  | * All rights reserved. | |||
|  | * | |||
|  | *********************************************************************** | |||
|  | * 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. | |||
|  | * Permission to use, copy, modify, and distribute this software and its | |||
|  | * documentation is hereby granted, under NXP Semiconductors<EFBFBD> | |||
|  | * relevant copyright in the software, without fee, provided that it | |||
|  | * is used in conjunction with NXP Semiconductors microcontrollers.  This | |||
|  | * copyright, permission, and disclaimer notice must appear in all copies of | |||
|  | * this code. | |||
|  | **********************************************************************/ | |||
|  | 
 | |||
|  | /* Peripheral group ----------------------------------------------------------- */ | |||
|  | /** @defgroup CGU CGU (Clock Generation Unit)
 | |||
|  |  * @ingroup LPC4300CMSIS_FwLib_Drivers | |||
|  |  * @{ | |||
|  |  */ | |||
|  | 
 | |||
|  | #ifndef lpc43xx_CGU_H_
 | |||
|  | #define lpc43xx_CGU_H_
 | |||
|  | 
 | |||
|  | /* Includes ------------------------------------------------------------------- */ | |||
|  | #include "LPC43xx.h"
 | |||
|  | #include "lpc_types.h"
 | |||
|  | 
 | |||
|  | #ifdef __cplusplus
 | |||
|  | extern "C" | |||
|  | { | |||
|  | #endif
 | |||
|  | 
 | |||
|  | /* Private Macros -------------------------------------------------------------- */ | |||
|  | /** @defgroup CGU_Private_Macros CGU Private Macros
 | |||
|  |  * @{ | |||
|  |  */ | |||
|  | 
 | |||
|  | /** Branch clocks from CGU_BASE_SAFE */ | |||
|  | #define CGU_ENTITY_NONE				CGU_ENTITY_NUM
 | |||
|  | 
 | |||
|  | /** Check bit at specific position is clear or not */ | |||
|  | #define ISBITCLR(x,bit) 			((x&(1<<bit))^(1<<bit))
 | |||
|  | /** Check bit at specific position is set or not */ | |||
|  | #define ISBITSET(x,bit) 			(x&(1<<bit))
 | |||
|  | /** Set mask */ | |||
|  | #define ISMASKSET(x,mask) 			(x&mask)
 | |||
|  | 
 | |||
|  | /** CGU number of clock source */ | |||
|  | #define CGU_CLKSRC_NUM (CGU_CLKSRC_IDIVE+1)
 | |||
|  | 
 | |||
|  | /*********************************************************************//**
 | |||
|  |  * Macro defines for CGU control mask bit definitions | |||
|  |  **********************************************************************/ | |||
|  | /** CGU control enable mask bit */ | |||
|  | #define CGU_CTRL_EN_MASK			1
 | |||
|  | /** CGU control clock-source mask bit */ | |||
|  | #define CGU_CTRL_SRC_MASK			(0xF<<24)
 | |||
|  | /** CGU control auto block mask bit */ | |||
|  | #define CGU_CTRL_AUTOBLOCK_MASK		(1<<11)
 | |||
|  | 
 | |||
|  | /*********************************************************************//**
 | |||
|  |  * Macro defines for CGU PLL1 mask bit definitions | |||
|  |  **********************************************************************/ | |||
|  | /** CGU PLL1 feedback select mask bit */ | |||
|  | #define CGU_PLL1_FBSEL_MASK			(1<<6)
 | |||
|  | /** CGU PLL1 Input clock bypass control mask bit */ | |||
|  | #define CGU_PLL1_BYPASS_MASK		(1<<1)
 | |||
|  | /** CGU PLL1 direct CCO output mask bit */ | |||
|  | #define CGU_PLL1_DIRECT_MASK		(1<<7)
 | |||
|  | 
 | |||
|  | /**
 | |||
|  |  * @} | |||
|  |  */ | |||
|  | 
 | |||
|  | /* Public Types --------------------------------------------------------------- */ | |||
|  | /** @defgroup CGU_Public_Types CGU Public Types
 | |||
|  |  * @{ | |||
|  |  */ | |||
|  | 
 | |||
|  | /*********************************************************************//**
 | |||
|  |  * @brief CGU enumeration | |||
|  |  **********************************************************************/ | |||
|  | /*
 | |||
|  |  * @brief	CGU clock source enumerate definition | |||
|  |  */ | |||
|  | typedef enum { | |||
|  | 	/* Clock Source */ | |||
|  | 	CGU_CLKSRC_32KHZ_OSC = 0,					/**< 32KHz oscillator clock source 	*/ | |||
|  | 	CGU_CLKSRC_IRC,								/**< IRC 12 Mhz clock source 		*/ | |||
|  | 	CGU_CLKSRC_ENET_RX_CLK,						/**< Ethernet receive clock source 	*/ | |||
|  | 	CGU_CLKSRC_ENET_TX_CLK,						/**< Ethernet transmit clock source */ | |||
|  | 	CGU_CLKSRC_GP_CLKIN,						/**< General purpose clock source 	*/ | |||
|  | 	CGU_CLKSRC_TCK,								/**< TCK clock source 				*/ | |||
|  | 	CGU_CLKSRC_XTAL_OSC,						/**< Crystal oscillator clock source*/ | |||
|  | 	CGU_CLKSRC_PLL0,							/**< PLL0 (USB0) clock source		*/ | |||
|  | 	CGU_CLKSRC_PLL0_AUDIO, | |||
|  | 	CGU_CLKSRC_PLL1,							/**< PLL1 clock source				*/ | |||
|  | 	CGU_CLKSRC_IDIVA = CGU_CLKSRC_PLL1 + 3,		/**< IDIVA clock source				*/ | |||
|  | 	CGU_CLKSRC_IDIVB,							/**< IDIVB clock source				*/ | |||
|  | 	CGU_CLKSRC_IDIVC,							/**< IDIVC clock source				*/ | |||
|  | 	CGU_CLKSRC_IDIVD,							/**< IDIVD clock source				*/ | |||
|  | 	CGU_CLKSRC_IDIVE,							/**< IDIVE clock source				*/ | |||
|  | 
 | |||
|  | 	/* Base */ | |||
|  | 	CGU_BASE_SAFE,								/**< Base save clock (always on) for WDT */ | |||
|  | 	CGU_BASE_USB0,								/**< USB0 base clock 				*/ | |||
|  | 	CGU_BASE_PERIPH,							/**  Peripheral bus (SGPIO)			*/ | |||
|  | 	CGU_BASE_USB1,								/**< USB1 base clock 				*/ | |||
|  | 	CGU_BASE_M4,								/**< ARM Cortex-M4 Core base clock 	*/ | |||
|  | 	CGU_BASE_SPIFI,								/**< SPIFI base clock				*/ | |||
|  | 	CGU_BASE_PHY_RX = CGU_BASE_SPIFI + 2, 							/**< Ethernet PHY Rx base clock		*/ | |||
|  | 	CGU_BASE_PHY_TX,							/**< Ethernet PHY Tx base clock		*/ | |||
|  | 	CGU_BASE_APB1,								/**< APB peripheral block #1 base clock	*/ | |||
|  | 	CGU_BASE_APB3,								/**< APB peripheral block #3 base clock	*/ | |||
|  | 	CGU_BASE_LCD,								/**< LCD base clock					*/ | |||
|  | 	CGU_BASE_ENET_CSR, | |||
|  | 	CGU_BASE_SDIO,								/**< SDIO base clock				*/ | |||
|  | 	CGU_BASE_SSP0,								/**< SSP0 base clock				*/ | |||
|  | 	CGU_BASE_SSP1,								/**< SSP1 base clock				*/ | |||
|  | 	CGU_BASE_UART0,								/**< UART0 base clock				*/ | |||
|  | 	CGU_BASE_UART1,								/**< UART1 base clock				*/ | |||
|  | 	CGU_BASE_UART2,								/**< UART2 base clock				*/ | |||
|  | 	CGU_BASE_UART3,								/**< UART3 base clock				*/ | |||
|  | 	CGU_BASE_CLKOUT,							/**< CLKOUT base clock				*/ | |||
|  | 	CGU_BASE_APLL = CGU_BASE_CLKOUT + 5, | |||
|  | 	CGU_BASE_OUT0, | |||
|  | 	CGU_BASE_OUT1, | |||
|  | 	CGU_ENTITY_NUM								/**< Number or clock source entity	*/ | |||
|  | } CGU_ENTITY_T; | |||
|  | 
 | |||
|  | /*
 | |||
|  |  * @brief 	CGU PPL0 mode enumerate definition | |||
|  |  */ | |||
|  | typedef enum { | |||
|  | 	CGU_PLL0_MODE_1d = 0, | |||
|  | 	CGU_PLL0_MODE_1c, | |||
|  | 	CGU_PLL0_MODE_1b, | |||
|  | 	CGU_PLL0_MODE_1a | |||
|  | }CGU_PLL0_MODE; | |||
|  | 
 | |||
|  | /*
 | |||
|  |  * @brief 	CGU peripheral enumerate definition | |||
|  |  */ | |||
|  | typedef enum { | |||
|  | 	CGU_PERIPHERAL_ADC0 = 0,					/**< ADC0 		*/ | |||
|  | 	CGU_PERIPHERAL_ADC1,						/**< ADC1 		*/ | |||
|  | 	CGU_PERIPHERAL_AES,							/**< AES		*/ | |||
|  | //	CGU_PERIPHERAL_ALARMTIMER_CGU_RGU_RTC_WIC,
 | |||
|  | 	CGU_PERIPHERAL_APB1_BUS,					/**< APB1 bus			*/ | |||
|  | 	CGU_PERIPHERAL_APB3_BUS,					/**< APB3 bus			*/ | |||
|  | 	CGU_PERIPHERAL_CAN,							/**< CAN 				*/ | |||
|  | 	CGU_PERIPHERAL_CREG,						/**< CREG				*/ | |||
|  | 	CGU_PERIPHERAL_DAC,							/**< DAC				*/ | |||
|  | 	CGU_PERIPHERAL_DMA,							/**< DMA				*/ | |||
|  | 	CGU_PERIPHERAL_EMC,							/**< EMC				*/ | |||
|  | 	CGU_PERIPHERAL_ETHERNET,					/**< Ethernet			*/ | |||
|  | 	CGU_PERIPHERAL_ETHERNET_TX, //HIDE			/**< Ethernet transmit 	*/
 | |||
|  | 	CGU_PERIPHERAL_GPIO,						/**< GPIO				*/ | |||
|  | 	CGU_PERIPHERAL_I2C0,						/**< I2C0				*/ | |||
|  | 	CGU_PERIPHERAL_I2C1,						/**< I2C1				*/ | |||
|  | 	CGU_PERIPHERAL_I2S,							/**< I2S				*/ | |||
|  | 	CGU_PERIPHERAL_LCD,							/**< LCD				*/ | |||
|  | 	CGU_PERIPHERAL_M4CORE,						/**< ARM Cortex-M4 Core	*/ | |||
|  | 	CGU_PERIPHERAL_M4_BUS,						/**< ARM Cortex-M4 Bus	*/ | |||
|  | 	CGU_PERIPHERAL_MOTOCON,						/**< Motor Control 		*/ | |||
|  | 	CGU_PERIPHERAL_QEI,							/**< QEI				*/ | |||
|  | 	CGU_PERIPHERAL_RITIMER,						/**< RIT Timer			*/ | |||
|  | 	CGU_PERIPHERAL_SCT,							/**< SCT				*/ | |||
|  | 	CGU_PERIPHERAL_SCU,							/**< SCU				*/ | |||
|  | 	CGU_PERIPHERAL_SDIO,						/**< SDIO				*/ | |||
|  | 	CGU_PERIPHERAL_SPIFI,						/**< SPIFI				*/ | |||
|  | 	CGU_PERIPHERAL_SSP0,						/**< SSP0				*/ | |||
|  | 	CGU_PERIPHERAL_SSP1,						/**< SSP1				*/ | |||
|  | 	CGU_PERIPHERAL_TIMER0,						/**< TIMER 0 			*/ | |||
|  | 	CGU_PERIPHERAL_TIMER1,						/**< TIMER 1			*/ | |||
|  | 	CGU_PERIPHERAL_TIMER2,						/**< TIMER 2			*/ | |||
|  | 	CGU_PERIPHERAL_TIMER3,						/**< TIMER 3			*/ | |||
|  | 	CGU_PERIPHERAL_UART0,						/**< UART0				*/ | |||
|  | 	CGU_PERIPHERAL_UART1,						/**< UART1				*/ | |||
|  | 	CGU_PERIPHERAL_UART2,						/**< UART2				*/ | |||
|  | 	CGU_PERIPHERAL_UART3,						/**< UART3				*/ | |||
|  | 	CGU_PERIPHERAL_USB0,						/**< USB0				*/ | |||
|  | 	CGU_PERIPHERAL_USB1,						/**< USB1				*/ | |||
|  | 	CGU_PERIPHERAL_WWDT,						/**< WWDT				*/ | |||
|  | 	CGU_PERIPHERAL_NUM | |||
|  | } CGU_PERIPHERAL_T; | |||
|  | 
 | |||
|  | /**
 | |||
|  |  *  @brief	CGU error status enumerate definition | |||
|  |  */ | |||
|  | typedef enum { | |||
|  | 	CGU_ERROR_SUCCESS = 0, | |||
|  | 	CGU_ERROR_CONNECT_TOGETHER, | |||
|  | 	CGU_ERROR_INVALID_ENTITY, | |||
|  | 	CGU_ERROR_INVALID_CLOCK_SOURCE, | |||
|  | 	CGU_ERROR_INVALID_PARAM, | |||
|  | 	CGU_ERROR_FREQ_OUTOF_RANGE | |||
|  | } CGU_ERROR; | |||
|  | 
 | |||
|  | /********************************************************************//**
 | |||
|  | * @brief CGU structure definitions | |||
|  | **********************************************************************/ | |||
|  | /*
 | |||
|  |  * @brief	CGU peripheral clock structure | |||
|  |  */ | |||
|  | typedef struct { | |||
|  | 	uint8_t RegBaseEntity;						/**< Base register address 		*/ | |||
|  | 	uint16_t RegBranchOffset;					/**< Branch register offset		*/ | |||
|  | 	uint8_t PerBaseEntity;						/**< Base peripheral address	*/ | |||
|  | 	uint16_t PerBranchOffset;					/**< Base peripheral offset		*/ | |||
|  | 	uint8_t next;								/**< Pointer to next structure	*/ | |||
|  | } CGU_PERIPHERAL_S; | |||
|  | 
 | |||
|  | /**
 | |||
|  |  * @} | |||
|  |  */ | |||
|  | 
 | |||
|  | 
 | |||
|  | /* Public Functions ----------------------------------------------------------- */ | |||
|  | /** @defgroup CGU_Public_Functions CGU Public Functions
 | |||
|  |  * @{ | |||
|  |  */ | |||
|  | 
 | |||
|  | /** Clock generate initialize/de-initialize */ | |||
|  | uint32_t	CGU_Init(void); | |||
|  | uint32_t	CGU_DeInit(void); | |||
|  | 
 | |||
|  | /** Clock Generator and Clock Control */ | |||
|  | uint32_t	CGU_ConfigPWR (CGU_PERIPHERAL_T PPType, FunctionalState en); | |||
|  | uint32_t	CGU_GetPCLKFrequency (CGU_PERIPHERAL_T Clock); | |||
|  | 
 | |||
|  | /** Clock Source and Base Clock operation */ | |||
|  | uint32_t	CGU_SetXTALOSC(uint32_t ClockFrequency); | |||
|  | uint32_t	CGU_SetDIV(CGU_ENTITY_T SelectDivider, uint32_t divisor); | |||
|  | uint32_t	CGU_SetPLL0(void); | |||
|  | uint32_t	CGU_SetPLL0audio(void); | |||
|  | uint32_t	CGU_SetPLL1(uint32_t mult); | |||
|  | uint32_t	CGU_EnableEntity(CGU_ENTITY_T ClockEntity, uint32_t en); | |||
|  | uint32_t	CGU_EntityConnect(CGU_ENTITY_T ClockSource, CGU_ENTITY_T ClockEntity); | |||
|  | uint32_t	CGU_GetBaseStatus(CGU_ENTITY_T Base); | |||
|  | void		CGU_UpdateClock(void); | |||
|  | uint32_t	CGU_RealFrequencyCompare(CGU_ENTITY_T Clock, CGU_ENTITY_T CompareToClock, uint32_t *m, uint32_t *d); | |||
|  | 
 | |||
|  | /**
 | |||
|  |  * @} | |||
|  |  */ | |||
|  | 
 | |||
|  | 
 | |||
|  | #ifdef __cplusplus
 | |||
|  | } | |||
|  | #endif
 | |||
|  | 
 | |||
|  | #endif /* lpc43xx_CGU_H_ */
 | |||
|  | 
 | |||
|  | /**
 | |||
|  |  * @} | |||
|  |  */ | |||
|  | 
 |