aboutsummaryrefslogtreecommitdiff
path: root/armclock.h
diff options
context:
space:
mode:
authorvetch <vetch97@gmail.com>2020-01-04 11:26:57 +0100
committervetch <vetch97@gmail.com>2020-01-04 11:26:57 +0100
commit885a097da42317f48cead2d91c0e0240066943a8 (patch)
tree0ee86dbaf5678b32f496b99c48ea81bbd20971f2 /armclock.h
parent2d31012739a11724844701d07db12e6e1307925e (diff)
parent814d4a5357d849c4988422d48afa4aaa5432ce78 (diff)
downloadrpi-MMU-example-885a097da42317f48cead2d91c0e0240066943a8.tar.gz
rpi-MMU-example-885a097da42317f48cead2d91c0e0240066943a8.zip
Merge branch 'bob' of https://repo.or.cz/RPi-MMU-example into alice
# Conflicts: # demo_functionality.h # interrupt_vector.S # interrupts.c
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