155 lines
4.6 KiB
C
155 lines
4.6 KiB
C
|
/*
|
||
|
* Copyright (c) 2012, Freescale Semiconductor, Inc.
|
||
|
* All rights reserved.
|
||
|
*
|
||
|
* Redistribution and use in source and binary forms, with or without modification,
|
||
|
* are permitted provided that the following conditions are met:
|
||
|
*
|
||
|
* o Redistributions of source code must retain the above copyright notice, this list
|
||
|
* of conditions and the following disclaimer.
|
||
|
*
|
||
|
* o Redistributions in binary form must reproduce the above copyright notice, this
|
||
|
* list of conditions and the following disclaimer in the documentation and/or
|
||
|
* other materials provided with the distribution.
|
||
|
*
|
||
|
* o Neither the name of Freescale Semiconductor, Inc. nor the names of its
|
||
|
* contributors may be used to endorse or promote products derived from this
|
||
|
* software without specific prior written permission.
|
||
|
*
|
||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||
|
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||
|
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||
|
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||
|
*/
|
||
|
|
||
|
#ifndef _CCM_PLL_H_
|
||
|
#define _CCM_PLL_H_
|
||
|
|
||
|
#include "sdk_types.h"
|
||
|
|
||
|
//! @addtogroup diag_clocks
|
||
|
//! @{
|
||
|
|
||
|
////////////////////////////////////////////////////////////////////////////////
|
||
|
// Definitions
|
||
|
////////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
#define CLK_SRC_32K 32768
|
||
|
|
||
|
//! @brief Create a clock gate bit mask value.
|
||
|
//! @param x 0..15, for CG0 to CG15
|
||
|
#define CG(x) (3 << (x*2))
|
||
|
|
||
|
//! @brief Constants for CCM CCGR register fields.
|
||
|
enum _clock_gate_constants
|
||
|
{
|
||
|
CLOCK_ON = 0x3, //!< Clock always on in both run and stop modes.
|
||
|
CLOCK_ON_RUN = 0x1, //!< Clock on only in run mode.
|
||
|
CLOCK_OFF = 0x0 //!< Clocked gated off.
|
||
|
};
|
||
|
|
||
|
//! @brief Low power mdoes.
|
||
|
typedef enum _lp_modes {
|
||
|
RUN_MODE,
|
||
|
WAIT_MODE,
|
||
|
STOP_MODE,
|
||
|
} lp_modes_t;
|
||
|
|
||
|
//! @brief Main clock sources.
|
||
|
typedef enum _main_clocks {
|
||
|
CPU_CLK,
|
||
|
AXI_CLK,
|
||
|
MMDC_CH0_AXI_CLK,
|
||
|
AHB_CLK,
|
||
|
IPG_CLK,
|
||
|
IPG_PER_CLK,
|
||
|
MMDC_CH1_AXI_CLK,
|
||
|
} main_clocks_t;
|
||
|
|
||
|
//! @brief Peripheral clocks.
|
||
|
typedef enum _peri_clocks {
|
||
|
UART1_MODULE_CLK,
|
||
|
UART2_MODULE_CLK,
|
||
|
UART3_MODULE_CLK,
|
||
|
UART4_MODULE_CLK,
|
||
|
UART5_MODULE_CLK,
|
||
|
UART6_MODULE_CLK,
|
||
|
UART7_MODULE_CLK,
|
||
|
UART8_MODULE_CLK,
|
||
|
SSI1_BAUD,
|
||
|
SSI2_BAUD,
|
||
|
CSI_BAUD,
|
||
|
MSTICK1_CLK,
|
||
|
MSTICK2_CLK,
|
||
|
RAWNAND_CLK,
|
||
|
USB_CLK,
|
||
|
VPU_CLK,
|
||
|
SPI_CLK,
|
||
|
CAN_CLK
|
||
|
} peri_clocks_t;
|
||
|
|
||
|
//! @brief Available PLLs.
|
||
|
typedef enum plls {
|
||
|
PLL1,
|
||
|
PLL2,
|
||
|
PLL3,
|
||
|
PLL4,
|
||
|
PLL5,
|
||
|
} plls_t;
|
||
|
|
||
|
extern const uint32_t PLL1_OUTPUT;
|
||
|
extern const uint32_t PLL2_OUTPUT[];
|
||
|
extern const uint32_t PLL3_OUTPUT[];
|
||
|
extern const uint32_t PLL4_OUTPUT;
|
||
|
extern const uint32_t PLL5_OUTPUT;
|
||
|
|
||
|
////////////////////////////////////////////////////////////////////////////////
|
||
|
// API
|
||
|
////////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
#if defined(__cplusplus)
|
||
|
extern "C" {
|
||
|
#endif
|
||
|
|
||
|
//! @brief Set/unset clock gating for a peripheral.
|
||
|
//! @param base_address configure clock gating for that module from the base address.
|
||
|
//! @param gating_mode clock gating mode: CLOCK_ON or CLOCK_OFF.
|
||
|
void clock_gating_config(uint32_t base_address, uint32_t gating_mode);
|
||
|
|
||
|
//! @brief Returns the frequency of a clock in megahertz.
|
||
|
uint32_t get_main_clock(main_clocks_t clk);
|
||
|
|
||
|
//! @brief Returns the frequency of a clock in megahertz.
|
||
|
uint32_t get_peri_clock(peri_clocks_t clk);
|
||
|
|
||
|
//! @brief Inits clock sources.
|
||
|
void ccm_init(void);
|
||
|
|
||
|
//! @brief Prepare and enter in a low power mode.
|
||
|
//! @param lp_mode low power mode : WAIT_MODE or STOP_MODE.
|
||
|
void ccm_enter_low_power(lp_modes_t lp_mode);
|
||
|
|
||
|
//! @brief Mask/unmask an interrupt source that can wake up the processor when in a
|
||
|
//! low power mode.
|
||
|
//!
|
||
|
//! @param irq_id ID of the interrupt to mask/unmask.
|
||
|
//! @param doEnable Pass true to unmask the source ID.
|
||
|
void ccm_set_lpm_wakeup_source(uint32_t irq_id, bool doEnable);
|
||
|
|
||
|
#if defined(__cplusplus)
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
//! @}
|
||
|
|
||
|
#endif
|
||
|
////////////////////////////////////////////////////////////////////////////////
|
||
|
// EOF
|
||
|
////////////////////////////////////////////////////////////////////////////////
|