/**
******************************************************************************
* @file stm8l15x_wfe.c
* @author MCD Application Team
* @version V1.6.1
* @date 30-September-2014
* @brief This file provides firmware functions to manage the following
* functionalities of the Wait for Event (WFE) peripheral:
* - WFE Source configuration and management
*
* @verbatim
*
* ===================================================================
* WFE specific features
* ===================================================================
*
* Wait for event mode (WFE) stops the CPU but allows the other peripherals
* and interrupt controller to continue running.
* This mode is entered from Run mode by executing a WFE instruction.
* Peripheral events can be generated by the timers, serial interfaces,
* DMA controller, comparators and I/O ports.
* These are enabled by using the WFE_WakeUpSourceEventCmd() function.
*
* When a peripheral event is enabled, the corresponding interrupts are
* not served and you have to clear the corresponding flag status.
*
* There are two ways to wake up the CPU from WFE mode:
* - Interrupts: When an interrupt occurs, the CPU wakes up from WFE mode
* serves the interrupt then goes back to WFE mode.
* - Wake up event: when a wake up event occurs, the CPU wakes up and
* resumes processing, in this case and to save time and power consumption
* there is no context save/restore activity.
*
*
* @endverbatim
*
******************************************************************************
* @attention
*
*
© COPYRIGHT 2014 STMicroelectronics
*
* Licensed under MCD-ST Liberty SW License Agreement V2, (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.st.com/software_license_agreement_liberty_v2
*
* 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.
*
******************************************************************************
*/
/* Includes ------------------------------------------------------------------*/
#include "stm8l15x_wfe.h"
/** @addtogroup STM8L15x_StdPeriph_Driver
* @{
*/
/** @defgroup WFE
* @brief WFE driver modules
* @{
*/
/* Private typedef -----------------------------------------------------------*/
/* Private define ------------------------------------------------------------*/
/* Private macro -------------------------------------------------------------*/
/* Private function prototypes -----------------------------------------------*/
/* Private functions ---------------------------------------------------------*/
/** @defgroup WFE_Private_Functions
* @{
*/
/** @defgroup WFE_Group1 WFE Source configuration and management functions
* @brief WFE Source configuration and management functions
*
@verbatim
===============================================================================
WFE Source configuration and management functions
===============================================================================
@endverbatim
* @{
*/
/**
* @brief Deinitializes the WFE registers to their default reset value.
* @param None
* @retval None
*/
void WFE_DeInit(void)
{
WFE->CR1 = WFE_CRX_RESET_VALUE;
WFE->CR2 = WFE_CRX_RESET_VALUE;
WFE->CR3 = WFE_CRX_RESET_VALUE;
WFE->CR4 = WFE_CRX_RESET_VALUE;
}
/**
* @brief Set the source that can generate the wake-up event.
* @param WFE_Source: The wake-up event source .
* This parameter can be one of the following values:
* @arg WFE_Source_TIM2_EV0: TIM2 Update/Trigger and Break interrupt
* @arg WFE_Source_TIM2_EV1: TIM2 Capture/Compare interrupt
* @arg WFE_Source_TIM1_EV0: TIM1 Update/Trigger and Break interrupt
* @arg WFE_Source_TIM1_EV1: TIM1 Capture/Compare interrupt
* @arg WFE_Source_EXTI_EV0: I/O port interrupt from Pins 0
* @arg WFE_Source_EXTI_EV1: I/O port interrupt from Pins 1
* @arg WFE_Source_EXTI_EV2: I/O port interrupt from Pins 2
* @arg WFE_Source_EXTI_EV3: I/O port interrupt from Pins 3
* @arg WFE_Source_EXTI_EV4: I/O port interrupt from Pins 4
* @arg WFE_Source_EXTI_EV5: I/O port interrupt from Pins 5
* @arg WFE_Source_EXTI_EV6: I/O port interrupt from Pins 6
* @arg WFE_Source_EXTI_EV7: I/O port interrupt from Pins 7
* @arg WFE_Source_EXTI_EVB_G: I/O port interrupt from port B and G
* @arg WFE_Source_EXTI_EVD_H: I/O port interrupt from Port D and H
* @arg WFE_Source_EXTI_EVE_F: I/O port interrupt from Port E and F
* @arg WFE_Source_ADC1_COMP_EV: ADC1, COMP1 and COMP2 interrupts
* @arg WFE_Source_TIM3_EV0: TIM3 Update/Trigger and Break interrupt
* @arg WFE_Source_TIM3_EV1: TIM3 Capture/Compare interrupt
* @arg WFE_Source_TIM4_EV: TIM4 Update and Trigger interrupt
* @arg WFE_Source_SPI1_EV: SPI1 Rx and Tx interrupt
* @arg WFE_Source_I2C1_EV: I2C1 Rx and Tx interrupt
* @arg WFE_Source_USART1_EV: USART1 Rx and Tx interrupt
* @arg WFE_Source_DMA1CH01_EV: DMA1 channel 0 and 1 interrupt
* @arg WFE_Source_DMA1CH23_EV: DMA1 channel 2 and 3 interrupt
* @arg WFE_Source_RTC_CSS_EV: RTC or CSS on LSE event
* @arg WFE_Source_SPI2_EV: SPI2 Rx and Tx interrupt
* @arg WFE_Source_USART2_EV: USART2 Rx and Tx interrupt
* @arg WFE_Source_USART3_EV: USART3 Rx and Tx interrupt
* @arg WFE_Source_TIM5_EV0: TIM5 Update/Trigger and Break interrupt
* @arg WFE_Source_TIM5_EV1: TIM5 Capture/Compare interrupt
* @param NewState : The wake-up new state.
* This parameter can be: ENABLE or DISABLE.
* @retval None
*/
void WFE_WakeUpSourceEventCmd(WFE_Source_TypeDef WFE_Source, FunctionalState NewState)
{
uint8_t register_index = 0;
/* Check function parameters */
assert_param(IS_WFE_SOURCE(WFE_Source));
assert_param(IS_FUNCTIONAL_STATE(NewState));
/* The mask is reversed in order to */
register_index = (uint8_t)((uint16_t)WFE_Source >> 0x08);
if (NewState != DISABLE)
{
switch (register_index)
{
case 1:
WFE->CR1 |= (uint8_t)WFE_Source;
break;
case 2:
WFE->CR2 |= (uint8_t)WFE_Source;
break;
case 3:
WFE->CR3 |= (uint8_t)WFE_Source;
break;
case 4:
WFE->CR4 |= (uint8_t)WFE_Source;
break;
default:
break;
}
}
else
{
switch (register_index)
{
case 1:
WFE->CR1 &= (uint8_t)(~(uint8_t)WFE_Source);
break;
case 2:
WFE->CR2 &= (uint8_t)(~ (uint8_t)WFE_Source);
break;
case 3:
WFE->CR3 &= (uint8_t)(~(uint8_t)WFE_Source);
break;
case 4:
WFE->CR4 &= (uint8_t)(~(uint8_t)WFE_Source);
break;
default:
break;
}
}
}
/**
* @brief Gets the status of the specified source event.
* @param WFE_Source: The wake-up event source.
* This parameter can be one of the following values:
* @arg WFE_Source_TIM2_EV0: TIM2 Update/Trigger and Break interrupt
* @arg WFE_Source_TIM2_EV1: TIM2 Capture/Compare interrupt
* @arg WFE_Source_TIM1_EV0: TIM1 Update/Trigger and Break interrupt
* @arg WFE_Source_TIM1_EV1: TIM1 Capture/Compare interrupt
* @arg WFE_Source_EXTI_EV0: I/O port interrupt from Pins 0
* @arg WFE_Source_EXTI_EV1: I/O port interrupt from Pins 1
* @arg WFE_Source_EXTI_EV2: I/O port interrupt from Pins 2
* @arg WFE_Source_EXTI_EV3: I/O port interrupt from Pins 3
* @arg WFE_Source_EXTI_EV4: I/O port interrupt from Pins 4
* @arg WFE_Source_EXTI_EV5: I/O port interrupt from Pins 5
* @arg WFE_Source_EXTI_EV6: I/O port interrupt from Pins 6
* @arg WFE_Source_EXTI_EV7: I/O port interrupt from Pins 7
* @arg WFE_Source_EXTI_EVB_G: I/O port interrupt from port B and G
* @arg WFE_Source_EXTI_EVD_H: I/O port interrupt from Port D and H
* @arg WFE_Source_EXTI_EVE_F: I/O port interrupt from Port E and F
* @arg WFE_Source_ADC1_COMP_EV: ADC1, COMP1 and COMP2 interrupts
* @arg WFE_Source_TIM3_EV0: TIM3 Update/Trigger and Break interrupt
* @arg WFE_Source_TIM3_EV1: TIM3 Capture/Compare interrupt
* @arg WFE_Source_TIM4_EV: TIM4 Update and Trigger interrupt
* @arg WFE_Source_SPI1_EV: SPI1 Rx and Tx interrupt
* @arg WFE_Source_I2C1_EV: I2C1 Rx and Tx interrupt
* @arg WFE_Source_USART1_EV: USART1 Rx and Tx interrupt
* @arg WFE_Source_DMA1CH01_EV: DMA1 channel 0 and 1 interrupt
* @arg WFE_Source_DMA1CH23_EV: DMA1 channel 2 and 3 interrupt
* @arg WFE_Source_RTC_CSS_EV: RTC or CSS on LSE event
* @arg WFE_Source_SPI2_EV: SPI2 Rx and Tx interrupt
* @arg WFE_Source_USART2_EV: USART2 Rx and Tx interrupt
* @arg WFE_Source_USART3_EV: USART3 Rx and Tx interrupt
* @arg WFE_Source_TIM5_EV0: TIM5 Update/Trigger and Break interrupt
* @arg WFE_Source_TIM5_EV1: TIM5 Capture/Compare interrupt
* @retval Source Event state, ENABLE or DISABLE
*/
FunctionalState WFE_GetWakeUpSourceEventStatus(WFE_Source_TypeDef WFE_Source)
{
FunctionalState status = DISABLE;
/* Check function parameters */
assert_param(IS_WFE_SOURCE(WFE_Source));
switch (WFE_Source)
{
case WFE_Source_TIM2_EV0:
case WFE_Source_TIM2_EV1:
case WFE_Source_TIM1_EV0:
case WFE_Source_TIM1_EV1:
case WFE_Source_EXTI_EV0:
case WFE_Source_EXTI_EV1:
case WFE_Source_EXTI_EV2:
case WFE_Source_EXTI_EV3:
if ((WFE->CR1 & (uint8_t)WFE_Source) != (uint8_t)0x00)
{
/* The wake-up event source is enabled*/
status = ENABLE;
}
else
{
/* The wake-up event source is disabled*/
status = DISABLE;
}
break;
case WFE_Source_EXTI_EV4:
case WFE_Source_EXTI_EV5:
case WFE_Source_EXTI_EV6:
case WFE_Source_EXTI_EV7:
case WFE_Source_EXTI_EVB_G:
case WFE_Source_EXTI_EVD_H:
case WFE_Source_EXTI_EVE_F:
case WFE_Source_ADC1_COMP_EV:
if ((WFE->CR2 & (uint8_t)WFE_Source) != (uint8_t)0x00)
{
/* The wake-up event source is enabled*/
status = ENABLE;
}
else
{
/* The wake-up event source is disabled*/
status = DISABLE;
}
break;
case WFE_Source_TIM3_EV0:
case WFE_Source_TIM3_EV1:
case WFE_Source_TIM4_EV:
case WFE_Source_SPI1_EV:
case WFE_Source_I2C1_EV:
case WFE_Source_USART1_EV:
case WFE_Source_DMA1CH01_EV:
case WFE_Source_DMA1CH23_EV:
if ((WFE->CR3 & (uint8_t)WFE_Source) != (uint8_t)0x00)
{
/* The wake-up event source is enabled*/
status = ENABLE;
}
else
{
/* The wake-up event source is disabled*/
status = DISABLE;
}
break;
case WFE_Source_TIM5_EV0:
case WFE_Source_TIM5_EV1:
case WFE_Source_AES_EV:
case WFE_Source_SPI2_EV:
case WFE_Source_USART2_EV:
case WFE_Source_USART3_EV:
case WFE_Source_RTC_CSS_EV:
if ((WFE->CR4 & (uint8_t)WFE_Source) != (uint8_t)0x00)
{
/* The wake-up event source is enabled*/
status = ENABLE;
}
else
{
/* The wake-up event source is disabled*/
status = DISABLE;
}
break;
default:
break;
}
return status;
}
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/