Add hulk.time and msleep()
This commit is contained in:
parent
6251fee3ff
commit
9f8a4ea100
@ -6,6 +6,7 @@ module hulk.pit;
|
|||||||
import hulk.cpu;
|
import hulk.cpu;
|
||||||
import hulk.klog;
|
import hulk.klog;
|
||||||
import hulk.console;
|
import hulk.console;
|
||||||
|
import hulk.time;
|
||||||
|
|
||||||
struct Pit
|
struct Pit
|
||||||
{
|
{
|
||||||
@ -29,8 +30,6 @@ struct Pit
|
|||||||
private enum ubyte MC_RATE_GENERATOR = 0x04u;
|
private enum ubyte MC_RATE_GENERATOR = 0x04u;
|
||||||
private enum ubyte MC_BINARY = 0x00u;
|
private enum ubyte MC_BINARY = 0x00u;
|
||||||
|
|
||||||
private static __gshared ulong milliseconds;
|
|
||||||
|
|
||||||
public static void initialize()
|
public static void initialize()
|
||||||
{
|
{
|
||||||
Klog.writefln("\a3Initializing PIT");
|
Klog.writefln("\a3Initializing PIT");
|
||||||
@ -41,6 +40,6 @@ struct Pit
|
|||||||
|
|
||||||
public static void isr()
|
public static void isr()
|
||||||
{
|
{
|
||||||
milliseconds++;
|
Time.ms_isr();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
42
src/hulk/time.d
Normal file
42
src/hulk/time.d
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
/**
|
||||||
|
* Time functionality.
|
||||||
|
*/
|
||||||
|
module hulk.time;
|
||||||
|
|
||||||
|
import core.volatile;
|
||||||
|
|
||||||
|
struct Time
|
||||||
|
{
|
||||||
|
/** System uptime (ms). */
|
||||||
|
private static __gshared ulong s_uptime;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Millisecond ISR.
|
||||||
|
*/
|
||||||
|
public static void ms_isr()
|
||||||
|
{
|
||||||
|
s_uptime++;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get system uptime (ms).
|
||||||
|
*/
|
||||||
|
public static @property ulong uptime()
|
||||||
|
{
|
||||||
|
return s_uptime;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sleep for the given amount of time (ms).
|
||||||
|
*
|
||||||
|
* @param count
|
||||||
|
* Number of milliseconds to sleep for.
|
||||||
|
*/
|
||||||
|
public static void msleep(ulong count)
|
||||||
|
{
|
||||||
|
ulong wait_for = s_uptime + count + 1;
|
||||||
|
while (volatileLoad(&s_uptime) < wait_for)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user