/** ************************************************************************** * @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 /** * @} */ /** * @} */