mirror of
https://github.com/hathach/tinyusb.git
synced 2025-01-17 05:32:55 +08:00
259 lines
11 KiB
C
259 lines
11 KiB
C
/*
|
|
* @brief LPC18xx/43xx chip clock list used by CGU and CCU drivers
|
|
*
|
|
* @note
|
|
* Copyright(C) NXP Semiconductors, 2012
|
|
* All rights reserved.
|
|
*
|
|
* @par
|
|
* Software that is described herein is for illustrative purposes only
|
|
* which provides customers with programming information regarding the
|
|
* LPC products. This software is supplied "AS IS" without any warranties of
|
|
* any kind, and NXP Semiconductors and its licensor disclaim any and
|
|
* all warranties, express or implied, including all implied warranties of
|
|
* merchantability, fitness for a particular purpose and non-infringement of
|
|
* intellectual property rights. NXP Semiconductors assumes no responsibility
|
|
* or liability for the use of the software, conveys no license or rights under any
|
|
* patent, copyright, mask work right, or any other intellectual property rights in
|
|
* or to any products. NXP Semiconductors reserves the right to make changes
|
|
* in the software without notification. NXP Semiconductors also makes no
|
|
* representation or warranty that such application will be suitable for the
|
|
* specified use without further testing or modification.
|
|
*
|
|
* @par
|
|
* Permission to use, copy, modify, and distribute this software and its
|
|
* documentation is hereby granted, under NXP Semiconductors' and its
|
|
* licensor's relevant copyrights 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.
|
|
*/
|
|
|
|
#ifndef __CHIP_CLOCKS_H_
|
|
#define __CHIP_CLOCKS_H_
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/** @ingroup CLOCK_18XX_43XX
|
|
* @{
|
|
*/
|
|
|
|
/**
|
|
* @brief CGU clock input list
|
|
* These are possible input clocks for the CGU and can come
|
|
* from both external (crystal) and internal (PLL) sources. These
|
|
* clock inputs can be routed to the base clocks (@ref CHIP_CGU_BASE_CLK_T).
|
|
*/
|
|
typedef enum CHIP_CGU_CLKIN {
|
|
CLKIN_32K, /*!< External 32KHz input */
|
|
CLKIN_IRC, /*!< Internal IRC (12MHz) input */
|
|
CLKIN_ENET_RX, /*!< External ENET_RX pin input */
|
|
CLKIN_ENET_TX, /*!< External ENET_TX pin input */
|
|
CLKIN_CLKIN, /*!< External GPCLKIN pin input */
|
|
CLKIN_RESERVED1,
|
|
CLKIN_CRYSTAL, /*!< External (main) crystal pin input */
|
|
CLKIN_USBPLL, /*!< Internal USB PLL input */
|
|
CLKIN_AUDIOPLL, /*!< Internal Audio PLL input */
|
|
CLKIN_MAINPLL, /*!< Internal Main PLL input */
|
|
CLKIN_RESERVED2,
|
|
CLKIN_RESERVED3,
|
|
CLKIN_IDIVA, /*!< Internal divider A input */
|
|
CLKIN_IDIVB, /*!< Internal divider B input */
|
|
CLKIN_IDIVC, /*!< Internal divider C input */
|
|
CLKIN_IDIVD, /*!< Internal divider D input */
|
|
CLKIN_IDIVE, /*!< Internal divider E input */
|
|
CLKINPUT_PD /*!< External 32KHz input */
|
|
} CHIP_CGU_CLKIN_T;
|
|
|
|
/**
|
|
* @brief CGU base clocks
|
|
* CGU base clocks are clocks that are associated with a single input clock
|
|
* and are routed out to 1 or more peripherals. For example, the CLK_BASE_PERIPH
|
|
* clock can be configured to use the CLKIN_MAINPLL input clock, which will in
|
|
* turn route that clock to the CLK_PERIPH_BUS, CLK_PERIPH_CORE, and
|
|
* CLK_PERIPH_SGPIO periphral clocks.
|
|
*/
|
|
typedef enum CHIP_CGU_BASE_CLK {
|
|
CLK_BASE_SAFE, /*!< Base clock for WDT oscillator, IRC input only */
|
|
CLK_BASE_USB0, /*!< Base USB clock for USB0, USB PLL input only */
|
|
#if defined(CHIP_LPC43XX)
|
|
CLK_BASE_PERIPH, /*!< Base clock for SGPIO */
|
|
#else
|
|
CLK_BASE_RESERVED1,
|
|
#endif
|
|
CLK_BASE_USB1, /*!< Base USB clock for USB1 */
|
|
CLK_BASE_MX, /*!< Base clock for CPU core */
|
|
CLK_BASE_SPIFI, /*!< Base clock for SPIFI */
|
|
#if defined(CHIP_LPC43XX)
|
|
CLK_BASE_SPI, /*!< Base clock for SPI */
|
|
#else
|
|
CLK_BASE_RESERVED2,
|
|
#endif
|
|
CLK_BASE_PHY_RX, /*!< Base clock for PHY RX */
|
|
CLK_BASE_PHY_TX, /*!< Base clock for PHY TX */
|
|
CLK_BASE_APB1, /*!< Base clock for APB1 group */
|
|
CLK_BASE_APB3, /*!< Base clock for APB3 group */
|
|
CLK_BASE_LCD, /*!< Base clock for LCD pixel clock */
|
|
#if defined(CHIP_LPC43XX)
|
|
CLK_BASE_ADCHS, /*!< Base clock for ADCHS */
|
|
#else
|
|
CLK_BASE_RESERVED3,
|
|
#endif
|
|
CLK_BASE_SDIO, /*!< Base clock for SDIO */
|
|
CLK_BASE_SSP0, /*!< Base clock for SSP0 */
|
|
CLK_BASE_SSP1, /*!< Base clock for SSP1 */
|
|
CLK_BASE_UART0, /*!< Base clock for UART0 */
|
|
CLK_BASE_UART1, /*!< Base clock for UART1 */
|
|
CLK_BASE_UART2, /*!< Base clock for UART2 */
|
|
CLK_BASE_UART3, /*!< Base clock for UART3 */
|
|
CLK_BASE_OUT, /*!< Base clock for CLKOUT pin */
|
|
CLK_BASE_RESERVED4,
|
|
CLK_BASE_RESERVED5,
|
|
CLK_BASE_RESERVED6,
|
|
CLK_BASE_RESERVED7,
|
|
CLK_BASE_APLL, /*!< Base clock for audio PLL */
|
|
CLK_BASE_CGU_OUT0, /*!< Base clock for CGUOUT0 pin */
|
|
CLK_BASE_CGU_OUT1, /*!< Base clock for CGUOUT1 pin */
|
|
CLK_BASE_LAST,
|
|
CLK_BASE_NONE = CLK_BASE_LAST
|
|
} CHIP_CGU_BASE_CLK_T;
|
|
|
|
/**
|
|
* @brief CGU dividers
|
|
* CGU dividers provide an extra clock state where a specific clock can be
|
|
* divided before being routed to a peripheral group. A divider accepts an
|
|
* input clock and then divides it. To use the divided clock for a base clock
|
|
* group, use the divider as the input clock for the base clock (for example,
|
|
* use CLKIN_IDIVB, where CLKIN_MAINPLL might be the input into the divider).
|
|
*/
|
|
typedef enum CHIP_CGU_IDIV {
|
|
CLK_IDIV_A, /*!< CGU clock divider A */
|
|
CLK_IDIV_B, /*!< CGU clock divider B */
|
|
CLK_IDIV_C, /*!< CGU clock divider A */
|
|
CLK_IDIV_D, /*!< CGU clock divider D */
|
|
CLK_IDIV_E, /*!< CGU clock divider E */
|
|
CLK_IDIV_LAST
|
|
} CHIP_CGU_IDIV_T;
|
|
|
|
#define CHIP_CGU_IDIV_MASK(x) ("\x03\x0F\x0F\x0F\xFF"[x])
|
|
|
|
/**
|
|
* @brief Peripheral clocks
|
|
* Peripheral clocks are individual clocks routed to peripherals. Although
|
|
* multiple peripherals may share a same base clock, each peripheral's clock
|
|
* can be enabled or disabled individually. Some peripheral clocks also have
|
|
* additional dividers associated with them.
|
|
*/
|
|
typedef enum CHIP_CCU_CLK {
|
|
/* CCU1 clocks */
|
|
CLK_APB3_BUS, /*!< APB3 bus clock from base clock CLK_BASE_APB3 */
|
|
CLK_APB3_I2C1, /*!< I2C1 register/perigheral clock from base clock CLK_BASE_APB3 */
|
|
CLK_APB3_DAC, /*!< DAC peripheral clock from base clock CLK_BASE_APB3 */
|
|
CLK_APB3_ADC0, /*!< ADC0 register/perigheral clock from base clock CLK_BASE_APB3 */
|
|
CLK_APB3_ADC1, /*!< ADC1 register/perigheral clock from base clock CLK_BASE_APB3 */
|
|
CLK_APB3_CAN0, /*!< CAN0 register/perigheral clock from base clock CLK_BASE_APB3 */
|
|
CLK_APB1_BUS = 32, /*!< APB1 bus clock clock from base clock CLK_BASE_APB1 */
|
|
CLK_APB1_MOTOCON, /*!< Motor controller register/perigheral clock from base clock CLK_BASE_APB1 */
|
|
CLK_APB1_I2C0, /*!< I2C0 register/perigheral clock from base clock CLK_BASE_APB1 */
|
|
CLK_APB1_I2S, /*!< I2S register/perigheral clock from base clock CLK_BASE_APB1 */
|
|
CLK_APB1_CAN1, /*!< CAN1 register/perigheral clock from base clock CLK_BASE_APB1 */
|
|
CLK_SPIFI = 64, /*!< SPIFI SCKI input clock from base clock CLK_BASE_SPIFI */
|
|
CLK_MX_BUS = 96, /*!< M3/M4 BUS core clock from base clock CLK_BASE_MX */
|
|
CLK_MX_SPIFI, /*!< SPIFI register clock from base clock CLK_BASE_MX */
|
|
CLK_MX_GPIO, /*!< GPIO register clock from base clock CLK_BASE_MX */
|
|
CLK_MX_LCD, /*!< LCD register clock from base clock CLK_BASE_MX */
|
|
CLK_MX_ETHERNET, /*!< ETHERNET register clock from base clock CLK_BASE_MX */
|
|
CLK_MX_USB0, /*!< USB0 register clock from base clock CLK_BASE_MX */
|
|
CLK_MX_EMC, /*!< EMC clock from base clock CLK_BASE_MX */
|
|
CLK_MX_SDIO, /*!< SDIO register clock from base clock CLK_BASE_MX */
|
|
CLK_MX_DMA, /*!< DMA register clock from base clock CLK_BASE_MX */
|
|
CLK_MX_MXCORE, /*!< M3/M4 CPU core clock from base clock CLK_BASE_MX */
|
|
RESERVED_ALIGN = CLK_MX_MXCORE + 3,
|
|
CLK_MX_SCT, /*!< SCT register clock from base clock CLK_BASE_MX */
|
|
CLK_MX_USB1, /*!< USB1 register clock from base clock CLK_BASE_MX */
|
|
CLK_MX_EMC_DIV, /*!< ENC divider clock from base clock CLK_BASE_MX */
|
|
CLK_MX_FLASHA, /*!< FLASHA bank clock from base clock CLK_BASE_MX */
|
|
CLK_MX_FLASHB, /*!< FLASHB bank clock from base clock CLK_BASE_MX */
|
|
#if defined(CHIP_LPC43XX)
|
|
CLK_M4_M0APP, /*!< M0 app CPU core clock from base clock CLK_BASE_MX */
|
|
CLK_MX_ADCHS, /*!< ADCHS clock from base clock CLK_BASE_ADCHS */
|
|
#else
|
|
CLK_RESERVED1,
|
|
CLK_RESERVED2,
|
|
#endif
|
|
CLK_MX_EEPROM, /*!< EEPROM clock from base clock CLK_BASE_MX */
|
|
CLK_MX_WWDT = 128, /*!< WWDT register clock from base clock CLK_BASE_MX */
|
|
CLK_MX_UART0, /*!< UART0 register clock from base clock CLK_BASE_MX */
|
|
CLK_MX_UART1, /*!< UART1 register clock from base clock CLK_BASE_MX */
|
|
CLK_MX_SSP0, /*!< SSP0 register clock from base clock CLK_BASE_MX */
|
|
CLK_MX_TIMER0, /*!< TIMER0 register/perigheral clock from base clock CLK_BASE_MX */
|
|
CLK_MX_TIMER1, /*!< TIMER1 register/perigheral clock from base clock CLK_BASE_MX */
|
|
CLK_MX_SCU, /*!< SCU register/perigheral clock from base clock CLK_BASE_MX */
|
|
CLK_MX_CREG, /*!< CREG clock from base clock CLK_BASE_MX */
|
|
CLK_MX_RITIMER = 160, /*!< RITIMER register/perigheral clock from base clock CLK_BASE_MX */
|
|
CLK_MX_UART2, /*!< UART3 register clock from base clock CLK_BASE_MX */
|
|
CLK_MX_UART3, /*!< UART4 register clock from base clock CLK_BASE_MX */
|
|
CLK_MX_TIMER2, /*!< TIMER2 register/perigheral clock from base clock CLK_BASE_MX */
|
|
CLK_MX_TIMER3, /*!< TIMER3 register/perigheral clock from base clock CLK_BASE_MX */
|
|
CLK_MX_SSP1, /*!< SSP1 register clock from base clock CLK_BASE_MX */
|
|
CLK_MX_QEI, /*!< QEI register/perigheral clock from base clock CLK_BASE_MX */
|
|
#if defined(CHIP_LPC43XX)
|
|
CLK_PERIPH_BUS = 192, /*!< Peripheral bus clock from base clock CLK_BASE_PERIPH */
|
|
CLK_RESERVED3,
|
|
CLK_PERIPH_CORE, /*!< Peripheral core clock from base clock CLK_BASE_PERIPH */
|
|
CLK_PERIPH_SGPIO, /*!< SGPIO clock from base clock CLK_BASE_PERIPH */
|
|
#else
|
|
CLK_RESERVED3 = 192,
|
|
CLK_RESERVED3A,
|
|
CLK_RESERVED4,
|
|
CLK_RESERVED5,
|
|
#endif
|
|
CLK_USB0 = 224, /*!< USB0 clock from base clock CLK_BASE_USB0 */
|
|
CLK_USB1 = 256, /*!< USB1 clock from base clock CLK_BASE_USB1 */
|
|
#if defined(CHIP_LPC43XX)
|
|
CLK_SPI = 288, /*!< SPI clock from base clock CLK_BASE_SPI */
|
|
CLK_ADCHS = 320, /*!< ADCHS clock from base clock CLK_BASE_ADCHS */
|
|
#else
|
|
CLK_RESERVED7 = 320,
|
|
CLK_RESERVED8,
|
|
#endif
|
|
CLK_CCU1_LAST,
|
|
|
|
/* CCU2 clocks */
|
|
CLK_CCU2_START,
|
|
CLK_APLL = CLK_CCU2_START, /*!< Audio PLL clock from base clock CLK_BASE_APLL */
|
|
RESERVED_ALIGNB = CLK_CCU2_START + 31,
|
|
CLK_APB2_UART3, /*!< UART3 clock from base clock CLK_BASE_UART3 */
|
|
RESERVED_ALIGNC = CLK_CCU2_START + 63,
|
|
CLK_APB2_UART2, /*!< UART2 clock from base clock CLK_BASE_UART2 */
|
|
RESERVED_ALIGND = CLK_CCU2_START + 95,
|
|
CLK_APB0_UART1, /*!< UART1 clock from base clock CLK_BASE_UART1 */
|
|
RESERVED_ALIGNE = CLK_CCU2_START + 127,
|
|
CLK_APB0_UART0, /*!< UART0 clock from base clock CLK_BASE_UART0 */
|
|
RESERVED_ALIGNF = CLK_CCU2_START + 159,
|
|
CLK_APB2_SSP1, /*!< SSP1 clock from base clock CLK_BASE_SSP1 */
|
|
RESERVED_ALIGNG = CLK_CCU2_START + 191,
|
|
CLK_APB0_SSP0, /*!< SSP0 clock from base clock CLK_BASE_SSP0 */
|
|
RESERVED_ALIGNH = CLK_CCU2_START + 223,
|
|
CLK_APB2_SDIO, /*!< SDIO clock from base clock CLK_BASE_SDIO */
|
|
CLK_CCU2_LAST
|
|
} CHIP_CCU_CLK_T;
|
|
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* __CHIP_CLOCKS_H_ */
|
|
|
|
|
|
|
|
|
|
|
|
|