aboutsummaryrefslogtreecommitdiff
path: root/armclock.h
diff options
context:
space:
mode:
Diffstat (limited to 'armclock.h')
-rw-r--r--armclock.h20
1 files changed, 14 insertions, 6 deletions
diff --git a/armclock.h b/armclock.h
index 2b2aec9..32d6517 100644
--- a/armclock.h
+++ b/armclock.h
@@ -41,28 +41,36 @@ static inline void armclk_init(void)
ctrl.fields.timer_enable = 1;
ctrl.fields.interrupt_enable = 1;
ctrl.fields.counter_23bit = 1;
- *(uint32_t volatile*) ARMCLK_CONTROL = ctrl.raw;
+ wr32(ARMCLK_CONTROL, ctrl.raw);
}
static inline void armclk_enable_timer_irq(void)
{
- *(uint32_t volatile*) ARM_ENABLE_BASIC_IRQS = 1;
+ armclk_control_t ctrl = (armclk_control_t) rd32(ARMCLK_CONTROL);
+ ctrl.fields.interrupt_enable = 1;
+ wr32(ARMCLK_CONTROL, ctrl.raw);
+
+ wr32(ARM_ENABLE_BASIC_IRQS, 1);
}
static inline void armclk_disable_timer_irq(void)
{
- *(uint32_t volatile*) ARM_DISABLE_BASIC_IRQS = 1;
+ armclk_control_t ctrl = (armclk_control_t) rd32(ARMCLK_CONTROL);
+ ctrl.fields.interrupt_enable = 0;
+ wr32(ARMCLK_CONTROL, ctrl.raw);
+
+ wr32(ARM_DISABLE_BASIC_IRQS, 1);
}
static inline void armclk_irq_settimeout(uint32_t timeout)
{
- *(uint32_t volatile*) ARMCLK_IRQ_CLR_ACK = 0;
- *(uint32_t volatile*) ARMCLK_LOAD = timeout;
+ wr32(ARMCLK_IRQ_CLR_ACK, 0);
+ wr32(ARMCLK_LOAD, timeout);
}
static inline _Bool armclk_irq_pending(void)
{
- return *(uint32_t volatile*) ARMCLK_RAW_IRQ;
+ return rd32(ARM_IRQ_BASIC_PENDING) & 1;
}
#endif // ARMCLOCK_H