PeripheralDriver_Flagchip_F.../Src/fc7xxx_driver_smc.c

123 lines
3.2 KiB
C

/**
* @file fc7xxx_driver_smc.c
* @author Flagchip0105
* @brief FC7xxx SMC driver type definition and API
* @version 0.1.0
* @date 2024-01-08
*
* @copyright Copyright (c) 2023 Flagchip Semiconductors Co., Ltd.
*
* @details
*/
/********************************************************************************
* Revision History:
*
* Version Date Initials CR# Descriptions
* --------- ---------- ------------ ---------- ---------------
* 0.1.0 2024-01-08 Flagchip0105 N/A FC7240 First version
********************************************************************************/
#include "fc7xxx_driver_smc.h"
/**
* @brief Set system mode
*
* @param eMode MCU low power mode
* @return Smc return type
*/
SMC_StatusType SMC_SetSystemMode(const SMC_ModeType eMode)
{
SMC_StatusType eRet = SMC_STATUS_SUCCESS;
DEV_ASSERT(eMode <= SMC_MODE_STANBY_3);
switch (eMode)
{
case SMC_MODE_RUN:
/* Clear the SLEEPDEEP bit to disable deep sleep mode */
CM7_HWA_DisableDeepSleep();
break;
case SMC_MODE_STOP:
/* switch smc mode to stop mode */
SMC_HWA_SetStopModeCtrl(SMC_STOP_MODE);
/* Set the SLEEPDEEP bit to enable deep sleep mode (STOP)*/
CM7_HWA_EnableDeepSleep();
/* Cpu is going into deep sleep state */
STANDBY();
break;
case SMC_MODE_WAIT:
/* Clear the SLEEPDEEP bit to disable deep sleep mode */
CM7_HWA_DisableDeepSleep();
/* Cpu is going into sleep state */
STANDBY();
break;
case SMC_MODE_STANBY_0:
/* select standby mode*/
SMC_HWA_SetStandbyMode(SMC_CFG_STANDBY_0);
/* switch smc mode to standby mode */
SMC_HWA_SetStopModeCtrl(SMC_STANDBY_MODE);
/* Set the SLEEPDEEP bit to enable deep sleep mode */
CM7_HWA_EnableDeepSleep();
/* Cpu is going into deep sleep state */
STANDBY();
break;
case SMC_MODE_STANBY_1:
/* select standby mode*/
SMC_HWA_SetStandbyMode(SMC_CFG_STANDBY_1);
/* switch smc mode to standby mode */
SMC_HWA_SetStopModeCtrl(SMC_STANDBY_MODE);
/* Set the SLEEPDEEP bit to enable deep sleep mode */
CM7_HWA_EnableDeepSleep();
/* Cpu is going into deep sleep state */
STANDBY();
break;
case SMC_MODE_STANBY_2:
/* select standby mode*/
SMC_HWA_SetStandbyMode(SMC_CFG_STANDBY_2);
/* switch smc mode to standby mode */
SMC_HWA_SetStopModeCtrl(SMC_STANDBY_MODE);
/* Set the SLEEPDEEP bit to enable deep sleep mode */
CM7_HWA_EnableDeepSleep();
/* Cpu is going into deep sleep state */
STANDBY();
break;
case SMC_MODE_STANBY_3:
/* select standby mode*/
SMC_HWA_SetStandbyMode(SMC_CFG_STANDBY_3);
/* switch smc mode to standby mode */
SMC_HWA_SetStopModeCtrl(SMC_STANDBY_MODE);
/* Set the SLEEPDEEP bit to enable deep sleep mode */
CM7_HWA_EnableDeepSleep();
/* Cpu is going into deep sleep state */
STANDBY();
break;
default:
/* do nothing */
break;
}
return eRet;
}