Go to the documentation of this file.00001
00037
00038
00039
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085 #ifndef _PM_H_
00086 #define _PM_H_
00087
00088 #include <arch/avr32.h>
00089 #include <avr32/io.h>
00090 #include "preprocessor.h"
00091
00092
00103 #define SLEEP(mode) {__asm__ __volatile__ ("sleep "STRINGZ(mode));}
00104
00105
00107 typedef struct
00108 {
00110 unsigned long cpu_f;
00111
00113 unsigned long pba_f;
00114
00116 unsigned long osc0_f;
00117
00119 unsigned long osc0_startup;
00120 } pm_freq_param_t;
00121
00122 #define PM_FREQ_STATUS_FAIL (-1)
00123 #define PM_FREQ_STATUS_OK (0)
00124
00125
00133 #if (defined __GNUC__)
00134 __attribute__((__always_inline__))
00135 #endif
00136 extern __inline__ unsigned int pm_get_reset_cause(volatile avr32_pm_t *pm)
00137 {
00138 return pm->rcause;
00139 }
00140
00141
00146 extern void pm_enable_osc0_ext_clock(volatile avr32_pm_t *pm);
00147
00148
00154 extern void pm_enable_osc0_crystal(volatile avr32_pm_t *pm, unsigned int fosc0);
00155
00156
00162 extern void pm_enable_clk0(volatile avr32_pm_t *pm, unsigned int startup);
00163
00164
00169 extern void pm_disable_clk0(volatile avr32_pm_t *pm);
00170
00171
00177 extern void pm_enable_clk0_no_wait(volatile avr32_pm_t *pm, unsigned int startup);
00178
00179
00184 extern void pm_wait_for_clk0_ready(volatile avr32_pm_t *pm);
00185
00186
00191 extern void pm_enable_osc1_ext_clock(volatile avr32_pm_t *pm);
00192
00193
00199 extern void pm_enable_osc1_crystal(volatile avr32_pm_t *pm, unsigned int fosc1);
00200
00201
00207 extern void pm_enable_clk1(volatile avr32_pm_t *pm, unsigned int startup);
00208
00209
00214 extern void pm_disable_clk1(volatile avr32_pm_t *pm);
00215
00216
00222 extern void pm_enable_clk1_no_wait(volatile avr32_pm_t *pm, unsigned int startup);
00223
00224
00229 extern void pm_wait_for_clk1_ready(volatile avr32_pm_t *pm);
00230
00231
00236 extern void pm_enable_osc32_ext_clock(volatile avr32_pm_t *pm);
00237
00238
00243 extern void pm_enable_osc32_crystal(volatile avr32_pm_t *pm);
00244
00245
00251 extern void pm_enable_clk32(volatile avr32_pm_t *pm, unsigned int startup);
00252
00253
00258 extern void pm_disable_clk32(volatile avr32_pm_t *pm);
00259
00260
00266 extern void pm_enable_clk32_no_wait(volatile avr32_pm_t *pm, unsigned int startup);
00267
00268
00273 extern void pm_wait_for_clk32_ready(volatile avr32_pm_t *pm);
00274
00275
00286 extern void pm_cksel(volatile avr32_pm_t *pm, unsigned int pbadiv, unsigned int pbasel, unsigned int pbbdiv, unsigned int pbbsel, unsigned int hsbdiv, unsigned int hsbsel);
00287
00288
00298 extern void pm_gc_setup(volatile avr32_pm_t *pm, unsigned int gc, unsigned int osc_or_pll, unsigned int pll_osc, unsigned int diven, unsigned int div);
00299
00300
00306 extern void pm_gc_enable(volatile avr32_pm_t *pm, unsigned int gc);
00307
00308
00314 extern void pm_gc_disable(volatile avr32_pm_t *pm, unsigned int gc);
00315
00316
00326 extern void pm_pll_setup(volatile avr32_pm_t *pm, unsigned int pll, unsigned int mul, unsigned int div, unsigned int osc, unsigned int lockcount);
00327
00328
00337 extern void pm_pll_set_option(volatile avr32_pm_t *pm, unsigned int pll, unsigned int pll_freq, unsigned int pll_div2, unsigned int pll_wbwdisable);
00338
00339
00346 extern unsigned int pm_pll_get_option(volatile avr32_pm_t *pm, unsigned int pll);
00347
00348
00354 extern void pm_pll_enable(volatile avr32_pm_t *pm, unsigned int pll);
00355
00356
00362 extern void pm_pll_disable(volatile avr32_pm_t *pm, unsigned int pll);
00363
00364
00369 extern void pm_wait_for_pll0_locked(volatile avr32_pm_t *pm);
00370
00371
00376 extern void pm_wait_for_pll1_locked(volatile avr32_pm_t *pm);
00377
00378
00384 extern void pm_switch_to_clock(volatile avr32_pm_t *pm, unsigned long clock);
00385
00386
00393 extern void pm_switch_to_osc0(volatile avr32_pm_t *pm, unsigned int fosc0, unsigned int startup);
00394
00395
00400 extern void pm_bod_enable_irq(volatile avr32_pm_t *pm);
00401
00402
00407 extern void pm_bod_disable_irq(volatile avr32_pm_t *pm);
00408
00409
00414 extern void pm_bod_clear_irq(volatile avr32_pm_t *pm);
00415
00416
00424 extern unsigned long pm_bod_get_irq_status(volatile avr32_pm_t *pm);
00425
00426
00434 extern unsigned long pm_bod_get_irq_enable_bit(volatile avr32_pm_t *pm);
00435
00436
00444 extern unsigned long pm_bod_get_level(volatile avr32_pm_t *pm);
00445
00446
00454 extern unsigned long pm_read_gplp(volatile avr32_pm_t *pm, unsigned long gplp);
00455
00456
00463 extern void pm_write_gplp(volatile avr32_pm_t *pm, unsigned long gplp, unsigned long value);
00464
00465
00477 extern long pm_enable_module(volatile avr32_pm_t *pm, unsigned long module);
00478
00490 extern long pm_disable_module(volatile avr32_pm_t *pm, unsigned long module);
00491
00492
00493
00518 extern int pm_configure_clocks(pm_freq_param_t *param);
00519
00520
00526 extern void pm_configure_usb_clock(void);
00527
00528
00529 #endif // _PM_H_