Fix various SAM3X register definitions and reformat.
[bertos.git] / bertos / cpu / cortex-m3 / io / sam3_pmc.h
1 /**
2  * \file
3  * <!--
4  * This file is part of BeRTOS.
5  *
6  * Bertos is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
19  *
20  * As a special exception, you may use this file as part of a free software
21  * library without restriction.  Specifically, if other files instantiate
22  * templates or use macros or inline functions from this file, or you compile
23  * this file and link it with other files to produce an executable, this
24  * file does not by itself cause the resulting executable to be covered by
25  * the GNU General Public License.  This exception does not however
26  * invalidate any other reasons why the executable file might be covered by
27  * the GNU General Public License.
28  *
29  * Copyright 2010 Develer S.r.l. (http://www.develer.com/)
30  *
31  * -->
32  *
33  * \brief SAM3 PMC hardware.
34  */
35
36 #ifndef SAM3_PMC_H
37 #define SAM3_PMC_H
38
39 #include <cfg/macros.h>
40 #include <cfg/debug.h>
41
42
43 /** PMC registers base. */
44 #if CPU_CM3_SAM3X
45         #define PMC_BASE  0x400E0600
46 #else
47         #define PMC_BASE  0x400E0400
48 #endif
49
50 /**
51  * PMC register offsets.
52  */
53 /*\{*/
54 #define PMC_SCER_OFF  0x00         ///< System Clock Enable Register
55 #define PMC_SCDR_OFF  0x04         ///< System Clock Disable Register
56 #define PMC_SCSR_OFF  0x08         ///< System Clock Status Register
57 #define PMC_MOR_OFF   0x20         ///< Main Oscillator Register
58 #define PMC_MCFR_OFF  0x24         ///< Main Clock Frequency Register
59 #define PMC_MCKR_OFF  0x30         ///< Master Clock Register
60 #define PMC_IER_OFF   0x60         ///< Interrupt Enable Register
61 #define PMC_IDR_OFF   0x64         ///< Interrupt Disable Register
62 #define PMC_SR_OFF    0x68         ///< Status Register
63 #define PMC_IMR_OFF   0x6C         ///< Interrupt Mask Register
64 #define PMC_FSMR_OFF  0x70         ///< Fast Startup Mode Register
65 #define PMC_FSPR_OFF  0x74         ///< Fast Startup Polarity Register
66 #define PMC_FOCR_OFF  0x78         ///< Fault Output Clear Register
67 #define PMC_WPMR_OFF  0xE4         ///< Write Protect Mode Register
68 #define PMC_WPSR_OFF  0xE8         ///< Write Protect Status Register
69
70 #if CPU_CM3_SAM3N
71         #define PMC_PCER_OFF   0x10    ///< Peripheral Clock Enable Register
72         #define PMC_PCDR_OFF   0x14    ///< Peripheral Clock Disable Register
73         #define PMC_PCSR_OFF   0x18    ///< Peripheral Clock Status Register
74         #define PMC_PLLR_OFF   0x28    ///< PLL Register
75         #define PMC_PCK_OFF    0x40    ///< Programmable Clock 0 Register
76         #define PMC_OCR_OFF    0x110   ///< Oscillator Calibration Register
77 #elif CPU_CM3_SAM3X
78         #define PMC_PCER0_OFF  0x10    ///< Peripheral Clock Enable Register
79         #define PMC_PCDR0_OFF  0x14    ///< Peripheral Clock Disable Register
80         #define PMC_PCSR0_OFF  0x18    ///< Peripheral Clock Status Register
81         #define PMC_UCKR_OFF   0x1C    ///< UTMI clock register
82         #define PMC_PLLAR_OFF  0x28    ///< PLL Register
83         #define PMC_USB_OFF    0x38    ///< USB clock register
84         #define PMC_PCK0_OFF   0x40    ///< Programmable Clock 0 Register
85         #define PMC_PCK1_OFF   0x44    ///< Programmable Clock 1 Register
86         #define PMC_PCK2_OFF   0x48    ///< Programmable Clock 2 Register
87         #define PMC_PCER1_OFF  0x100   ///< Peripheral Clock Enable Register
88         #define PMC_PCDR1_OFF  0x104   ///< Peripheral Clock Disable Register
89         #define PMC_PCSR1_OFF  0x108   ///< Peripheral Clock Status Register
90         #define PMC_PCR_OFF    0x10C   ///< Oscillator Calibration Register
91
92         #define PMC_PLLROFF    PMC_PLLAR_OFF
93 #else
94         #warning Some PMC registers undefined for the selected CPU
95 #endif
96 /*\}*/
97
98
99 /**
100  * Programmable clock ids.
101  * \{
102  */
103 #define  PMC_PCK0_ID   8
104 #define  PMC_PCK1_ID   9
105 #define  PMC_PCK2_ID  10
106 /*\}*/
107
108 /**
109  * Programmable clock status.
110  * \{
111  */
112 #define PMC_PCKRDY0                          8  ///< Programmable clock 0 ready.
113 #define PMC_PCKRDY1                          9  ///< Programmable clock 1 ready.
114 #define PMC_PCKRDY2                         10  ///< Programmable clock 2 ready.
115 /*\}*/
116
117 /**
118  * PMC registers.
119  */
120 /*\{*/
121 #define PMC_SCER  (*((reg32_t *)(PMC_BASE + PMC_SCER_OFF)))   ///< System Clock Enable Register
122 #define PMC_SCDR  (*((reg32_t *)(PMC_BASE + PMC_SCDR_OFF)))   ///< System Clock Disable Register
123 #define PMC_SCSR  (*((reg32_t *)(PMC_BASE + PMC_SCSR_OFF)))   ///< System Clock Status Register
124 #define CKGR_MOR  (*((reg32_t *)(PMC_BASE + PMC_MOR_OFF )))   ///< Main Oscillator Register
125 #define CKGR_MCFR (*((reg32_t *)(PMC_BASE + PMC_MCFR_OFF)))   ///< Main Clock Frequency Register
126 #define PMC_MCKR  (*((reg32_t *)(PMC_BASE + PMC_MCKR_OFF)))   ///< Master Clock Register
127 #define PMC_IER   (*((reg32_t *)(PMC_BASE + PMC_IER_OFF )))   ///< Interrupt Enable Register
128 #define PMC_IDR   (*((reg32_t *)(PMC_BASE + PMC_IDR_OFF )))   ///< Interrupt Disable Register
129 #define PMC_SR    (*((reg32_t *)(PMC_BASE + PMC_SR_OFF  )))   ///< Status Register
130 #define PMC_IMR   (*((reg32_t *)(PMC_BASE + PMC_IMR_OFF )))   ///< Interrupt Mask Register
131 #define PMC_FSMR  (*((reg32_t *)(PMC_BASE + PMC_FSMR_OFF)))   ///< Fast Startup Mode Register
132 #define PMC_FSPR  (*((reg32_t *)(PMC_BASE + PMC_FSPR_OFF)))   ///< Fast Startup Polarity Register
133 #define PMC_FOCR  (*((reg32_t *)(PMC_BASE + PMC_FOCR_OFF)))   ///< Fault Output Clear Register
134 #define PMC_WPMR  (*((reg32_t *)(PMC_BASE + PMC_WPMR_OFF)))   ///< Write Protect Mode Register
135 #define PMC_WPSR  (*((reg32_t *)(PMC_BASE + PMC_WPSR_OFF)))   ///< Write Protect Status Register
136
137 #if CPU_CM3_SAM3N
138         #define PMC_PCER   (*((reg32_t *)(PMC_BASE + PMC_PCER_OFF)))  ///< Peripheral Clock Enable Register
139         #define PMC_PCDR   (*((reg32_t *)(PMC_BASE + PMC_PCDR_OFF)))  ///< Peripheral Clock Disable Register
140         #define PMC_PCSR   (*((reg32_t *)(PMC_BASE + PMC_PCSR_OFF)))  ///< Peripheral Clock Status Register
141         #define CKGR_PLLR  (*((reg32_t *)(PMC_BASE + PMC_PLLR_OFF)))  ///< PLL Register
142         #define PMC_PCK    (*((reg32_t *)(PMC_BASE + PMC_PCK_OFF )))  ///< Programmable Clock 0 Register
143         #define PMC_OCR    (*((reg32_t *)(PMC_BASE + PMC_OCR_OFF )))  ///< Oscillator Calibration Register
144 #elif CPU_CM3_SAM3X
145         #define PMC_PCER0  (*((reg32_t *)(PMC_BASE + PMC_PCER0_OFF)))     ///< Peripheral Clock Enable Register
146         #define PMC_PCDR0  (*((reg32_t *)(PMC_BASE + PMC_PCDR0_OFF)))     ///< Peripheral Clock Disable Register
147         #define PMC_PCSR0  (*((reg32_t *)(PMC_BASE + PMC_PCSR0_OFF)))     ///< Peripheral Clock Status Register
148         #define PMC_UCKR   (*((reg32_t *)(PMC_BASE + PMC_UCKR_OFF)))     ///< UTMI clock register
149         #define CKGR_PLLAR (*((reg32_t *)(PMC_BASE + PMC_PLLAR_OFF)))     ///< PLL Register
150         #define PMC_USB_O  (*((reg32_t *)(PMC_BASE + PMC_USB_O_OFF)))     ///< USB clock register
151         #define PMC_PCK0   (*((reg32_t *)(PMC_BASE + PMC_PCK0_OFF)))     ///< Programmable Clock 0 Register
152         #define PMC_PCK1   (*((reg32_t *)(PMC_BASE + PMC_PCK1_OFF)))     ///< Programmable Clock 1 Register
153         #define PMC_PCK2   (*((reg32_t *)(PMC_BASE + PMC_PCK2_OFF)))     ///< Programmable Clock 2 Register
154         #define PMC_PCER1  (*((reg32_t *)(PMC_BASE + PMC_PCER1_OFF)))     ///< Peripheral Clock Enable Register
155         #define PMC_PCDR1  (*((reg32_t *)(PMC_BASE + PMC_PCDR1_OFF)))     ///< Peripheral Clock Disable Register
156         #define PMC_PCSR1  (*((reg32_t *)(PMC_BASE + PMC_PCSR1_OFF)))     ///< Peripheral Clock Status Register
157         #define PMC_PCR    (*((reg32_t *)(PMC_BASE + PMC_PCR_OFF)))     ///< Oscillator Calibration Register
158
159         #define CKGR_PLLR  CKGR_PLLAR
160 #endif
161 /*\}*/
162
163 /**
164  * Enable a peripheral clock.
165  *
166  * \param id  peripheral id of the peripheral whose clock is enabled
167  */
168 #ifdef PMC_PCER1
169
170 INLINE void pmc_periphEnable(unsigned id)
171 {
172         ASSERT(id < 64);
173         if (id < 32)
174                 PMC_PCER0 = BV(id);
175         else
176                 PMC_PCER1 = BV(id - 32);
177 }
178
179 #else
180
181 INLINE void pmc_periphEnable(unsigned id)
182 {
183         ASSERT(id < 32);
184         PMC_PCER = BV(id);
185 }
186
187 #endif
188
189 /**
190  * Disable a peripheral clock.
191  *
192  * \param id  peripheral id of the peripheral whose clock is enabled
193  */
194 #ifdef PMC_PCER1
195
196 INLINE void pmc_periphDisable(unsigned id)
197 {
198         ASSERT(id < 64);
199         if (id < 32)
200                 PMC_PCDR0 = BV(id);
201         else
202                 PMC_PCDR1 = BV(id - 32);
203 }
204
205 #else
206
207 INLINE void pmc_periphDisable(unsigned id)
208 {
209         ASSERT(id < 32);
210         PMC_PCDR = BV(id);
211 }
212
213 #endif
214
215 /**
216  * Defines for bit fields in PMC_SCER register.
217  */
218 /*\{*/
219 #define PMC_SCER_PCK0  8   ///< Programmable Clock 0 Output Enable
220 #define PMC_SCER_PCK1  9   ///< Programmable Clock 1 Output Enable
221 #define PMC_SCER_PCK2  10  ///< Programmable Clock 2 Output Enable
222 /*\}*/
223
224 /**
225  * Defines for bit fields in PMC_SCDR register.
226  */
227 /*\{*/
228 #define PMC_SCDR_PCK0  8   ///< Programmable Clock 0 Output Disable
229 #define PMC_SCDR_PCK1  9   ///< Programmable Clock 1 Output Disable
230 #define PMC_SCDR_PCK2  10  ///< Programmable Clock 2 Output Disable
231 /*\}*/
232
233 /**
234  * Defines for bit fields in PMC_SCSR register.
235  */
236 /*\{*/
237 #define PMC_SCSR_PCK0  8   ///< Programmable Clock 0 Output Status
238 #define PMC_SCSR_PCK1  9   ///< Programmable Clock 1 Output Status
239 #define PMC_SCSR_PCK2  10  ///< Programmable Clock 2 Output Status
240 /*\}*/
241
242 /**
243  * Defines for bit fields in CKGR_MOR register.
244  */
245 /*\{*/
246 #define CKGR_MOR_MOSCXTEN         0   ///< Main Crystal Oscillator Enable
247 #define CKGR_MOR_MOSCXTBY         1   ///< Main Crystal Oscillator Bypass
248 #define CKGR_MOR_WAITMODE         2   ///< Wait Mode Command
249 #define CKGR_MOR_MOSCRCEN         3   ///< Main On-Chip RC Oscillator Enable
250 #define CKGR_MOR_MOSCRCF_SHIFT    4
251 #define CKGR_MOR_MOSCRCF_MASK     (0x7 << CKGR_MOR_MOSCRCF_SHIFT)   ///< Main On-Chip RC Oscillator Frequency Selection
252 #define CKGR_MOR_MOSCRCF(value)   ((CKGR_MOR_MOSCRCF_MASK & ((value) << CKGR_MOR_MOSCRCF_SHIFT)))
253 #define CKGR_MOR_MOSCRCF_4MHZ   (0x0 << CKGR_MOR_MOSCRCF_SHIFT)
254 #define CKGR_MOR_MOSCRCF_8MHZ   (0x1 << CKGR_MOR_MOSCRCF_SHIFT)
255 #define CKGR_MOR_MOSCRCF_12MHZ  (0x2 << CKGR_MOR_MOSCRCF_SHIFT)
256 #define CKGR_MOR_MOSCXTST_SHIFT   8
257 #define CKGR_MOR_MOSCXTST_MASK    (0xff << CKGR_MOR_MOSCXTST_SHIFT)   ///< Main Crystal Oscillator Start-up Time
258 #define CKGR_MOR_MOSCXTST(value)  ((CKGR_MOR_MOSCXTST_MASK & ((value) << CKGR_MOR_MOSCXTST_SHIFT)))
259 #define CKGR_MOR_KEY_SHIFT        16
260 #define CKGR_MOR_KEY_MASK         (0xffu << CKGR_MOR_KEY_SHIFT)   ///< Password
261 #define CKGR_MOR_KEY(value)       ((CKGR_MOR_KEY_MASK & ((value) << CKGR_MOR_KEY_SHIFT)))
262 #define CKGR_MOR_MOSCSEL          24   ///< Main Oscillator Selection
263 #define CKGR_MOR_CFDEN            25   ///< Clock Failure Detector Enable
264 /*\}*/
265
266 /**
267  * Defines for bit fields in CKGR_MCFR register.
268  */
269 /*\{*/
270 #define CKGR_MCFR_MAINF_MASK  0xffff    ///< Main Clock Frequency mask
271 #define CKGR_MCFR_MAINFRDY    16        ///< Main Clock Ready
272 /*\}*/
273
274 /**
275  * Defines for bit fields in CKGR_PLLR register.
276  */
277 /*\{*/
278 #define CKGR_PLLR_DIV_MASK        0xff   ///< Divider mask
279 #define CKGR_PLLR_DIV(value)      (CKGR_PLLR_DIV_MASK & (value))
280 #define CKGR_PLLR_PLLCOUNT_SHIFT  8
281 #define CKGR_PLLR_PLLCOUNT_MASK   (0x3f << CKGR_PLLR_PLLCOUNT_SHIFT)   ///< PLL Counter mask
282 #define CKGR_PLLR_PLLCOUNT(value) (CKGR_PLLR_PLLCOUNT_MASK & ((value) << CKGR_PLLR_PLLCOUNT_SHIFT))
283 #define CKGR_PLLR_MUL_SHIFT       16
284 #define CKGR_PLLR_MUL_MASK        (0x7ff << CKGR_PLLR_MUL_SHIFT)   ///< PLL Multiplier mask
285 #define CKGR_PLLR_MUL(value)      (CKGR_PLLR_MUL_MASK & ((value) << CKGR_PLLR_MUL_SHIFT))
286 #define CKGR_PLLR_STUCKTO1        29
287 /*\}*/
288
289 /**
290  * Defines for bit fields in PMC_MCKR register.
291  */
292 /*\{*/
293 #define   PMC_MCKR_CSS_MASK        0x3   ///< Master Clock Source Selection mask
294 #define   PMC_MCKR_CSS_SLOW_CLK  0x0   ///< Slow Clock is selected
295 #define   PMC_MCKR_CSS_MAIN_CLK  0x1   ///< Main Clock is selected
296 #define   PMC_MCKR_CSS_PLL_CLK   0x2   ///< PLL Clock is selected
297 #define   PMC_MCKR_PRES_SHIFT      4
298 #define   PMC_MCKR_PRES_MASK       (0x7 << PMC_MCKR_PRES_SHIFT)    ///< Processor Clock Prescaler mask
299 #define   PMC_MCKR_PRES_CLK      (0x0 << PMC_MCKR_PRES_SHIFT)   ///< Selected clock
300 #define   PMC_MCKR_PRES_CLK_2    (0x1 << PMC_MCKR_PRES_SHIFT)   ///< Selected clock divided by 2
301 #define   PMC_MCKR_PRES_CLK_4    (0x2 << PMC_MCKR_PRES_SHIFT)   ///< Selected clock divided by 4
302 #define   PMC_MCKR_PRES_CLK_8    (0x3 << PMC_MCKR_PRES_SHIFT)   ///< Selected clock divided by 8
303 #define   PMC_MCKR_PRES_CLK_16   (0x4 << PMC_MCKR_PRES_SHIFT)   ///< Selected clock divided by 16
304 #define   PMC_MCKR_PRES_CLK_32   (0x5 << PMC_MCKR_PRES_SHIFT)   ///< Selected clock divided by 32
305 #define   PMC_MCKR_PRES_CLK_64   (0x6 << PMC_MCKR_PRES_SHIFT)   ///< Selected clock divided by 64
306 #define   PMC_MCKR_PRES_CLK_3    (0x7 << PMC_MCKR_PRES_SHIFT)   ///< Selected clock divided by 3
307 #define   PMC_MCKR_PLLDIV2         12   ///< PLL Divisor by 2
308 /*\}*/
309
310 /**
311  * Defines for bit fields in PMC_PCK[3] register.
312  */
313 /*\{*/
314 #define   PMC_PCK_CSS_MASK     0x7   ///< Master Clock Source Selection mask
315 #define   PMC_PCK_CSS_SLOW     0x0   ///< Slow Clock is selected
316 #define   PMC_PCK_CSS_MAIN     0x1   ///< Main Clock is selected
317 #define   PMC_PCK_CSS_PLL      0x2   ///< PLL Clock is selected
318 #define   PMC_PCK_CSS_MCK      0x4   ///< Master Clock is selected
319 #define   PMC_PCK_PRES_SHIFT     4
320 #define   PMC_PCK_PRES_MASK    (0x7 << PMC_PCK_PRES_SHIFT)   ///< Programmable Clock Prescaler
321 #define   PMC_PCK_PRES_CLK     (0x0 << PMC_PCK_PRES_SHIFT)   ///< Selected clock
322 #define   PMC_PCK_PRES_CLK_2   (0x1 << PMC_PCK_PRES_SHIFT)   ///< Selected clock divided by 2
323 #define   PMC_PCK_PRES_CLK_4   (0x2 << PMC_PCK_PRES_SHIFT)   ///< Selected clock divided by 4
324 #define   PMC_PCK_PRES_CLK_8   (0x3 << PMC_PCK_PRES_SHIFT)   ///< Selected clock divided by 8
325 #define   PMC_PCK_PRES_CLK_16  (0x4 << PMC_PCK_PRES_SHIFT)   ///< Selected clock divided by 16
326 #define   PMC_PCK_PRES_CLK_32  (0x5 << PMC_PCK_PRES_SHIFT)   ///< Selected clock divided by 32
327 #define   PMC_PCK_PRES_CLK_64  (0x6 << PMC_PCK_PRES_SHIFT)   ///< Selected clock divided by 64
328 /*\}*/
329
330 /**
331  * Defines for bit fields in PMC_IER register.
332  */
333 /*\{*/
334 #define PMC_IER_MOSCXTS   0   ///< Main Crystal Oscillator Status Interrupt Enable
335 #define PMC_IER_LOCK      1   ///< PLL Lock Interrupt Enable
336 #define PMC_IER_MCKRDY    3   ///< Master Clock Ready Interrupt Enable
337 #define PMC_IER_PCKRDY0   8   ///< Programmable Clock Ready 0 Interrupt Enable
338 #define PMC_IER_PCKRDY1   9   ///< Programmable Clock Ready 1 Interrupt Enable
339 #define PMC_IER_PCKRDY2   10  ///< Programmable Clock Ready 2 Interrupt Enable
340 #define PMC_IER_MOSCSELS  16  ///< Main Oscillator Selection Status Interrupt Enable
341 #define PMC_IER_MOSCRCS   17  ///< Main On-Chip RC Status Interrupt Enable
342 #define PMC_IER_CFDEV     18  ///< Clock Failure Detector Event Interrupt Enable
343 /*\}*/
344
345 /**
346  * Defines for bit fields in PMC_IDR register.
347  */
348 /*\{*/
349 #define PMC_IDR_MOSCXTS   0   ///< Main Crystal Oscillator Status Interrupt Disable
350 #define PMC_IDR_LOCK      1   ///< PLL Lock Interrupt Disable
351 #define PMC_IDR_MCKRDY    3   ///< Master Clock Ready Interrupt Disable
352 #define PMC_IDR_PCKRDY0   8   ///< Programmable Clock Ready 0 Interrupt Disable
353 #define PMC_IDR_PCKRDY1   9   ///< Programmable Clock Ready 1 Interrupt Disable
354 #define PMC_IDR_PCKRDY2   10  ///< Programmable Clock Ready 2 Interrupt Disable
355 #define PMC_IDR_MOSCSELS  16  ///< Main Oscillator Selection Status Interrupt Disable
356 #define PMC_IDR_MOSCRCS   17  ///< Main On-Chip RC Status Interrupt Disable
357 #define PMC_IDR_CFDEV     18  ///< Clock Failure Detector Event Interrupt Disable
358 /*\}*/
359
360 /**
361  * Defines for bit fields in PMC_SR register.
362  */
363 /*\{*/
364 #define PMC_SR_MOSCXTS   0   ///< Main XTAL Oscillator Status
365 #define PMC_SR_LOCK      1   ///< PLL Lock Status
366 #define PMC_SR_MCKRDY    3   ///< Master Clock Status
367 #define PMC_SR_OSCSELS   7   ///< Slow Clock Oscillator Selection
368 #define PMC_SR_PCKRDY0   8   ///< Programmable Clock Ready Status
369 #define PMC_SR_PCKRDY1   9   ///< Programmable Clock Ready Status
370 #define PMC_SR_PCKRDY2   10  ///< Programmable Clock Ready Status
371 #define PMC_SR_MOSCSELS  16  ///< Main Oscillator Selection Status
372 #define PMC_SR_MOSCRCS   17  ///< Main On-Chip RC Oscillator Status
373 #define PMC_SR_CFDEV     18  ///< Clock Failure Detector Event
374 #define PMC_SR_CFDS      19  ///< Clock Failure Detector Status
375 #define PMC_SR_FOS       20  ///< Clock Failure Detector Fault Output Status
376 /*\}*/
377
378 /**
379  * Defines for bit fields in PMC_IMR register.
380  */
381 /*\{*/
382 #define PMC_IMR_MOSCXTS   0   ///< Main Crystal Oscillator Status Interrupt Mask
383 #define PMC_IMR_LOCK      1   ///< PLL Lock Interrupt Mask
384 #define PMC_IMR_MCKRDY    3   ///< Master Clock Ready Interrupt Mask
385 #define PMC_IMR_PCKRDY0   8   ///< Programmable Clock Ready 0 Interrupt Mask
386 #define PMC_IMR_PCKRDY1   9   ///< Programmable Clock Ready 1 Interrupt Mask
387 #define PMC_IMR_PCKRDY2   10  ///< Programmable Clock Ready 2 Interrupt Mask
388 #define PMC_IMR_MOSCSELS  16  ///< Main Oscillator Selection Status Interrupt Mask
389 #define PMC_IMR_MOSCRCS   17  ///< Main On-Chip RC Status Interrupt Mask
390 #define PMC_IMR_CFDEV     18  ///< Clock Failure Detector Event Interrupt Mask
391 /*\}*/
392
393 /**
394  * Defines for bit fields in PMC_FSMR register.
395  */
396 /*\{*/
397 #define PMC_FSMR_FSTT0   0   ///< Fast Startup Input Enable 0
398 #define PMC_FSMR_FSTT1   1   ///< Fast Startup Input Enable 1
399 #define PMC_FSMR_FSTT2   2   ///< Fast Startup Input Enable 2
400 #define PMC_FSMR_FSTT3   3   ///< Fast Startup Input Enable 3
401 #define PMC_FSMR_FSTT4   4   ///< Fast Startup Input Enable 4
402 #define PMC_FSMR_FSTT5   5   ///< Fast Startup Input Enable 5
403 #define PMC_FSMR_FSTT6   6   ///< Fast Startup Input Enable 6
404 #define PMC_FSMR_FSTT7   7   ///< Fast Startup Input Enable 7
405 #define PMC_FSMR_FSTT8   8   ///< Fast Startup Input Enable 8
406 #define PMC_FSMR_FSTT9   9   ///< Fast Startup Input Enable 9
407 #define PMC_FSMR_FSTT10  10  ///< Fast Startup Input Enable 10
408 #define PMC_FSMR_FSTT11  11  ///< Fast Startup Input Enable 11
409 #define PMC_FSMR_FSTT12  12  ///< Fast Startup Input Enable 12
410 #define PMC_FSMR_FSTT13  13  ///< Fast Startup Input Enable 13
411 #define PMC_FSMR_FSTT14  14  ///< Fast Startup Input Enable 14
412 #define PMC_FSMR_FSTT15  15  ///< Fast Startup Input Enable 15
413 #define PMC_FSMR_RTTAL   16  ///< RTT Alarm Enable
414 #define PMC_FSMR_RTCAL   17  ///< RTC Alarm Enable
415 #define PMC_FSMR_LPM     20  ///< Low Power Mode
416 /*\}*/
417
418 /**
419  * Defines for bit fields in PMC_FSPR register.
420  */
421 /*\{*/
422 #define PMC_FSPR_FSTP0   0   ///< Fast Startup Input Polarityx
423 #define PMC_FSPR_FSTP1   1   ///< Fast Startup Input Polarityx
424 #define PMC_FSPR_FSTP2   2   ///< Fast Startup Input Polarityx
425 #define PMC_FSPR_FSTP3   3   ///< Fast Startup Input Polarityx
426 #define PMC_FSPR_FSTP4   4   ///< Fast Startup Input Polarityx
427 #define PMC_FSPR_FSTP5   5   ///< Fast Startup Input Polarityx
428 #define PMC_FSPR_FSTP6   6   ///< Fast Startup Input Polarityx
429 #define PMC_FSPR_FSTP7   7   ///< Fast Startup Input Polarityx
430 #define PMC_FSPR_FSTP8   8   ///< Fast Startup Input Polarityx
431 #define PMC_FSPR_FSTP9   9   ///< Fast Startup Input Polarityx
432 #define PMC_FSPR_FSTP10  10  ///< Fast Startup Input Polarityx
433 #define PMC_FSPR_FSTP11  11  ///< Fast Startup Input Polarityx
434 #define PMC_FSPR_FSTP12  12  ///< Fast Startup Input Polarityx
435 #define PMC_FSPR_FSTP13  13  ///< Fast Startup Input Polarityx
436 #define PMC_FSPR_FSTP14  14  ///< Fast Startup Input Polarityx
437 #define PMC_FSPR_FSTP15  15  ///< Fast Startup Input Polarityx
438 /*\}*/
439
440 /**
441  * Defines for bit fields in PMC_FOCR register.
442  */
443 /*\{*/
444 #define PMC_FOCR_FOCLR  0   ///< Fault Output Clear
445 /*\}*/
446
447 /**
448  * Defines for bit fields in PMC_WPMR register.
449  */
450 /*\{*/
451 #define PMC_WPMR_WPEN          0   ///< Write Protect Enable
452 #define PMC_WPMR_WPKEY_SHIFT   8
453 #define PMC_WPMR_WPKEY_MASK    (0xffffff << PMC_WPMR_WPKEY_SHIFT)   ///< Write Protect key mask
454 #define PMC_WPMR_WPKEY(value)  ((PMC_WPMR_WPKEY_MASK & ((value) << PMC_WPMR_WPKEY_SHIFT)))
455 /*\}*/
456
457 /**
458  * Defines for bit fields in PMC_WPSR register.
459  */
460 /*\{*/
461 #define PMC_WPSR_WPVS          0   ///< Write Protect Violation Status
462 #define PMC_WPSR_WPVSRC_SHIFT  8
463 #define PMC_WPSR_WPVSRC_MASK   (0xffff << PMC_WPSR_WPVSRC_SHIFT)   ///< Write Protect Violation Source mask
464 /*\}*/
465
466 /**
467  * Defines for bit fields in PMC_OCR register.
468  */
469 /*\{*/
470 #define PMC_OCR_CAL4_MASK     0x7f  ///< RC Oscillator Calibration bits for 4 MHz mask
471 #define PMC_OCR_CAL4(value)   (PMC_OCR_CAL4_MASK & (value))
472 #define PMC_OCR_SEL4          7   ///< Selection of RC Oscillator Calibration bits for 4 MHz
473 #define PMC_OCR_CAL8_SHIFT    8
474 #define PMC_OCR_CAL8_MASK     (0x7f << PMC_OCR_CAL8_SHIFT)   ///< RC Oscillator Calibration bits for 8 MHz mask
475 #define PMC_OCR_CAL8(value)   ((PMC_OCR_CAL8_MASK & ((value) << PMC_OCR_CAL8_SHIFT)))
476 #define PMC_OCR_SEL8          15  ///< Selection of RC Oscillator Calibration bits for 8 MHz
477 #define PMC_OCR_CAL12_SHIFT   16
478 #define PMC_OCR_CAL12_MASK    (0x7f << PMC_OCR_CAL12_SHIFT)   ///< RC Oscillator Calibration bits for 12 MHz mask
479 #define PMC_OCR_CAL12(value)  ((PMC_OCR_CAL12_MASK & ((value) << PMC_OCR_CAL12_SHIFT)))
480 #define PMC_OCR_SEL12         23   ///< Selection of RC Oscillator Calibration bits for 12 MHz
481 /*\}*/
482
483
484 #endif /* SAM3_PMC_H */