blob: e66dcf388e2a9e34c408269a9cf9da109272d556 [file] [log] [blame]
/****************************************************************************
* arch/arm/src/gd32f4/hardware/gd32f4xx_pmu.h
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership. The
* ASF licenses this file to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance with the
* License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*
****************************************************************************/
#ifndef __ARCH_ARM_SRC_GD32F4_HARDWARE_GD32F4XX_PMU_H
#define __ARCH_ARM_SRC_GD32F4_HARDWARE_GD32F4XX_PMU_H
/****************************************************************************
* Included Files
****************************************************************************/
#include <nuttx/config.h>
#include "chip.h"
/****************************************************************************
* Pre-processor Definitions
****************************************************************************/
/* Register Offsets *********************************************************/
#define GD32_PMU_CTL_OFFSET 0x0000 /* Power control register offset */
#define GD32_PMU_CS_OFFSET 0x0004 /* Power control and status register offset */
/* Register Addresses *******************************************************/
#define GD32_PMU_CTL (GD32_PMU_BASE+GD32_PMU_CTL_OFFSET) /* Power control register */
#define GD32_PMU_CS (GD32_PMU_BASE+GD32_PMU_CS_OFFSET) /* Power control and status register */
/* Register Bitfield Definitions ********************************************/
/* Power control register */
#define PMU_CTL_LDOLP (1 << 0) /* Bit 0: LDO low power mode */
#define PMU_CTL_STBMOD (1 << 1) /* Bit 1: Standby mode */
#define PMU_CTL_WURST (1 << 2) /* Bit 2: wakeup flag reset */
#define PMU_CTL_STBRST (1 << 3) /* Bit 3: Standby flag reset */
#define PMU_CTL_LVDEN (1 << 4) /* Bit 4: Low voltage detector enable */
#define PMU_CTL_LVDT_SHIFT (5) /* Bits 5-7: Low voltage detector threshold */
#define PMU_CTL_LVDT_MASK (7 << PMU_CTL_LVDT_SHIFT)
# define PMU_CTL_LVDT(n) ((n) << PMU_CTL_LVDT_SHIFT)
# define PMU_LVDT_0 PMU_CTL_LVDT(0) /* Voltage threshold is 2.1V */
# define PMU_LVDT_1 PMU_CTL_LVDT(1) /* Voltage threshold is 2.3V */
# define PMU_LVDT_2 PMU_CTL_LVDT(2) /* Voltage threshold is 2.4V */
# define PMU_LVDT_3 PMU_CTL_LVDT(3) /* Voltage threshold is 2.6V */
# define PMU_LVDT_4 PMU_CTL_LVDT(4) /* Voltage threshold is 2.7V */
# define PMU_LVDT_5 PMU_CTL_LVDT(5) /* Voltage threshold is 2.9V */
# define PMU_LVDT_6 PMU_CTL_LVDT(6) /* Voltage threshold is 3.0V */
# define PMU_LVDT_7 PMU_CTL_LVDT(7) /* Voltage threshold is 3.1V */
#define PMU_CTL_BKPWEN (1 << 8) /* Bit 8: Backup domain write enable */
#define PMU_CTL_LDLP (1 << 10) /* Bit 10: Low-driver mode when use low power LDO */
#define PMU_CTL_LDNP (1 << 11) /* Bit 11: Low-driver mode when use normal power LDO */
#define PMU_CTL_LDOVS_SHIFT (14) /* Bit 14-15: LDO output voltage select */
#define PMU_CTL_LDOVS_MASK (3 << PMU_CTL_LDOVS_SHIFT)
# define PMU_CTL_LDOVS(n) ((n) << PMU_CTL_LDOVS_SHIFT)
# define PMU_LDOVS_LOW PMU_CTL_LDOVS(1) /* LDO output voltage low mode */
# define PMU_LDOVS_MID PMU_CTL_LDOVS(2) /* LDO output voltage mid mode */
# define PMU_LDOVS_HIGH PMU_CTL_LDOVS(3) /* LDO output voltage high mode */
#define PMU_CTL_HDEN (1 << 16) /* Bit 16: High-driver mode enable */
#define PMU_CTL_HDS (1 << 17) /* Bit 17: High-driver mode switch */
#define PMU_CTL_LDEN_SHIFT (18) /* Bit 18-19: LDO output voltage select */
#define PMU_CTL_LDEN_MASK (3 << PMU_CTL_LDEN_SHIFT)
# define PMU_CTL_LDEN(n) ((n) << PMU_CTL_LDEN_SHIFT)
# define PMU_LOWDRIVER_DISABLE PMU_CTL_LDEN(0) /* Low-driver mode disable in deep-sleep mode */
# define PMU_LOWDRIVER_ENABLE PMU_CTL_LDEN(3) /* Low-driver mode enable in deep-sleep mode */
/* Power control and status register */
#define PMU_CS_WUF (1 << 0) /* Bit 0: Wakeup Flag */
#define PMU_CS_STBF (1 << 1) /* Bit 1: Standby Flag */
#define PMU_CS_LVDF (1 << 2) /* Bit 2: Low voltage detector status flag */
#define PMU_CS_BLDORF (1 << 3) /* Bit 3: Backup SRAM LDO ready flag */
#define PMU_CS_WUPEN (1 << 8) /* Bit 8: Wakeup pin enable */
#define PMU_CS_BLDOON (1 << 9) /* Bit 9: Backup SRAM LDO on */
#define PMU_CS_LDOVSRF (1 << 14) /* Bit 14: LDO voltage select ready flag */
#define PMU_CS_HDRF (1 << 16) /* Bit 16: High-driver ready flag */
#define PMU_CS_HDSRF (1 << 17) /* Bit 17: High-driver switch ready flag */
#define PMU_CS_LDRF_SHIFT (18) /* Bit 18-19: Low-driver mode ready flag */
#define PMU_CS_LDRF_MASK (3 << PMU_CS_LDRF_SHIFT)
# define PMU_CS_LDRF(n) ((n) << PMU_CS_LDRF_SHIFT)
# define PMU_LDRF_NORMAL PMU_CS_LDRF(0) /* Normal driver in deep-sleep mode */
# define PMU_LDRF_LOWDRIVER PMU_CS_LDRF(3) /* Low-driver mode in deep-sleep mode */
/* PMU low-driver mode when use low power LDO */
#define PMU_NORMALDR_LOWPWR (0) /* Normal driver when use low power LDO */
#define PMU_LOWDR_LOWPWR PMU_CTL_LDLP /* Low-driver mode enabled when LDEN is 11 and use low power LDO */
/* PMU low-driver mode when use normal power LDO */
#define PMU_NORMALDR_NORMALPWR (0) /* Normal driver when use normal power LDO */
#define PMU_LOWDR_NORMALPWR PMU_CTL_LDNP /* Low-driver mode enabled when LDEN is 11 and use normal power LDO */
/* PMU ldo definitions */
#define PMU_LDO_NORMAL (0) /* LDO normal work when PMU enter deep-sleep mode */
#define PMU_LDO_LOWPOWER PMU_CTL_LDOLP /* LDO work at low power status when PMU enter deep-sleep mode */
/* PMU flag reset definitions */
#define PMU_FLAG_RESET_WAKEUP (0x00) /* Wakeup flag reset */
#define PMU_FLAG_RESET_STANDBY (0x01) /* Standby flag reset */
/* PMU high-driver mode switch */
#define PMU_HIGHDR_SWITCH_NONE (0) /* No high-driver mode switch */
#define PMU_HIGHDR_SWITCH_EN PMU_CTL_HDS /* High-driver mode switch */
/* PMU command constants definitions */
#define WFI_CMD (0x00) /* Use WFI command */
#define WFE_CMD (0x01) /* Use WFE command */
/* PMU backup SRAM LDO on or off */
#define PMU_BLDOON_OFF (0) /* Backup SRAM LDO off */
#define PMU_BLDOON_ON PMU_CS_BLDOON /* The backup SRAM LDO on */
#endif /* __ARCH_ARM_SRC_GD32F4_HARDWARE_GD32F4XX_PMU_H */