225 lines
6.0 KiB
C
225 lines
6.0 KiB
C
/**
|
|
**************************************************************************
|
|
* @file at32f403a_407_bpr.c
|
|
* @brief contains all the functions for the bpr firmware library
|
|
**************************************************************************
|
|
* Copyright notice & Disclaimer
|
|
*
|
|
* The software Board Support Package (BSP) that is made available to
|
|
* download from Artery official website is the copyrighted work of Artery.
|
|
* Artery authorizes customers to use, copy, and distribute the BSP
|
|
* software and its related documentation for the purpose of design and
|
|
* development in conjunction with Artery microcontrollers. Use of the
|
|
* software is governed by this copyright notice and the following disclaimer.
|
|
*
|
|
* THIS SOFTWARE IS PROVIDED ON "AS IS" BASIS WITHOUT WARRANTIES,
|
|
* GUARANTEES OR REPRESENTATIONS OF ANY KIND. ARTERY EXPRESSLY DISCLAIMS,
|
|
* TO THE FULLEST EXTENT PERMITTED BY LAW, ALL EXPRESS, IMPLIED OR
|
|
* STATUTORY OR OTHER WARRANTIES, GUARANTEES OR REPRESENTATIONS,
|
|
* INCLUDING BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY,
|
|
* FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT.
|
|
*
|
|
**************************************************************************
|
|
*/
|
|
|
|
#include "at32f403a_407_conf.h"
|
|
|
|
/** @addtogroup AT32F403A_407_periph_driver
|
|
* @{
|
|
*/
|
|
|
|
/** @defgroup BPR
|
|
* @brief BPR driver modules
|
|
* @{
|
|
*/
|
|
|
|
#ifdef BPR_MODULE_ENABLED
|
|
|
|
/** @defgroup BPR_private_functions
|
|
* @{
|
|
*/
|
|
|
|
/**
|
|
* @brief bpr reset by crm reset register
|
|
* @param none
|
|
* @retval none
|
|
*/
|
|
void bpr_reset(void)
|
|
{
|
|
crm_battery_powered_domain_reset(TRUE);
|
|
crm_battery_powered_domain_reset(FALSE);
|
|
}
|
|
|
|
/**
|
|
* @brief bpr event flag get, for tamper event flag
|
|
* @param flag: specifies the flag to check.
|
|
* this parameter can be one of the following values:
|
|
* - BPR_TAMPER_INTERRUPT_FLAG: tamper interrupt flag
|
|
* - BPR_TAMPER_EVENT_FLAG: tamper event flag
|
|
* @retval state of tamper event flag
|
|
*/
|
|
flag_status bpr_flag_get(uint32_t flag)
|
|
{
|
|
if(flag == BPR_TAMPER_INTERRUPT_FLAG)
|
|
{
|
|
return (flag_status)(BPR->ctrlsts_bit.tpif);
|
|
}
|
|
else
|
|
{
|
|
return (flag_status)(BPR->ctrlsts_bit.tpef);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @brief bpr interrupt flag get
|
|
* @param flag: specifies the flag to check.
|
|
* this parameter can be one of the following values:
|
|
* - BPR_TAMPER_INTERRUPT_FLAG: tamper interrupt flag
|
|
* - BPR_TAMPER_EVENT_FLAG: tamper event flag
|
|
* @retval state of tamper event flag
|
|
*/
|
|
flag_status bpr_interrupt_flag_get(uint32_t flag)
|
|
{
|
|
if(flag == BPR_TAMPER_INTERRUPT_FLAG)
|
|
{
|
|
return (flag_status)(BPR->ctrlsts_bit.tpif && BPR->ctrlsts_bit.tpien);
|
|
}
|
|
else
|
|
{
|
|
return (flag_status)(BPR->ctrlsts_bit.tpef && BPR->ctrlsts_bit.tpien);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @brief clear bpr tamper flag
|
|
* @param flag: specifies the flag to clear.
|
|
* this parameter can be one of the following values:
|
|
* - BPR_TAMPER_INTERRUPT_FLAG: tamper interrupt flag
|
|
* - BPR_TAMPER_EVENT_FLAG: tamper event flag
|
|
* @retval none
|
|
*/
|
|
void bpr_flag_clear(uint32_t flag)
|
|
{
|
|
if(flag == BPR_TAMPER_INTERRUPT_FLAG)
|
|
{
|
|
BPR->ctrlsts_bit.tpifclr = TRUE;
|
|
}
|
|
else
|
|
{
|
|
BPR->ctrlsts_bit.tpefclr = TRUE;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @brief enable or disable bpr tamper interrupt
|
|
* @param new_state (TRUE or FALSE)
|
|
* @retval none
|
|
*/
|
|
void bpr_interrupt_enable(confirm_state new_state)
|
|
{
|
|
BPR->ctrlsts_bit.tpien = new_state;
|
|
}
|
|
|
|
/**
|
|
* @brief read bpr bpr data
|
|
* @param bpr_data
|
|
* this parameter can be one of the following values:
|
|
* - BPR_DATA1
|
|
* - BPR_DATA2
|
|
* ...
|
|
* - BPR_DATA41
|
|
* - BPR_DATA42
|
|
* @retval none
|
|
*/
|
|
uint16_t bpr_data_read(bpr_data_type bpr_data)
|
|
{
|
|
return (*(__IO uint16_t *)(BPR_BASE + bpr_data));
|
|
}
|
|
|
|
/**
|
|
* @brief write bpr data
|
|
* @param bpr_data
|
|
* this parameter can be one of the following values:
|
|
* - BPR_DATA1
|
|
* - BPR_DATA2
|
|
* ...
|
|
* - BPR_DATA41
|
|
* - BPR_DATA42
|
|
* @param data_value (0x0000~0xFFFF)
|
|
* @retval none
|
|
*/
|
|
void bpr_data_write(bpr_data_type bpr_data, uint16_t data_value)
|
|
{
|
|
(*(__IO uint32_t *)(BPR_BASE + bpr_data)) = data_value;
|
|
}
|
|
|
|
/**
|
|
* @brief select bpr rtc output
|
|
* @param output_source
|
|
* this parameter can be one of the following values:
|
|
* - BPR_RTC_OUTPUT_NONE: output disable.
|
|
* - BPR_RTC_OUTPUT_CLOCK_CAL_BEFORE: output clock before calibration.
|
|
* - BPR_RTC_OUTPUT_ALARM: output alarm event with pluse mode.
|
|
* - BPR_RTC_OUTPUT_SECOND: output second event with pluse mode.
|
|
* - BPR_RTC_OUTPUT_CLOCK_CAL_AFTER: output clock after calibration.
|
|
* - BPR_RTC_OUTPUT_ALARM_TOGGLE: output alarm event with toggle mode.
|
|
* - BPR_RTC_OUTPUT_SECOND_TOGGLE: output second event with toggle mode.
|
|
* @retval none
|
|
*/
|
|
void bpr_rtc_output_select(bpr_rtc_output_type output_source)
|
|
{
|
|
/* clear cco,asoe,asos,ccos,togen bits */
|
|
BPR->rtccal &= (uint32_t)~0x0F80;
|
|
|
|
/* set output_source value */
|
|
BPR->rtccal |= output_source;
|
|
}
|
|
|
|
/**
|
|
* @brief set rtc clock calibration value
|
|
* @param calibration_value (0x00~0x7f)
|
|
* @retval none
|
|
*/
|
|
void bpr_rtc_clock_calibration_value_set(uint8_t calibration_value)
|
|
{
|
|
/* set rtc clock calibration value */
|
|
BPR->rtccal_bit.calval= calibration_value;
|
|
}
|
|
|
|
/**
|
|
* @brief enable or disable bpr tamper pin
|
|
* @param new_state (TRUE or FALSE)
|
|
* @retval none
|
|
*/
|
|
void bpr_tamper_pin_enable(confirm_state new_state)
|
|
{
|
|
BPR->ctrl_bit.tpen = new_state;
|
|
}
|
|
|
|
/**
|
|
* @brief set bpr tamper pin active level
|
|
* @param active_level
|
|
* this parameter can be one of the following values:
|
|
* - BPR_TAMPER_PIN_ACTIVE_HIGH: tamper pin input active level is high.
|
|
* - BPR_TAMPER_PIN_ACTIVE_LOW: tamper pin input active level is low.
|
|
* @retval none
|
|
*/
|
|
void bpr_tamper_pin_active_level_set(bpr_tamper_pin_active_level_type active_level)
|
|
{
|
|
BPR->ctrl_bit.tpp = active_level;
|
|
}
|
|
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
#endif
|
|
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
/**
|
|
* @}
|
|
*/
|