aboutsummaryrefslogtreecommitdiffstats
path: root/src/pru
diff options
context:
space:
mode:
Diffstat (limited to 'src/pru')
-rw-r--r--src/pru/main.c12
-rw-r--r--src/pru/pru0.c7
2 files changed, 17 insertions, 2 deletions
diff --git a/src/pru/main.c b/src/pru/main.c
index 3ead0bde..021bee3f 100644
--- a/src/pru/main.c
+++ b/src/pru/main.c
@@ -46,6 +46,12 @@ irq_restore(irqstatus_t flag)
{
}
+void
+irq_wait(void)
+{
+ asm("slp 1");
+}
+
static void
timer_set(uint32_t value)
{
@@ -53,6 +59,12 @@ timer_set(uint32_t value)
}
uint32_t
+timer_get_next(void)
+{
+ return CT_IEP.TMR_CMP0;
+}
+
+uint32_t
timer_read_time(void)
{
return CT_IEP.TMR_CNT;
diff --git a/src/pru/pru0.c b/src/pru/pru0.c
index 3a8fd421..c6a63cb9 100644
--- a/src/pru/pru0.c
+++ b/src/pru/pru0.c
@@ -135,8 +135,7 @@ static void
process_io(void)
{
for (;;) {
- if (!(read_r31() & (1 << (WAKE_PRU0_IRQ + R31_IRQ_OFFSET))))
- continue;
+ asm("slp 1");
CT_INTC.SECR0 = (1 << KICK_PRU0_FROM_ARM_EVENT) | (1 << KICK_PRU0_EVENT);
check_can_send();
check_can_read();
@@ -327,6 +326,10 @@ main(void)
, CHAN_DESC, CHAN_PORT) != PRU_RPMSG_SUCCESS)
;
+ // Allow PRU0 and PRU1 to wake from sleep
+ PRU0_CTRL.WAKEUP_EN = 1 << (WAKE_PRU0_IRQ + R31_IRQ_OFFSET);
+ PRU1_CTRL.WAKEUP_EN = 1 << (WAKE_PRU1_IRQ + R31_IRQ_OFFSET);
+
// Wait for PRU1 to be ready
memset(SHARED_MEM, 0, sizeof(*SHARED_MEM));
writel(&SHARED_MEM->signal, SIGNAL_PRU0_WAITING);