Nut/OS  4.10.3
API Reference
pm.h
Go to the documentation of this file.
00001 
00037 /* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */
00038 
00039 /*This file has been prepared for Doxygen automatic documentation generation.*/
00054 /* Copyright (c) 2009 Atmel Corporation. All rights reserved.
00055  *
00056  * Redistribution and use in source and binary forms, with or without
00057  * modification, are permitted provided that the following conditions are met:
00058  *
00059  * 1. Redistributions of source code must retain the above copyright notice, this
00060  * list of conditions and the following disclaimer.
00061  *
00062  * 2. Redistributions in binary form must reproduce the above copyright notice,
00063  * this list of conditions and the following disclaimer in the documentation
00064  * and/or other materials provided with the distribution.
00065  *
00066  * 3. The name of Atmel may not be used to endorse or promote products derived
00067  * from this software without specific prior written permission.
00068  *
00069  * 4. This software may only be redistributed and used in connection with an Atmel
00070  * AVR product.
00071  *
00072  * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED
00073  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
00074  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
00075  * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR
00076  * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
00077  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
00078  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
00079  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
00080  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
00081  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE
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_