123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351 |
- //*****************************************************************************
- //
- // am_hal_pwrctrl.h
- //! @file
- //!
- //! @brief Functions for enabling and disabling power domains.
- //!
- //! @addtogroup pwrctrl2 Power Control
- //! @ingroup apollo2hal
- //! @{
- //*****************************************************************************
- //*****************************************************************************
- //
- // Copyright (c) 2017, Ambiq Micro
- // All rights reserved.
- //
- // Redistribution and use in source and binary forms, with or without
- // modification, are permitted provided that the following conditions are met:
- //
- // 1. Redistributions of source code must retain the above copyright notice,
- // this list of conditions and the following disclaimer.
- //
- // 2. 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.
- //
- // 3. Neither the name of the copyright holder 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.
- //
- // This is part of revision 1.2.11 of the AmbiqSuite Development Package.
- //
- //*****************************************************************************
- #ifndef AM_HAL_PWRCTRL_H
- #define AM_HAL_PWRCTRL_H
- //*****************************************************************************
- //
- // Peripheral enable bits for am_hal_pwrctrl_periph_enable/disable()
- //
- //*****************************************************************************
- #define AM_HAL_PWRCTRL_ADC AM_REG_PWRCTRL_DEVICEEN_ADC_EN
- #define AM_HAL_PWRCTRL_IOM0 AM_REG_PWRCTRL_DEVICEEN_IO_MASTER0_EN
- #define AM_HAL_PWRCTRL_IOM1 AM_REG_PWRCTRL_DEVICEEN_IO_MASTER1_EN
- #define AM_HAL_PWRCTRL_IOM2 AM_REG_PWRCTRL_DEVICEEN_IO_MASTER2_EN
- #define AM_HAL_PWRCTRL_IOM3 AM_REG_PWRCTRL_DEVICEEN_IO_MASTER3_EN
- #define AM_HAL_PWRCTRL_IOM4 AM_REG_PWRCTRL_DEVICEEN_IO_MASTER4_EN
- #define AM_HAL_PWRCTRL_IOM5 AM_REG_PWRCTRL_DEVICEEN_IO_MASTER5_EN
- #define AM_HAL_PWRCTRL_IOS AM_REG_PWRCTRL_DEVICEEN_IO_SLAVE_EN
- #define AM_HAL_PWRCTRL_PDM AM_REG_PWRCTRL_DEVICEEN_PDM_EN
- #define AM_HAL_PWRCTRL_UART0 AM_REG_PWRCTRL_DEVICEEN_UART0_EN
- #define AM_HAL_PWRCTRL_UART1 AM_REG_PWRCTRL_DEVICEEN_UART1_EN
- //*****************************************************************************
- //
- // Macro to set the appropriate IOM peripheral when using
- // am_hal_pwrctrl_periph_enable()/disable().
- // For Apollo2, the module argument must resolve to be a value from 0-5.
- //
- //*****************************************************************************
- #define AM_HAL_PWRCTRL_IOM(module) \
- (AM_REG_PWRCTRL_DEVICEEN_IO_MASTER0_EN << module)
- //*****************************************************************************
- //
- // Macro to set the appropriate UART peripheral when using
- // am_hal_pwrctrl_periph_enable()/disable().
- // For Apollo2, the module argument must resolve to be a value from 0-1.
- //
- //*****************************************************************************
- #define AM_HAL_PWRCTRL_UART(module) \
- (AM_REG_PWRCTRL_DEVICEEN_UART0_EN << module)
- //*****************************************************************************
- //
- // Memory enable values for am_hal_pwrctrl_memory_enable()
- //
- //*****************************************************************************
- #define AM_HAL_PWRCTRL_MEMEN_SRAM8K AM_REG_PWRCTRL_MEMEN_SRAMEN_SRAM8K
- #define AM_HAL_PWRCTRL_MEMEN_SRAM16K AM_REG_PWRCTRL_MEMEN_SRAMEN_SRAM16K
- #define AM_HAL_PWRCTRL_MEMEN_SRAM24K (AM_REG_PWRCTRL_MEMEN_SRAMEN_SRAM16K | \
- AM_REG_PWRCTRL_MEMEN_SRAMEN_GROUP0_SRAM2)
- #define AM_HAL_PWRCTRL_MEMEN_SRAM32K AM_REG_PWRCTRL_MEMEN_SRAMEN_SRAM32K
- #define AM_HAL_PWRCTRL_MEMEN_SRAM64K AM_REG_PWRCTRL_MEMEN_SRAMEN_SRAM64K
- #define AM_HAL_PWRCTRL_MEMEN_SRAM96K \
- (AM_REG_PWRCTRL_MEMEN_SRAMEN_SRAM64K | \
- AM_REG_PWRCTRL_MEMEN_SRAMEN_GROUP2)
- #define AM_HAL_PWRCTRL_MEMEN_SRAM128K AM_REG_PWRCTRL_MEMEN_SRAMEN_SRAM128K
- #define AM_HAL_PWRCTRL_MEMEN_SRAM160K \
- (AM_REG_PWRCTRL_MEMEN_SRAMEN_SRAM128K | \
- AM_REG_PWRCTRL_MEMEN_SRAMEN_GROUP4)
- #define AM_HAL_PWRCTRL_MEMEN_SRAM192K \
- (AM_REG_PWRCTRL_MEMEN_SRAMEN_SRAM128K | \
- AM_REG_PWRCTRL_MEMEN_SRAMEN_GROUP4 | \
- AM_REG_PWRCTRL_MEMEN_SRAMEN_GROUP5)
- #define AM_HAL_PWRCTRL_MEMEN_SRAM224K \
- (AM_REG_PWRCTRL_MEMEN_SRAMEN_SRAM128K | \
- AM_REG_PWRCTRL_MEMEN_SRAMEN_GROUP4 | \
- AM_REG_PWRCTRL_MEMEN_SRAMEN_GROUP5 | \
- AM_REG_PWRCTRL_MEMEN_SRAMEN_GROUP6)
- #define AM_HAL_PWRCTRL_MEMEN_SRAM256K AM_REG_PWRCTRL_MEMEN_SRAMEN_SRAM256K
- #define AM_HAL_PWRCTRL_MEMEN_FLASH512K AM_REG_PWRCTRL_MEMEN_FLASH0_EN
- #define AM_HAL_PWRCTRL_MEMEN_FLASH1M \
- (AM_REG_PWRCTRL_MEMEN_FLASH0_EN | \
- AM_REG_PWRCTRL_MEMEN_FLASH1_EN)
- #define AM_HAL_PWRCTRL_MEMEN_CACHE \
- (AM_REG_PWRCTRL_MEMEN_CACHEB0_EN | \
- AM_REG_PWRCTRL_MEMEN_CACHEB2_EN)
- #define AM_HAL_PWRCTRL_MEMEN_CACHE_DIS \
- ~(AM_REG_PWRCTRL_MEMEN_CACHEB0_EN | \
- AM_REG_PWRCTRL_MEMEN_CACHEB2_EN)
- //
- // Power up all available memory devices (this is the default power up state)
- //
- #define AM_HAL_PWRCTRL_MEMEN_ALL \
- (AM_REG_PWRCTRL_MEMEN_SRAMEN_ALL | \
- AM_REG_PWRCTRL_MEMEN_FLASH0_EN | \
- AM_REG_PWRCTRL_MEMEN_FLASH1_EN | \
- AM_REG_PWRCTRL_MEMEN_CACHEB0_EN | \
- AM_REG_PWRCTRL_MEMEN_CACHEB2_EN)
- //*****************************************************************************
- //
- // Peripheral power enable and disable delays
- // The delay counts are based on an internal clock that runs at half of
- // HFRC. Therefore, we need to double the delay cycles.
- //
- //*****************************************************************************
- #define AM_HAL_PWRCTRL_DEVICEEN_DELAYCYCLES (22 * 2)
- #define AM_HAL_PWRCTRL_DEVICEDIS_DELAYCYCLES (22 * 2)
- //
- // Use the following only when enabling after sleep (not during initialization).
- //
- #define AM_HAL_PWRCTRL_BUCKEN_DELAYCYCLES (0 * 2)
- #define AM_HAL_PWRCTRL_BUCKDIS_DELAYCYCLES (15 * 2)
- //*****************************************************************************
- //
- // Peripheral PWRONSTATUS groupings.
- //
- //*****************************************************************************
- //
- // Group DEVICEEN bits (per PWRONSTATUS groupings).
- //
- #define AM_HAL_PWRCTRL_DEVICEEN_IOM_0_2 \
- (AM_REG_PWRCTRL_DEVICEEN_IO_MASTER0_EN | \
- AM_REG_PWRCTRL_DEVICEEN_IO_MASTER1_EN | \
- AM_REG_PWRCTRL_DEVICEEN_IO_MASTER2_EN )
- #define AM_HAL_PWRCTRL_DEVICEEN_IOM_3_5 \
- (AM_REG_PWRCTRL_DEVICEEN_IO_MASTER3_EN | \
- AM_REG_PWRCTRL_DEVICEEN_IO_MASTER4_EN | \
- AM_REG_PWRCTRL_DEVICEEN_IO_MASTER5_EN )
- #define AM_HAL_PWRCTRL_DEVICEEN_IOS_UARTS \
- (AM_REG_PWRCTRL_DEVICEEN_UART0_EN | \
- AM_REG_PWRCTRL_DEVICEEN_UART1_EN | \
- AM_REG_PWRCTRL_DEVICEEN_IO_SLAVE_EN )
- #define AM_HAL_PWRCTRL_DEVICEEN_ADC AM_REG_PWRCTRL_DEVICEEN_ADC_EN
- #define AM_HAL_PWRCTRL_DEVICEEN_PDM AM_REG_PWRCTRL_DEVICEEN_PDM_EN
- //
- // Map PWRONSTATUS bits to peripheral groupings.
- //
- #define AM_HAL_PWRCTRL_PWRONSTATUS_IOS_UARTS AM_REG_PWRCTRL_PWRONSTATUS_PDA_M
- #define AM_HAL_PWRCTRL_PWRONSTATUS_IOM_3_5 AM_REG_PWRCTRL_PWRONSTATUS_PDC_M
- #define AM_HAL_PWRCTRL_PWRONSTATUS_IOM_0_2 AM_REG_PWRCTRL_PWRONSTATUS_PDB_M
- #define AM_HAL_PWRCTRL_PWRONSTATUS_ADC AM_REG_PWRCTRL_PWRONSTATUS_PDADC_M
- #define AM_HAL_PWRCTRL_PWRONSTATUS_PDM AM_REG_PWRCTRL_PWRONSTATUS_PD_PDM_M
- #define POLL_PWRSTATUS(ui32Peripheral) \
- if ( 1 ) \
- { \
- uint32_t ui32PwrOnStat; \
- if ( ui32Peripheral & AM_HAL_PWRCTRL_DEVICEEN_IOM_0_2 ) \
- { \
- ui32PwrOnStat = AM_HAL_PWRCTRL_PWRONSTATUS_IOM_0_2; \
- } \
- else if ( ui32Peripheral & AM_HAL_PWRCTRL_DEVICEEN_IOM_3_5 ) \
- { \
- ui32PwrOnStat = AM_HAL_PWRCTRL_PWRONSTATUS_IOM_3_5; \
- } \
- else if ( ui32Peripheral & AM_HAL_PWRCTRL_DEVICEEN_IOS_UARTS ) \
- { \
- ui32PwrOnStat = AM_HAL_PWRCTRL_PWRONSTATUS_IOS_UARTS; \
- } \
- else if ( ui32Peripheral & AM_HAL_PWRCTRL_DEVICEEN_ADC ) \
- { \
- ui32PwrOnStat = AM_HAL_PWRCTRL_PWRONSTATUS_ADC; \
- } \
- else if ( ui32Peripheral & AM_HAL_PWRCTRL_DEVICEEN_PDM ) \
- { \
- ui32PwrOnStat = AM_HAL_PWRCTRL_PWRONSTATUS_PDM; \
- } \
- else \
- { \
- ui32PwrOnStat = 0xFFFFFFFF; \
- } \
- \
- /* */ \
- /* Wait for the power control setting to take effect. */ \
- /* */ \
- while ( !(AM_REG(PWRCTRL, PWRONSTATUS) & ui32PwrOnStat) ); \
- }
- //*****************************************************************************
- //
- // Memory PWRONSTATUS enable values for am_hal_pwrctrl_memory_enable()
- //
- //*****************************************************************************
- #define AM_HAL_PWRCTRL_PWRONSTATUS_SRAM_8K \
- AM_REG_PWRCTRL_PWRONSTATUS_PD_GRP0_SRAM0_M
- #define AM_HAL_PWRCTRL_PWRONSTATUS_SRAM_16K \
- (AM_REG_PWRCTRL_PWRONSTATUS_PD_GRP0_SRAM1_M | \
- AM_REG_PWRCTRL_PWRONSTATUS_PD_GRP0_SRAM0_M)
- #define AM_HAL_PWRCTRL_PWRONSTATUS_SRAM_24K \
- (AM_REG_PWRCTRL_PWRONSTATUS_PD_GRP0_SRAM2_M | \
- AM_REG_PWRCTRL_PWRONSTATUS_PD_GRP0_SRAM1_M | \
- AM_REG_PWRCTRL_PWRONSTATUS_PD_GRP0_SRAM0_M)
- #define AM_HAL_PWRCTRL_PWRONSTATUS_SRAM_32K \
- (AM_REG_PWRCTRL_PWRONSTATUS_PD_GRP0_SRAM3_M | \
- AM_REG_PWRCTRL_PWRONSTATUS_PD_GRP0_SRAM2_M | \
- AM_REG_PWRCTRL_PWRONSTATUS_PD_GRP0_SRAM1_M | \
- AM_REG_PWRCTRL_PWRONSTATUS_PD_GRP0_SRAM0_M)
- #define AM_HAL_PWRCTRL_PWRONSTATUS_SRAM_64K \
- (AM_REG_PWRCTRL_PWRONSTATUS_PD_GRP1_SRAM_M | \
- AM_REG_PWRCTRL_PWRONSTATUS_PD_GRP0_SRAM3_M | \
- AM_REG_PWRCTRL_PWRONSTATUS_PD_GRP0_SRAM2_M | \
- AM_REG_PWRCTRL_PWRONSTATUS_PD_GRP0_SRAM1_M | \
- AM_REG_PWRCTRL_PWRONSTATUS_PD_GRP0_SRAM0_M)
- #define AM_HAL_PWRCTRL_PWRONSTATUS_SRAM_96K \
- (AM_REG_PWRCTRL_PWRONSTATUS_PD_GRP2_SRAM_M | \
- AM_REG_PWRCTRL_PWRONSTATUS_PD_GRP1_SRAM_M | \
- AM_REG_PWRCTRL_PWRONSTATUS_PD_GRP0_SRAM3_M | \
- AM_REG_PWRCTRL_PWRONSTATUS_PD_GRP0_SRAM2_M | \
- AM_REG_PWRCTRL_PWRONSTATUS_PD_GRP0_SRAM1_M | \
- AM_REG_PWRCTRL_PWRONSTATUS_PD_GRP0_SRAM0_M)
- #define AM_HAL_PWRCTRL_PWRONSTATUS_SRAM_128K \
- (AM_REG_PWRCTRL_PWRONSTATUS_PD_GRP3_SRAM_M | \
- AM_REG_PWRCTRL_PWRONSTATUS_PD_GRP2_SRAM_M | \
- AM_REG_PWRCTRL_PWRONSTATUS_PD_GRP1_SRAM_M | \
- AM_REG_PWRCTRL_PWRONSTATUS_PD_GRP0_SRAM3_M | \
- AM_REG_PWRCTRL_PWRONSTATUS_PD_GRP0_SRAM2_M | \
- AM_REG_PWRCTRL_PWRONSTATUS_PD_GRP0_SRAM1_M | \
- AM_REG_PWRCTRL_PWRONSTATUS_PD_GRP0_SRAM0_M)
- #define AM_HAL_PWRCTRL_PWRONSTATUS_SRAM_160K \
- (AM_REG_PWRCTRL_PWRONSTATUS_PD_GRP4_SRAM_M | \
- AM_REG_PWRCTRL_PWRONSTATUS_PD_GRP3_SRAM_M | \
- AM_REG_PWRCTRL_PWRONSTATUS_PD_GRP2_SRAM_M | \
- AM_REG_PWRCTRL_PWRONSTATUS_PD_GRP1_SRAM_M | \
- AM_REG_PWRCTRL_PWRONSTATUS_PD_GRP0_SRAM3_M | \
- AM_REG_PWRCTRL_PWRONSTATUS_PD_GRP0_SRAM2_M | \
- AM_REG_PWRCTRL_PWRONSTATUS_PD_GRP0_SRAM1_M | \
- AM_REG_PWRCTRL_PWRONSTATUS_PD_GRP0_SRAM0_M)
- #define AM_HAL_PWRCTRL_PWRONSTATUS_SRAM_192K \
- (AM_REG_PWRCTRL_PWRONSTATUS_PD_GRP5_SRAM_M | \
- AM_REG_PWRCTRL_PWRONSTATUS_PD_GRP4_SRAM_M | \
- AM_REG_PWRCTRL_PWRONSTATUS_PD_GRP3_SRAM_M | \
- AM_REG_PWRCTRL_PWRONSTATUS_PD_GRP2_SRAM_M | \
- AM_REG_PWRCTRL_PWRONSTATUS_PD_GRP1_SRAM_M | \
- AM_REG_PWRCTRL_PWRONSTATUS_PD_GRP0_SRAM3_M | \
- AM_REG_PWRCTRL_PWRONSTATUS_PD_GRP0_SRAM2_M | \
- AM_REG_PWRCTRL_PWRONSTATUS_PD_GRP0_SRAM1_M | \
- AM_REG_PWRCTRL_PWRONSTATUS_PD_GRP0_SRAM0_M)
- #define AM_HAL_PWRCTRL_PWRONSTATUS_SRAM_224K \
- (AM_REG_PWRCTRL_PWRONSTATUS_PD_GRP6_SRAM_M | \
- AM_REG_PWRCTRL_PWRONSTATUS_PD_GRP5_SRAM_M | \
- AM_REG_PWRCTRL_PWRONSTATUS_PD_GRP4_SRAM_M | \
- AM_REG_PWRCTRL_PWRONSTATUS_PD_GRP3_SRAM_M | \
- AM_REG_PWRCTRL_PWRONSTATUS_PD_GRP2_SRAM_M | \
- AM_REG_PWRCTRL_PWRONSTATUS_PD_GRP1_SRAM_M | \
- AM_REG_PWRCTRL_PWRONSTATUS_PD_GRP0_SRAM3_M | \
- AM_REG_PWRCTRL_PWRONSTATUS_PD_GRP0_SRAM2_M | \
- AM_REG_PWRCTRL_PWRONSTATUS_PD_GRP0_SRAM1_M | \
- AM_REG_PWRCTRL_PWRONSTATUS_PD_GRP0_SRAM0_M)
- #define AM_HAL_PWRCTRL_PWRONSTATUS_SRAM_256K \
- (AM_REG_PWRCTRL_PWRONSTATUS_PD_GRP7_SRAM_M | \
- AM_REG_PWRCTRL_PWRONSTATUS_PD_GRP6_SRAM_M | \
- AM_REG_PWRCTRL_PWRONSTATUS_PD_GRP5_SRAM_M | \
- AM_REG_PWRCTRL_PWRONSTATUS_PD_GRP4_SRAM_M | \
- AM_REG_PWRCTRL_PWRONSTATUS_PD_GRP3_SRAM_M | \
- AM_REG_PWRCTRL_PWRONSTATUS_PD_GRP2_SRAM_M | \
- AM_REG_PWRCTRL_PWRONSTATUS_PD_GRP1_SRAM_M | \
- AM_REG_PWRCTRL_PWRONSTATUS_PD_GRP0_SRAM3_M | \
- AM_REG_PWRCTRL_PWRONSTATUS_PD_GRP0_SRAM2_M | \
- AM_REG_PWRCTRL_PWRONSTATUS_PD_GRP0_SRAM1_M | \
- AM_REG_PWRCTRL_PWRONSTATUS_PD_GRP0_SRAM0_M)
- #define AM_HAL_PWRCTRL_PWRONSTATUS_SRAM_ALL \
- AM_HAL_PWRCTRL_PWRONSTATUS_SRAM_256K
- #ifdef __cplusplus
- extern "C"
- {
- #endif
- //*****************************************************************************
- //
- // Function prototypes
- //
- //*****************************************************************************
- extern void am_hal_pwrctrl_periph_enable(uint32_t ui32Peripheral);
- extern void am_hal_pwrctrl_periph_disable(uint32_t ui32Peripheral);
- extern bool am_hal_pwrctrl_memory_enable(uint32_t ui32MemEn);
- extern void am_hal_pwrctrl_bucks_init(void);
- extern void am_hal_pwrctrl_bucks_enable(void);
- extern void am_hal_pwrctrl_bucks_disable(void);
- extern void am_hal_pwrctrl_low_power_init(void);
- #ifdef __cplusplus
- }
- #endif
- #endif // AM_HAL_PWRCTRL_H
- //*****************************************************************************
- //
- // End Doxygen group.
- //! @}
- //
- //*****************************************************************************
|