/**************************************************************************//** * @file sys.c * @version V3.00 * $Revision: 3 $ * $Date: 18/07/05 4:42p $ * @brief M031 Series System Manager (SYS) Driver Source File * * @note * Copyright (C) 2018 Nuvoton Technology Corp. All rights reserved. * SPDX-License-Identifier: Apache-2.0 *****************************************************************************/ #include "M031Series.h" /** @addtogroup Standard_Driver Standard Driver @{ */ /** @addtogroup SYS_Driver SYS Driver @{ */ /** @addtogroup SYS_EXPORTED_FUNCTIONS SYS Exported Functions @{ */ /** * @brief Clear reset source * @param[in] u32Src is reset source. Including : * - \ref SYS_RSTSTS_CPULKRF_Msk * - \ref SYS_RSTSTS_CPURF_Msk * - \ref SYS_RSTSTS_SYSRF_Msk * - \ref SYS_RSTSTS_BODRF_Msk * - \ref SYS_RSTSTS_LVRF_Msk * - \ref SYS_RSTSTS_WDTRF_Msk * - \ref SYS_RSTSTS_PINRF_Msk * - \ref SYS_RSTSTS_PORF_Msk * @return None * @details This function clear the selected reset source. */ void SYS_ClearResetSrc(uint32_t u32Src) { SYS->RSTSTS = u32Src; } /** * @brief Get Brown-out detector output status * @param None * @retval 0 System voltage is higher than BODVL setting or BODEN is 0. * @retval 1 System voltage is lower than BODVL setting. * @details This function get Brown-out detector output status. */ uint32_t SYS_GetBODStatus(void) { return ((SYS->BODCTL & SYS_BODCTL_BODOUT_Msk) >> SYS_BODCTL_BODOUT_Pos); } /** * @brief Get reset status register value * @param None * @return Reset source * @details This function get the system reset status register value. */ uint32_t SYS_GetResetSrc(void) { return (SYS->RSTSTS); } /** * @brief Check if register is locked or not * @param None * @retval 0 Write-protection function is disabled. * 1 Write-protection function is enabled. * @details This function check register write-protection bit setting. */ uint32_t SYS_IsRegLocked(void) { return !(SYS->REGLCTL & 0x1); } /** * @brief Get product ID * @param None * @return Product ID * @details This function get product ID. */ uint32_t SYS_ReadPDID(void) { return SYS->PDID; } /** * @brief Reset chip with chip reset * @param None * @return None * @details This function reset chip with chip reset. * The register write-protection function should be disabled before using this function. */ void SYS_ResetChip(void) { SYS->IPRST0 |= SYS_IPRST0_CHIPRST_Msk; } /** * @brief Reset chip with CPU reset * @param None * @return None * @details This function reset CPU with CPU reset. * The register write-protection function should be disabled before using this function. */ void SYS_ResetCPU(void) { SYS->IPRST0 |= SYS_IPRST0_CPURST_Msk; } /** * @brief Reset selected module * @param[in] u32ModuleIndex is module index. Including : * - \ref PDMA_RST * - \ref EBI_RST * - \ref HDIV_RST * - \ref CRC_RST * - \ref GPIO_RST * - \ref TMR0_RST * - \ref TMR1_RST * - \ref TMR2_RST * - \ref TMR3_RST * - \ref ACMP01_RST * - \ref I2C0_RST * - \ref I2C1_RST * - \ref QSPI0_RST * - \ref SPI0_RST * - \ref UART0_RST * - \ref UART1_RST * - \ref UART2_RST * - \ref UART3_RST * - \ref UART4_RST * - \ref UART5_RST * - \ref UART6_RST * - \ref UART7_RST * - \ref USBD_RST * - \ref ADC_RST * - \ref USCI0_RST * - \ref USCI1_RST * - \ref PWM0_RST * - \ref PWM1_RST * - \ref BPWM0_RST * - \ref BPWM1_RST * @return None * @details This function reset selected module. */ void SYS_ResetModule(uint32_t u32ModuleIndex) { /* Generate reset signal to the corresponding module */ *(volatile uint32_t *)((uint32_t)&SYS->IPRST0 + (u32ModuleIndex >> 24)) |= 1 << (u32ModuleIndex & 0x00ffffff); /* Release corresponding module from reset state */ *(volatile uint32_t *)((uint32_t)&SYS->IPRST0 + (u32ModuleIndex >> 24)) &= ~(1 << (u32ModuleIndex & 0x00ffffff)); } /** * @brief Enable and configure Brown-out detector function * @param[in] i32Mode is reset or interrupt mode. Including : * - \ref SYS_BODCTL_BOD_RST_EN * - \ref SYS_BODCTL_BOD_INTERRUPT_EN * @param[in] u32BODLevel is Brown-out voltage level. Including : * - \ref SYS_BODCTL_BODVL_2_5V * - \ref SYS_BODCTL_BODVL_2_0V * @return None * @details This function configure Brown-out detector reset or interrupt mode, enable Brown-out function and set Brown-out voltage level. * The register write-protection function should be disabled before using this function. */ void SYS_EnableBOD(int32_t i32Mode, uint32_t u32BODLevel) { /* Enable Brown-out Detector function */ SYS->BODCTL |= SYS_BODCTL_BODEN_Msk; /* Enable Brown-out interrupt or reset function */ SYS->BODCTL = (SYS->BODCTL & ~SYS_BODCTL_BODRSTEN_Msk) | i32Mode; /* Select Brown-out Detector threshold voltage */ SYS->BODCTL = (SYS->BODCTL & ~SYS_BODCTL_BODVL_Msk) | u32BODLevel; } /** * @brief Disable Brown-out detector function * @param None * @return None * @details This function disable Brown-out detector function. * The register write-protection function should be disabled before using this function. */ void SYS_DisableBOD(void) { SYS->BODCTL &= ~SYS_BODCTL_BODEN_Msk; } /*@}*/ /* end of group SYS_EXPORTED_FUNCTIONS */ /*@}*/ /* end of group SYS_Driver */ /*@}*/ /* end of group Standard_Driver */ /*** (C) COPYRIGHT 2018 Nuvoton Technology Corp. ***/