summaryrefslogtreecommitdiff
path: root/time.h
blob: f43d8a6d39473d44326774f7c18bf6a9a39920e1 (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
#ifndef TIME_H
#define TIME_H

#include "stm32.h"
#include "interrupt.h"
#include "thread.h"

class Time {
	friend void interrupt<Interrupt::SysTick>();
	
	private:
		static volatile uint32_t systime;
	
	public:
		static void init() {
			STK.LOAD = 72000000 / 8 / 1000; // 1000 Hz.
			STK.CTRL = 0x03;
		}
		
		inline static void sleep(uint32_t ms) {
			ms += systime;
			while(systime < ms) {
				Thread::yield();
			}
		}
};

#endif