123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154 |
- /*
- * 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
- ////////////////////////////////////////////////////////////////////////////////
|