Add object files to Makefile to include new modules into lib. Correct typo in pwr.c Add two new functions to timer.c to preset the counter (for use with deadman style timeouts) and to identify an interrupt source. Also noticed lib/makefile.include didn't clean lib/stm32, which isn't a target. Added a fix.
218 lines
5.3 KiB
C
218 lines
5.3 KiB
C
/** @defgroup STM32F1xx-pwr-file PWR
|
|
|
|
@ingroup STM32F1xx
|
|
|
|
@brief <b>libopencm3 STM32F1xx Power Control</b>
|
|
|
|
@version 1.0.0
|
|
|
|
@author @htmlonly © @endhtmlonly 2012 Ken Sarkies <ksarkies@internode.on.net>
|
|
|
|
@date 18 August 2012
|
|
|
|
This library supports the power control system for the
|
|
STM32F1 series of ARM Cortex Microcontrollers by ST Microelectronics.
|
|
|
|
LGPL License Terms @ref lgpl_license
|
|
*/
|
|
/*
|
|
* This file is part of the libopencm3 project.
|
|
*
|
|
* Copyright (C) 2012 Ken Sarkies <ksarkies@internode.on.net>
|
|
*
|
|
* This library is free software: you can redistribute it and/or modify
|
|
* it under the terms of the GNU Lesser General Public License as published by
|
|
* the Free Software Foundation, either version 3 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This library is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU Lesser General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public License
|
|
* along with this library. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
/**@{*/
|
|
|
|
#include <libopencm3/stm32/pwr.h>
|
|
|
|
/*---------------------------------------------------------------------------*/
|
|
/** @brief Disable Backup Domain Write Protection.
|
|
|
|
This allows backup domain registers to be changed. These registers are write
|
|
protected after a reset.
|
|
*/
|
|
|
|
void pwr_disable_backup_domain_write_protect(void)
|
|
{
|
|
PWR_CR |= PWR_CR_DBP;
|
|
}
|
|
|
|
/*---------------------------------------------------------------------------*/
|
|
/** @brief Re-enable Backup Domain Write Protection.
|
|
|
|
This protects backup domain registers from inadvertent change.
|
|
*/
|
|
|
|
void pwr_enable_backup_domain_write_protect(void)
|
|
{
|
|
PWR_CR &= ~PWR_CR_DBP;
|
|
}
|
|
|
|
/*---------------------------------------------------------------------------*/
|
|
/** @brief Enable Power Voltage Detector.
|
|
|
|
This provides voltage level threshold detection. The result of detection is
|
|
provided in the power voltage detector output flag (see @ref pwr_voltage_high)
|
|
or by setting the EXTI16 interrupt (see datasheet for configuration details).
|
|
|
|
@param[in] pvd_level u32. Taken from @ref pwr_pls.
|
|
*/
|
|
|
|
void pwr_enable_power_voltage_detect(u32 pvd_level)
|
|
{
|
|
PWR_CR &= ~PWR_CR_PLS_MASK;
|
|
PWR_CR |= (PWR_CR_PVDE | pvd_level);
|
|
}
|
|
|
|
/*---------------------------------------------------------------------------*/
|
|
/** @brief Disable Power Voltage Detector.
|
|
|
|
*/
|
|
|
|
void pwr_disable_power_voltage_detect(void)
|
|
{
|
|
PWR_CR &= ~PWR_CR_PVDE;
|
|
}
|
|
|
|
/*---------------------------------------------------------------------------*/
|
|
/** @brief Clear the Standby Flag.
|
|
|
|
This is set when the processor returns from a standby mode.
|
|
*/
|
|
|
|
void pwr_clear_standby_flag(void)
|
|
{
|
|
PWR_CR |= PWR_CR_CSBF;
|
|
}
|
|
|
|
/*---------------------------------------------------------------------------*/
|
|
/** @brief Clear the Wakeup Flag.
|
|
|
|
This is set when the processor receives a wakeup signal.
|
|
*/
|
|
|
|
void pwr_clear_wakeup_flag(void)
|
|
{
|
|
PWR_CR |= PWR_CR_CWUF;
|
|
}
|
|
|
|
/*---------------------------------------------------------------------------*/
|
|
/** @brief Set Standby Mode in Deep Sleep.
|
|
|
|
*/
|
|
|
|
void pwr_set_standby_mode(void)
|
|
{
|
|
PWR_CR |= PWR_CR_PDDS;
|
|
}
|
|
|
|
/*---------------------------------------------------------------------------*/
|
|
/** @brief Set Stop Mode in Deep Sleep.
|
|
|
|
*/
|
|
|
|
void pwr_set_stop_mode(void)
|
|
{
|
|
PWR_CR &= ~PWR_CR_PDDS;
|
|
}
|
|
|
|
/*---------------------------------------------------------------------------*/
|
|
/** @brief Voltage Regulator On in Stop Mode.
|
|
|
|
*/
|
|
|
|
void pwr_voltage_regulator_on_in_stop(void)
|
|
{
|
|
PWR_CR &= ~PWR_CR_LPDS;
|
|
}
|
|
|
|
/*---------------------------------------------------------------------------*/
|
|
/** @brief Voltage Regulator Low Power in Stop Mode.
|
|
|
|
*/
|
|
|
|
void pwr_voltage_regulator_low_power_in_stop(void)
|
|
{
|
|
PWR_CR |= PWR_CR_LPDS;
|
|
}
|
|
|
|
/*---------------------------------------------------------------------------*/
|
|
/** @brief Enable Wakeup Pin.
|
|
|
|
The wakeup pin is used for waking the processor from standby mode.
|
|
*/
|
|
|
|
void pwr_enable_wakeup_pin(void)
|
|
{
|
|
PWR_CSR |= PWR_CSR_EWUP;
|
|
}
|
|
|
|
/*---------------------------------------------------------------------------*/
|
|
/** @brief Release Wakeup Pin.
|
|
|
|
The wakeup pin is used for general purpose I/O.
|
|
*/
|
|
|
|
void pwr_disable_wakeup_pin(void)
|
|
{
|
|
PWR_CSR &= ~PWR_CSR_EWUP;
|
|
}
|
|
|
|
/*---------------------------------------------------------------------------*/
|
|
/** @brief Get Voltage Detector Output.
|
|
|
|
The voltage detector threshold must be set when the power voltage detector is
|
|
enabled, see @ref pwr_enable_power_voltage_detect.
|
|
|
|
@returns boolean: TRUE if the power voltage is above the preset voltage
|
|
threshold.
|
|
*/
|
|
|
|
bool pwr_voltage_high(void)
|
|
{
|
|
return (PWR_CSR & PWR_CSR_PVDO);
|
|
}
|
|
|
|
/*---------------------------------------------------------------------------*/
|
|
/** @brief Get Standby Flag.
|
|
|
|
The standby flag is set when the processor returns from a standby state. It is
|
|
cleared by software (see @ref pwr_clear_standby_flag).
|
|
|
|
@returns boolean: TRUE if the processor was in standby state.
|
|
*/
|
|
|
|
bool pwr_get_standby_flag(void)
|
|
{
|
|
return (PWR_CSR & PWR_CSR_SBF);
|
|
}
|
|
|
|
/*---------------------------------------------------------------------------*/
|
|
/** @brief Get Wakeup Flag.
|
|
|
|
The wakeup flag is set when a wakeup event has been received. It is
|
|
cleared by software (see @ref pwr_clear_wakeup_flag).
|
|
|
|
@returns boolean: TRUE if a wakeup event was received.
|
|
*/
|
|
|
|
bool pwr_get_wakeup_flag(void)
|
|
{
|
|
return (PWR_CSR & PWR_CSR_WUF);
|
|
}
|
|
/**@}*/
|
|
|