/* * Copyright (c) 2023 Bjarki Arge Andreasen * SPDX-License-Identifier: Apache-2.0 */ #include #include #include #define SOC_SUPC_WAKEUP_SOURCE_IDS (3) void soc_supc_core_voltage_regulator_off(void) { SUPC->SUPC_CR = SUPC_CR_KEY_PASSWD | SUPC_CR_VROFF_STOP_VREG; } void soc_supc_slow_clock_select_crystal_osc(void) { SUPC->SUPC_CR = SUPC_CR_KEY_PASSWD | SUPC_CR_XTALSEL_CRYSTAL_SEL; /* Wait for oscillator to be stabilized. */ while (!(SUPC->SUPC_SR & SUPC_SR_OSCSEL)) { } } void soc_supc_enable_wakeup_source(uint32_t wakeup_source_id) { __ASSERT(wakeup_source_id <= SOC_SUPC_WAKEUP_SOURCE_IDS, "Wakeup source channel is invalid"); SUPC->SUPC_WUMR |= 1 << wakeup_source_id; }