From 5054fdeb41778ad4ac6c8021a930b81ab11aa53f Mon Sep 17 00:00:00 2001 From: Rahix <rahix@rahix.de> Date: Fri, 5 Jul 2019 01:34:47 +0200 Subject: [PATCH] fix(epicardium): Use SEV-on-pend instead of enabling IRQ Hopefully fixes #5. Signed-off-by: Rahix <rahix@rahix.de> --- epicardium/main.c | 3 +++ epicardium/support.c | 8 ++------ 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/epicardium/main.c b/epicardium/main.c index f472e6b3..c1adc536 100644 --- a/epicardium/main.c +++ b/epicardium/main.c @@ -57,6 +57,9 @@ int main(void) card10_init(); card10_diag(); + /* TODO: Move this to its own function */ + SCB->SCR |= SCB_SCR_SEVONPEND_Msk; + pmic_set_button_callback(pmic_button); cdcacm_init(); diff --git a/epicardium/support.c b/epicardium/support.c index 19bab453..5a2d55c6 100644 --- a/epicardium/support.c +++ b/epicardium/support.c @@ -24,14 +24,10 @@ void pre_idle_sleep(TickType_t xExpectedIdleTime) * TODO: Ensure this is actually correct and does not have any * race conditions. */ - __asm volatile( "cpsie i" ::: "memory" ); __asm volatile( "dsb" ::: "memory" ); - __asm volatile( "isb" ); + __asm volatile( "sev" ); + __asm volatile( "wfe" ); __asm volatile( "wfe" ); - __asm volatile( "dsb" ::: "memory" ); - __asm volatile( "isb" ); - __asm volatile( "cpsid i" ::: "memory" ); - __asm volatile( "dsb" ); __asm volatile( "isb" ); } } -- GitLab