From 98659d919772cdee372ab4a4d63bd68fa469174e Mon Sep 17 00:00:00 2001 From: Silvan Jegen Date: Sat, 24 Aug 2019 16:41:58 +0200 Subject: first: introduce wait_for_irq --- software/first/first.c | 1 + software/first/setup_timer_irq.S | 11 +++++++++++ software/first/super_blink.h | 1 + 3 files changed, 13 insertions(+) diff --git a/software/first/first.c b/software/first/first.c index 889e05b..e04d501 100644 --- a/software/first/first.c +++ b/software/first/first.c @@ -16,5 +16,6 @@ int main() { // for the first interrupt. In the interrupt // routine, we set the next delay so all we need // to do here is to loop endlessly + wait_for_irq(); } } diff --git a/software/first/setup_timer_irq.S b/software/first/setup_timer_irq.S index c3e7513..bba356d 100644 --- a/software/first/setup_timer_irq.S +++ b/software/first/setup_timer_irq.S @@ -1,6 +1,7 @@ .section .text .align 2 .global setup_timer_irq +.global wait_for_irq .include "gpio.inc" .include "memory_map.inc" @@ -97,3 +98,13 @@ exit: lw a0, 4(sp) # restore first argument to function addi sp, sp, 28 # deallocate stack frame mret # exit IRQ handler + + +wait_for_irq: + csrr t0, mip + csrr t1, mcause + csrr t2, mtvec + csrr t3, mstatus + csrr t4, mie + wfi + ret diff --git a/software/first/super_blink.h b/software/first/super_blink.h index b53d55d..b1ddf8e 100644 --- a/software/first/super_blink.h +++ b/software/first/super_blink.h @@ -10,4 +10,5 @@ void setup_GPIO(); int set_LED(int color, int state); void setup_timer_irq(); +void wait_for_irq(); void delay(int milliseconds); -- cgit v1.2.1-18-gbd029