mirror of
https://github.com/OneOfEleven/uv-k5-firmware-custom.git
synced 2025-04-28 22:31:25 +03:00
Merge pull request #261 from bricky149/enable-wfi
Enable MCU power-saving
This commit is contained in:
commit
059436fdf1
@ -343,6 +343,23 @@
|
|||||||
#define SYSCON_CHIP_ID3_ADDR (SYSCON_BASE_ADDR + 0x008CU)
|
#define SYSCON_CHIP_ID3_ADDR (SYSCON_BASE_ADDR + 0x008CU)
|
||||||
#define SYSCON_CHIP_ID3 (*(volatile uint32_t *)SYSCON_CHIP_ID3_ADDR)
|
#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
|
#endif
|
||||||
|
|
||||||
|
@ -176,3 +176,4 @@ CHIP_ID1 = 0x0084
|
|||||||
CHIP_ID2 = 0x0088
|
CHIP_ID2 = 0x0088
|
||||||
CHIP_ID3 = 0x008C
|
CHIP_ID3 = 0x008C
|
||||||
|
|
||||||
|
SCR = 0x0100
|
||||||
|
13
main.c
13
main.c
@ -236,8 +236,21 @@ void Main(void)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Everything is initialised, set SLEEP* bits
|
||||||
|
SYSCON_REGISTER |= SYSCON_REGISTER_SLEEPONEXIT_BITS_ENABLE;
|
||||||
|
SYSCON_REGISTER |= SYSCON_REGISTER_SLEEPDEEP_BITS_ENABLE;
|
||||||
|
|
||||||
while (1)
|
while (1)
|
||||||
{
|
{
|
||||||
|
// Mask interrupts
|
||||||
|
__asm volatile ("cpsid i");
|
||||||
|
if (!g_next_time_slice)
|
||||||
|
// Idle condition, hint the MCU to sleep
|
||||||
|
// CMSIS suggests GCC reorders memory and is undesirable
|
||||||
|
__asm volatile ("wfi":::"memory");
|
||||||
|
// Unmask interrupts
|
||||||
|
__asm volatile ("cpsie i");
|
||||||
|
|
||||||
APP_process();
|
APP_process();
|
||||||
|
|
||||||
if (g_next_time_slice)
|
if (g_next_time_slice)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user