Umar Naeem / mbed-dev

Fork of mbed-dev by Umar Naeem

Committer:
ranaumarnaeem
Date:
Tue May 23 12:54:50 2017 +0000
Revision:
165:2dd56e6daeec
Parent:
149:156823d33999
jhjg

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mbed_official 107:414e9c822e99 1 /**
mbed_official 107:414e9c822e99 2 * \file
mbed_official 107:414e9c822e99 3 *
mbed_official 107:414e9c822e99 4 * \brief Oscillator management
mbed_official 107:414e9c822e99 5 *
mbed_official 107:414e9c822e99 6 * Copyright (c) 2010-2015 Atmel Corporation. All rights reserved.
mbed_official 107:414e9c822e99 7 *
mbed_official 107:414e9c822e99 8 * \asf_license_start
mbed_official 107:414e9c822e99 9 *
mbed_official 107:414e9c822e99 10 * \page License
mbed_official 107:414e9c822e99 11 *
mbed_official 107:414e9c822e99 12 * Redistribution and use in source and binary forms, with or without
mbed_official 107:414e9c822e99 13 * modification, are permitted provided that the following conditions are met:
mbed_official 107:414e9c822e99 14 *
mbed_official 107:414e9c822e99 15 * 1. Redistributions of source code must retain the above copyright notice,
mbed_official 107:414e9c822e99 16 * this list of conditions and the following disclaimer.
mbed_official 107:414e9c822e99 17 *
mbed_official 107:414e9c822e99 18 * 2. Redistributions in binary form must reproduce the above copyright notice,
mbed_official 107:414e9c822e99 19 * this list of conditions and the following disclaimer in the documentation
mbed_official 107:414e9c822e99 20 * and/or other materials provided with the distribution.
mbed_official 107:414e9c822e99 21 *
mbed_official 107:414e9c822e99 22 * 3. The name of Atmel may not be used to endorse or promote products derived
mbed_official 107:414e9c822e99 23 * from this software without specific prior written permission.
mbed_official 107:414e9c822e99 24 *
mbed_official 107:414e9c822e99 25 * 4. This software may only be redistributed and used in connection with an
mbed_official 107:414e9c822e99 26 * Atmel microcontroller product.
mbed_official 107:414e9c822e99 27 *
mbed_official 107:414e9c822e99 28 * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED
mbed_official 107:414e9c822e99 29 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
mbed_official 107:414e9c822e99 30 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
mbed_official 107:414e9c822e99 31 * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR
mbed_official 107:414e9c822e99 32 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
mbed_official 107:414e9c822e99 33 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
mbed_official 107:414e9c822e99 34 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
mbed_official 107:414e9c822e99 35 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
mbed_official 107:414e9c822e99 36 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
mbed_official 107:414e9c822e99 37 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
mbed_official 107:414e9c822e99 38 * POSSIBILITY OF SUCH DAMAGE.
mbed_official 107:414e9c822e99 39 *
mbed_official 107:414e9c822e99 40 * \asf_license_stop
mbed_official 107:414e9c822e99 41 *
mbed_official 107:414e9c822e99 42 */
mbed_official 107:414e9c822e99 43 /*
mbed_official 107:414e9c822e99 44 * Support and FAQ: visit <a href="http://www.atmel.com/design-support/">Atmel Support</a>
mbed_official 107:414e9c822e99 45 */
mbed_official 107:414e9c822e99 46 #ifndef OSC_H_INCLUDED
mbed_official 107:414e9c822e99 47 #define OSC_H_INCLUDED
mbed_official 107:414e9c822e99 48
mbed_official 107:414e9c822e99 49 #include "parts.h"
mbed_official 107:414e9c822e99 50 #include "conf_clock.h"
mbed_official 107:414e9c822e99 51
mbed_official 107:414e9c822e99 52 #if SAM3S
mbed_official 107:414e9c822e99 53 # include "sam3s/osc.h"
mbed_official 107:414e9c822e99 54 #elif SAM3XA
mbed_official 107:414e9c822e99 55 # include "sam3x/osc.h"
mbed_official 107:414e9c822e99 56 #elif SAM3U
mbed_official 107:414e9c822e99 57 # include "sam3u/osc.h"
mbed_official 107:414e9c822e99 58 #elif SAM3N
mbed_official 107:414e9c822e99 59 # include "sam3n/osc.h"
mbed_official 107:414e9c822e99 60 #elif SAM4S
mbed_official 107:414e9c822e99 61 # include "sam4s/osc.h"
mbed_official 107:414e9c822e99 62 #elif SAM4E
mbed_official 107:414e9c822e99 63 # include "sam4e/osc.h"
mbed_official 107:414e9c822e99 64 #elif SAM4C
mbed_official 107:414e9c822e99 65 # include "sam4c/osc.h"
mbed_official 107:414e9c822e99 66 #elif SAM4CM
mbed_official 107:414e9c822e99 67 # include "sam4cm/osc.h"
mbed_official 107:414e9c822e99 68 #elif SAM4CP
mbed_official 107:414e9c822e99 69 # include "sam4cp/osc.h"
mbed_official 107:414e9c822e99 70 #elif SAM4L
mbed_official 107:414e9c822e99 71 # include "sam4l/osc.h"
mbed_official 107:414e9c822e99 72 #elif SAM4N
mbed_official 107:414e9c822e99 73 # include "sam4n/osc.h"
mbed_official 107:414e9c822e99 74 #elif SAMG
mbed_official 107:414e9c822e99 75 # include "samg/osc.h"
mbed_official 107:414e9c822e99 76 #elif SAMV71
mbed_official 107:414e9c822e99 77 # include "samv71/osc.h"
mbed_official 107:414e9c822e99 78 #elif SAMV70
mbed_official 107:414e9c822e99 79 # include "samv70/osc.h"
mbed_official 107:414e9c822e99 80 #elif SAME70
mbed_official 107:414e9c822e99 81 # include "same70/osc.h"
mbed_official 107:414e9c822e99 82 #elif SAMS70
mbed_official 107:414e9c822e99 83 # include "sams70/osc.h"
mbed_official 107:414e9c822e99 84 #elif (UC3A0 || UC3A1)
mbed_official 107:414e9c822e99 85 # include "uc3a0_a1/osc.h"
mbed_official 107:414e9c822e99 86 #elif UC3A3
mbed_official 107:414e9c822e99 87 # include "uc3a3_a4/osc.h"
mbed_official 107:414e9c822e99 88 #elif UC3B
mbed_official 107:414e9c822e99 89 # include "uc3b0_b1/osc.h"
mbed_official 107:414e9c822e99 90 #elif UC3C
mbed_official 107:414e9c822e99 91 # include "uc3c/osc.h"
mbed_official 107:414e9c822e99 92 #elif UC3D
mbed_official 107:414e9c822e99 93 # include "uc3d/osc.h"
mbed_official 107:414e9c822e99 94 #elif UC3L
mbed_official 107:414e9c822e99 95 # include "uc3l/osc.h"
mbed_official 107:414e9c822e99 96 #elif XMEGA
mbed_official 107:414e9c822e99 97 # include "xmega/osc.h"
mbed_official 107:414e9c822e99 98 #else
mbed_official 107:414e9c822e99 99 # error Unsupported chip type
mbed_official 107:414e9c822e99 100 #endif
mbed_official 107:414e9c822e99 101
mbed_official 107:414e9c822e99 102 /**
mbed_official 107:414e9c822e99 103 * \ingroup clk_group
mbed_official 107:414e9c822e99 104 * \defgroup osc_group Oscillator Management
mbed_official 107:414e9c822e99 105 *
mbed_official 107:414e9c822e99 106 * This group contains functions and definitions related to configuring
mbed_official 107:414e9c822e99 107 * and enabling/disabling on-chip oscillators. Internal RC-oscillators,
mbed_official 107:414e9c822e99 108 * external crystal oscillators and external clock generators are
mbed_official 107:414e9c822e99 109 * supported by this module. What all of these have in common is that
mbed_official 107:414e9c822e99 110 * they swing at a fixed, nominal frequency which is normally not
mbed_official 107:414e9c822e99 111 * adjustable.
mbed_official 107:414e9c822e99 112 *
mbed_official 107:414e9c822e99 113 * \par Example: Enabling an oscillator
mbed_official 107:414e9c822e99 114 *
mbed_official 107:414e9c822e99 115 * The following example demonstrates how to enable the external
mbed_official 107:414e9c822e99 116 * oscillator on XMEGA A and wait for it to be ready to use. The
mbed_official 107:414e9c822e99 117 * oscillator identifiers are platform-specific, so while the same
mbed_official 107:414e9c822e99 118 * procedure is used on all platforms, the parameter to osc_enable()
mbed_official 107:414e9c822e99 119 * will be different from device to device.
mbed_official 107:414e9c822e99 120 * \code
mbed_official 107:414e9c822e99 121 osc_enable(OSC_ID_XOSC);
mbed_official 107:414e9c822e99 122 osc_wait_ready(OSC_ID_XOSC); \endcode
mbed_official 107:414e9c822e99 123 *
mbed_official 107:414e9c822e99 124 * \section osc_group_board Board-specific Definitions
mbed_official 107:414e9c822e99 125 * If external oscillators are used, the board code must provide the
mbed_official 107:414e9c822e99 126 * following definitions for each of those:
mbed_official 107:414e9c822e99 127 * - \b BOARD_<osc name>_HZ: The nominal frequency of the oscillator.
mbed_official 107:414e9c822e99 128 * - \b BOARD_<osc name>_STARTUP_US: The startup time of the
mbed_official 107:414e9c822e99 129 * oscillator in microseconds.
mbed_official 107:414e9c822e99 130 * - \b BOARD_<osc name>_TYPE: The type of oscillator connected, i.e.
mbed_official 107:414e9c822e99 131 * whether it's a crystal or external clock, and sometimes what kind
mbed_official 107:414e9c822e99 132 * of crystal it is. The meaning of this value is platform-specific.
mbed_official 107:414e9c822e99 133 *
mbed_official 107:414e9c822e99 134 * @{
mbed_official 107:414e9c822e99 135 */
mbed_official 107:414e9c822e99 136
mbed_official 107:414e9c822e99 137 //! \name Oscillator Management
mbed_official 107:414e9c822e99 138 //@{
mbed_official 107:414e9c822e99 139 /**
mbed_official 107:414e9c822e99 140 * \fn void osc_enable(uint8_t id)
mbed_official 107:414e9c822e99 141 * \brief Enable oscillator \a id
mbed_official 107:414e9c822e99 142 *
mbed_official 107:414e9c822e99 143 * The startup time and mode value is automatically determined based on
mbed_official 107:414e9c822e99 144 * definitions in the board code.
mbed_official 107:414e9c822e99 145 */
mbed_official 107:414e9c822e99 146 /**
mbed_official 107:414e9c822e99 147 * \fn void osc_disable(uint8_t id)
mbed_official 107:414e9c822e99 148 * \brief Disable oscillator \a id
mbed_official 107:414e9c822e99 149 */
mbed_official 107:414e9c822e99 150 /**
mbed_official 107:414e9c822e99 151 * \fn osc_is_ready(uint8_t id)
mbed_official 107:414e9c822e99 152 * \brief Determine whether oscillator \a id is ready.
mbed_official 107:414e9c822e99 153 * \retval true Oscillator \a id is running and ready to use as a clock
mbed_official 107:414e9c822e99 154 * source.
mbed_official 107:414e9c822e99 155 * \retval false Oscillator \a id is not running.
mbed_official 107:414e9c822e99 156 */
mbed_official 107:414e9c822e99 157 /**
mbed_official 107:414e9c822e99 158 * \fn uint32_t osc_get_rate(uint8_t id)
mbed_official 107:414e9c822e99 159 * \brief Return the frequency of oscillator \a id in Hz
mbed_official 107:414e9c822e99 160 */
mbed_official 107:414e9c822e99 161
mbed_official 107:414e9c822e99 162 #ifndef __ASSEMBLY__
mbed_official 107:414e9c822e99 163
mbed_official 107:414e9c822e99 164 /**
mbed_official 107:414e9c822e99 165 * \brief Wait until the oscillator identified by \a id is ready
mbed_official 107:414e9c822e99 166 *
mbed_official 107:414e9c822e99 167 * This function will busy-wait for the oscillator identified by \a id
mbed_official 107:414e9c822e99 168 * to become stable and ready to use as a clock source.
mbed_official 107:414e9c822e99 169 *
mbed_official 107:414e9c822e99 170 * \param id A number identifying the oscillator to wait for.
mbed_official 107:414e9c822e99 171 */
mbed_official 107:414e9c822e99 172 static inline void osc_wait_ready(uint8_t id)
mbed_official 107:414e9c822e99 173 {
mbed_official 107:414e9c822e99 174 while (!osc_is_ready(id)) {
mbed_official 107:414e9c822e99 175 /* Do nothing */
mbed_official 107:414e9c822e99 176 }
mbed_official 107:414e9c822e99 177 }
mbed_official 107:414e9c822e99 178
mbed_official 107:414e9c822e99 179 #endif /* __ASSEMBLY__ */
mbed_official 107:414e9c822e99 180
mbed_official 107:414e9c822e99 181 //@}
mbed_official 107:414e9c822e99 182
mbed_official 107:414e9c822e99 183 //! @}
mbed_official 107:414e9c822e99 184
mbed_official 107:414e9c822e99 185 #endif /* OSC_H_INCLUDED */