From 22a79e03a60bed3df7ba24015564c4b48bb811cb Mon Sep 17 00:00:00 2001 From: Uros Majstorovic Date: Sun, 24 Nov 2019 18:25:18 +0100 Subject: fixed evt msg get; cleanup --- code/fe310/eos/event.c | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) (limited to 'code/fe310/eos/event.c') diff --git a/code/fe310/eos/event.c b/code/fe310/eos/event.c index 0335df1..3c3ceb9 100644 --- a/code/fe310/eos/event.c +++ b/code/fe310/eos/event.c @@ -99,9 +99,21 @@ void eos_evtq_get(unsigned char type, unsigned char *selector, uint16_t sel_len, clear_csr(mstatus, MSTATUS_MIE); rv = eos_msgq_get(&_eos_event_q, type, selector, sel_len, buffer, len); if (!rv) { - asm volatile ("wfi"); + unsigned char _type; + unsigned char *_buffer; + uint16_t _len; + + eos_msgq_pop(&_eos_event_q, &_type, &_buffer, &_len); + if (_type) { + set_csr(mstatus, MSTATUS_MIE); + evtq_handler(_type, _buffer, _len); + } else { + asm volatile ("wfi"); + set_csr(mstatus, MSTATUS_MIE); + } + } else { + set_csr(mstatus, MSTATUS_MIE); } - set_csr(mstatus, MSTATUS_MIE); } } @@ -117,11 +129,10 @@ void eos_evtq_loop(void) { if (type) { set_csr(mstatus, MSTATUS_MIE); evtq_handler(type, buffer, len); - clear_csr(mstatus, MSTATUS_MIE); } else { if (!evt_busy) asm volatile ("wfi"); + set_csr(mstatus, MSTATUS_MIE); } - set_csr(mstatus, MSTATUS_MIE); } } -- cgit v1.2.3