0
mirror of https://github.com/OneOfEleven/uv-k5-firmware-custom.git synced 2025-04-27 22:01:26 +03:00

feature: enable wfi

This commit is contained in:
bricky149 2023-10-28 19:10:35 +01:00
parent 4153389778
commit 5ba5a887a5
3 changed files with 28 additions and 1 deletions

View File

@ -343,6 +343,23 @@
#define SYSCON_CHIP_ID3_ADDR (SYSCON_BASE_ADDR + 0x008CU)
#define SYSCON_CHIP_ID3 (*(volatile uint32_t *)SYSCON_CHIP_ID3_ADDR)
#define SYSCON_REGISTER_ADDR (SYSCON_BASE_ADDR + 0x0100U)
#define SYSCON_REGISTER (*(volatile uint32_t *)SYSCON_REGISTER_ADDR)
#define SYSCON_REGISTER_SLEEPONEXIT_SHIFT 1
#define SYSCON_REGISTER_SLEEPONEXIT_WIDTH 1
#define SYSCON_REGISTER_SLEEPONEXIT_MASK (((1U << SYSCON_REGISTER_SLEEPONEXIT_WIDTH) - 1U) << SYSCON_REGISTER_SLEEPONEXIT_SHIFT)
#define SYSCON_REGISTER_SLEEPONEXIT_VALUE_ENABLE 1U
#define SYSCON_REGISTER_SLEEPONEXIT_BITS_ENABLE (SYSCON_REGISTER_SLEEPONEXIT_VALUE_ENABLE << SYSCON_REGISTER_SLEEPONEXIT_SHIFT)
#define SYSCON_REGISTER_SLEEPONEXIT_VALUE_DISABLE 0U
#define SYSCON_REGISTER_SLEEPONEXIT_BITS_DISABLE (SYSCON_REGISTER_SLEEPONEXIT_VALUE_DISABLE << SYSCON_REGISTER_SLEEPONEXIT_SHIFT)
#define SYSCON_REGISTER_SLEEPDEEP_SHIFT 2
#define SYSCON_REGISTER_SLEEPDEEP_WIDTH 1
#define SYSCON_REGISTER_SLEEPDEEP_MASK (((1U << SYSCON_REGISTER_SLEEPDEEP_WIDTH) - 1U) << SYSCON_REGISTER_SLEEPDEEP_SHIFT)
#define SYSCON_REGISTER_SLEEPDEEP_VALUE_ENABLE 1U
#define SYSCON_REGISTER_SLEEPDEEP_BITS_ENABLE (SYSCON_REGISTER_SLEEPDEEP_VALUE_ENABLE << SYSCON_REGISTER_SLEEPDEEP_SHIFT)
#define SYSCON_REGISTER_SLEEPDEEP_VALUE_DISABLE 0U
#define SYSCON_REGISTER_SLEEPDEEP_BITS_DISABLE (SYSCON_REGISTER_SLEEPDEEP_VALUE_DISABLE << SYSCON_REGISTER_SLEEPDEEP_SHIFT)
#endif

View File

@ -176,3 +176,4 @@ CHIP_ID1 = 0x0084
CHIP_ID2 = 0x0088
CHIP_ID3 = 0x008C
SCR = 0x0100

9
main.c
View File

@ -236,8 +236,17 @@ void Main(void)
#endif
}
// Everything is initialised, set SLEEP* bits
SYSCON_REGISTER |= SYSCON_REGISTER_SLEEPONEXIT_BITS_ENABLE;
SYSCON_REGISTER |= SYSCON_REGISTER_SLEEPDEEP_BITS_ENABLE;
while (1)
{
if (!g_next_time_slice && !g_next_time_slice_500ms)
// Idle condition, hint the MCU to sleep
// CMSIS suggests GCC reorders memory and is undesired
__asm volatile ("wfi":::"memory");
APP_process();
if (g_next_time_slice)