blob: 462346d185d9f815f68322f945864d055bb03bb1 (
about) (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
#ifndef BCMCLOCK_H
#define BCMCLOCK_H
#include <stdint.h>
#include "interrupts.h"
#include "global.h"
#define ST_BASE (PERIF_BASE + 0x3000) // System Timer
#define ST_CS (ST_BASE + 0x0) // System Timer Control/Status
#define ST_CLO (ST_BASE + 0x4) // System Timer Counter Lower 32 bits
#define ST_CHI (ST_BASE + 0x8) // System Timer Counter Higher 32 bits
#define ST_C0 (ST_BASE + 0xC) // System Timer Compare 0
#define ST_C1 (ST_BASE + 0x10) // System Timer Compare 1
#define ST_C2 (ST_BASE + 0x14) // System Timer Compare 2
#define ST_C3 (ST_BASE + 0x18) // System Timer Compare 3
static inline void bcmclk_enable_timer_irq(void)
{
wr32(ARM_ENABLE_IRQS_1, 1 << 3);
}
static inline void bcmclk_disable_timer_irq(void)
{
wr32(ARM_DISABLE_IRQS_1, 1 << 3);
}
static inline void bcmclk_irq_settimeout(uint32_t timeout)
{
uint32_t clock_now = rd32(ST_CLO);
wr32(ST_C3, clock_now + timeout);
wr32(ST_CS, 1 << 3);
}
#endif // BCMCLOCK_H
|