-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathchip_clocks.h
252 lines (240 loc) · 10.8 KB
/
chip_clocks.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
/*
* @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_ */