aboutsummaryrefslogtreecommitdiff
path: root/armclock.h
diff options
context:
space:
mode:
authorWojtek Kosior <kwojtus@protonmail.com>2020-01-03 16:41:41 +0100
committerWojtek Kosior <kwojtus@protonmail.com>2020-01-03 16:41:41 +0100
commit06991bb6572c1eb814ee35256b3c2bd06519acd2 (patch)
tree7d9d128a60d44ee5d0a3c74d84ac05132d326cea /armclock.h
parentffb2c4adfb8e65e355b39abd39d994eebc649c98 (diff)
downloadrpi-MMU-example-06991bb6572c1eb814ee35256b3c2bd06519acd2.tar.gz
rpi-MMU-example-06991bb6572c1eb814ee35256b3c2bd06519acd2.zip
fix interrupt enabling/disabling/polling and uart fifo setting to make the io work properly
Diffstat (limited to 'armclock.h')
-rw-r--r--armclock.h12
1 files changed, 11 insertions, 1 deletions
diff --git a/armclock.h b/armclock.h
index 2b2aec9..f81f363 100644
--- a/armclock.h
+++ b/armclock.h
@@ -46,11 +46,21 @@ static inline void armclk_init(void)
static inline void armclk_enable_timer_irq(void)
{
+ armclk_control_t ctrl =
+ (armclk_control_t) *(uint32_t volatile*) ARMCLK_CONTROL;
+ ctrl.fields.interrupt_enable = 1;
+ *(uint32_t volatile*) ARMCLK_CONTROL = ctrl.raw;
+
*(uint32_t volatile*) ARM_ENABLE_BASIC_IRQS = 1;
}
static inline void armclk_disable_timer_irq(void)
{
+ armclk_control_t ctrl =
+ (armclk_control_t) *(uint32_t volatile*) ARMCLK_CONTROL;
+ ctrl.fields.interrupt_enable = 0;
+ *(uint32_t volatile*) ARMCLK_CONTROL = ctrl.raw;
+
*(uint32_t volatile*) ARM_DISABLE_BASIC_IRQS = 1;
}
@@ -62,7 +72,7 @@ static inline void armclk_irq_settimeout(uint32_t timeout)
static inline _Bool armclk_irq_pending(void)
{
- return *(uint32_t volatile*) ARMCLK_RAW_IRQ;
+ return *(uint32_t volatile*) ARM_IRQ_BASIC_PENDING & 1;
}
#endif // ARMCLOCK_H