aboutsummaryrefslogtreecommitdiff
path: root/common
diff options
context:
space:
mode:
Diffstat (limited to 'common')
-rw-r--r--common/debug.c9
-rw-r--r--common/timer.c34
-rw-r--r--common/timer.h9
3 files changed, 45 insertions, 7 deletions
diff --git a/common/debug.c b/common/debug.c
new file mode 100644
index 000000000..41d566ee3
--- /dev/null
+++ b/common/debug.c
@@ -0,0 +1,9 @@
1#include <stdbool.h>
2#include "debug.h"
3
4
5bool debug_enable = false;
6bool debug_matrix = false;
7bool debug_keyboard = false;
8bool debug_mouse = false;
9
diff --git a/common/timer.c b/common/timer.c
index 48a38c9b6..8b8d37e8b 100644
--- a/common/timer.c
+++ b/common/timer.c
@@ -22,7 +22,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
22 22
23 23
24// counter resolution 1ms 24// counter resolution 1ms
25volatile uint16_t timer_count = 0; 25volatile uint32_t timer_count = 0;
26 26
27void timer_init(void) 27void timer_init(void)
28{ 28{
@@ -59,7 +59,20 @@ void timer_clear(void)
59inline 59inline
60uint16_t timer_read(void) 60uint16_t timer_read(void)
61{ 61{
62 uint16_t t; 62 uint32_t t;
63
64 uint8_t sreg = SREG;
65 cli();
66 t = timer_count;
67 SREG = sreg;
68
69 return (t & 0xFFFF);
70}
71
72inline
73uint32_t timer_read32(void)
74{
75 uint32_t t;
63 76
64 uint8_t sreg = SREG; 77 uint8_t sreg = SREG;
65 cli(); 78 cli();
@@ -72,14 +85,27 @@ uint16_t timer_read(void)
72inline 85inline
73uint16_t timer_elapsed(uint16_t last) 86uint16_t timer_elapsed(uint16_t last)
74{ 87{
75 uint16_t t; 88 uint32_t t;
89
90 uint8_t sreg = SREG;
91 cli();
92 t = timer_count;
93 SREG = sreg;
94
95 return TIMER_DIFF_16((t & 0xFFFF), last);
96}
97
98inline
99uint32_t timer_elapsed32(uint32_t last)
100{
101 uint32_t t;
76 102
77 uint8_t sreg = SREG; 103 uint8_t sreg = SREG;
78 cli(); 104 cli();
79 t = timer_count; 105 t = timer_count;
80 SREG = sreg; 106 SREG = sreg;
81 107
82 return TIMER_DIFF_MS(t, last); 108 return TIMER_DIFF_32(t, last);
83} 109}
84 110
85// excecuted once per 1ms.(excess for just timer count?) 111// excecuted once per 1ms.(excess for just timer count?)
diff --git a/common/timer.h b/common/timer.h
index d24d3eab6..70b008e6c 100644
--- a/common/timer.h
+++ b/common/timer.h
@@ -40,20 +40,23 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
40#endif 40#endif
41 41
42#define TIMER_DIFF(a, b, max) ((a) >= (b) ? (a) - (b) : (max) - (b) + (a)) 42#define TIMER_DIFF(a, b, max) ((a) >= (b) ? (a) - (b) : (max) - (b) + (a))
43#define TIMER_DIFF_RAW(a, b) TIMER_DIFF(a, b, UINT8_MAX) 43#define TIMER_DIFF_8(a, b) TIMER_DIFF(a, b, UINT8_MAX)
44#define TIMER_DIFF_MS(a, b) TIMER_DIFF(a, b, UINT16_MAX) 44#define TIMER_DIFF_16(a, b) TIMER_DIFF(a, b, UINT16_MAX)
45#define TIMER_DIFF_32(a, b) TIMER_DIFF(a, b, UINT32_MAX)
45 46
46 47
47#ifdef __cplusplus 48#ifdef __cplusplus
48extern "C" { 49extern "C" {
49#endif 50#endif
50extern volatile uint16_t timer_count; 51extern volatile uint32_t timer_count;
51 52
52 53
53void timer_init(void); 54void timer_init(void);
54void timer_clear(void); 55void timer_clear(void);
55uint16_t timer_read(void); 56uint16_t timer_read(void);
57uint32_t timer_read32(void);
56uint16_t timer_elapsed(uint16_t last); 58uint16_t timer_elapsed(uint16_t last);
59uint32_t timer_elapsed32(uint32_t last);
57#ifdef __cplusplus 60#ifdef __cplusplus
58} 61}
59#endif 62#endif