diff options
author | tmk <nobody@nowhere> | 2014-06-16 11:12:45 +0900 |
---|---|---|
committer | tmk <nobody@nowhere> | 2014-07-30 14:07:43 +0900 |
commit | 867f115bee190515aa195dc3e58f1c381ea9695b (patch) | |
tree | a738787299cbac2fbaf26e586393f4d4170e8775 | |
parent | f15b2691c92e1d9b3c0e59363c803ec540303f37 (diff) | |
download | qmk_firmware-867f115bee190515aa195dc3e58f1c381ea9695b.tar.gz qmk_firmware-867f115bee190515aa195dc3e58f1c381ea9695b.zip |
Port timer to mbed
-rw-r--r-- | common.mk | 2 | ||||
-rw-r--r-- | common/avr/timer.c (renamed from common/timer.c) | 1 | ||||
-rw-r--r-- | common/mbed/timer.c | 40 | ||||
-rw-r--r-- | common/timer.h | 19 | ||||
-rw-r--r-- | keyboard/mbed_onekey/common.mk | 29 | ||||
-rw-r--r-- | keyboard/mbed_onekey/main.cpp | 21 |
6 files changed, 73 insertions, 39 deletions
@@ -7,7 +7,7 @@ SRC += $(COMMON_DIR)/host.c \ $(COMMON_DIR)/action_layer.c \ $(COMMON_DIR)/action_util.c \ $(COMMON_DIR)/keymap.c \ - $(COMMON_DIR)/timer.c \ + $(COMMON_DIR)/avr/timer.c \ $(COMMON_DIR)/print.c \ $(COMMON_DIR)/bootloader.c \ $(COMMON_DIR)/suspend.c \ diff --git a/common/timer.c b/common/avr/timer.c index e0dec6cefc..292b41c3a6 100644 --- a/common/timer.c +++ b/common/avr/timer.c @@ -18,6 +18,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. #include <avr/io.h> #include <avr/interrupt.h> #include <stdint.h> +#include "timer_avr.h" #include "timer.h" diff --git a/common/mbed/timer.c b/common/mbed/timer.c new file mode 100644 index 0000000000..a64a77239c --- /dev/null +++ b/common/mbed/timer.c @@ -0,0 +1,40 @@ +#include "cmsis.h" +#include "timer.h" + +/* Mill second tick count */ +volatile uint32_t timer_count = 0; + +/* Timer interrupt handler */ +void SysTick_Handler(void) { + timer_count++; +} + +void timer_init(void) +{ + SysTick_Config(SystemCoreClock / 1000); /* 1ms tick */ +} + +void timer_clear(void) +{ + timer_count = 0; +} + +uint16_t timer_read(void) +{ + return (uint16_t)(timer_count & 0xFFFF); +} + +uint32_t timer_read32(void) +{ + return timer_count; +} + +uint16_t timer_elapsed(uint16_t last) +{ + return TIMER_DIFF_16(timer_read(), last); +} + +uint32_t timer_elapsed32(uint32_t last) +{ + return TIMER_DIFF_32(timer_read32(), last); +} diff --git a/common/timer.h b/common/timer.h index 6437473ff7..f0c5ffc98a 100644 --- a/common/timer.h +++ b/common/timer.h @@ -20,25 +20,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. #include <stdint.h> -#ifndef TIMER_PRESCALER -# if F_CPU > 16000000 -# define TIMER_PRESCALER 256 -# elif F_CPU > 2000000 -# define TIMER_PRESCALER 64 -# elif F_CPU > 250000 -# define TIMER_PRESCALER 8 -# else -# define TIMER_PRESCALER 1 -# endif -#endif -#define TIMER_RAW_FREQ (F_CPU/TIMER_PRESCALER) -#define TIMER_RAW TCNT0 -#define TIMER_RAW_TOP (TIMER_RAW_FREQ/1000) - -#if (TIMER_RAW_TOP > 255) -# error "Timer0 can't count 1ms at this clock freq. Use larger prescaler." -#endif - #define TIMER_DIFF(a, b, max) ((a) >= (b) ? (a) - (b) : (max) - (b) + (a)) #define TIMER_DIFF_8(a, b) TIMER_DIFF(a, b, UINT8_MAX) #define TIMER_DIFF_16(a, b) TIMER_DIFF(a, b, UINT16_MAX) diff --git a/keyboard/mbed_onekey/common.mk b/keyboard/mbed_onekey/common.mk index f21fce8864..975ae9d0da 100644 --- a/keyboard/mbed_onekey/common.mk +++ b/keyboard/mbed_onekey/common.mk @@ -1,19 +1,20 @@ COMMON_DIR = common OBJECTS += \ -# $(COMMON_DIR)/host.o \ -# $(COMMON_DIR)/keyboard.o \ -# $(COMMON_DIR)/action.o \ -# $(COMMON_DIR)/action_tapping.o \ -# $(COMMON_DIR)/action_macro.o \ -# $(COMMON_DIR)/action_layer.o \ -# $(COMMON_DIR)/action_util.o \ -# $(COMMON_DIR)/keymap.o \ -# $(COMMON_DIR)/timer.o \ - $(COMMON_DIR)/print.o \ -# $(COMMON_DIR)/bootloader.o \ -# $(COMMON_DIR)/suspend.o \ - $(COMMON_DIR)/xprintf.o \ - $(COMMON_DIR)/util.o + $(OBJDIR)/$(COMMON_DIR)/mbed/timer.o \ INCLUDE_PATHS += \ -I$(TMK_DIR)/$(COMMON_DIR) + + + + +# $(OBJDIR)/$(COMMON_DIR)/host.o \ +# $(OBJDIR)/$(COMMON_DIR)/keyboard.o \ +# $(OBJDIR)/$(COMMON_DIR)/action.o \ +# $(OBJDIR)/$(COMMON_DIR)/action_tapping.o \ +# $(OBJDIR)/$(COMMON_DIR)/action_macro.o \ +# $(OBJDIR)/$(COMMON_DIR)/action_layer.o \ +# $(OBJDIR)/$(COMMON_DIR)/action_util.o \ +# $(OBJDIR)/$(COMMON_DIR)/keymap.o \ +# $(OBJDIR)/$(COMMON_DIR)/bootloader.o \ +# $(OBJDIR)/$(COMMON_DIR)/suspend.o \ diff --git a/keyboard/mbed_onekey/main.cpp b/keyboard/mbed_onekey/main.cpp index 581534e025..1df940aa97 100644 --- a/keyboard/mbed_onekey/main.cpp +++ b/keyboard/mbed_onekey/main.cpp @@ -1,6 +1,7 @@ #include "mbed.h"
#include "HIDKeyboard.h"
#include "debug.h"
+#include "timer.h"
/*
//#define DEBUG
@@ -27,11 +28,16 @@ int main(void) { //led_red = 0;
//led_green = 0;
debug_enable = true;
- dprintf("HIDKeyboard:\n");
- print("aaa");
+ dprintf("HIDKeyboard:\r\n");
+
+ timer_init();
+ xprintf("timer: %i\r\n", timer_read());
report_keyboard_t report = { 2, 0, 4, }; //a
report_keyboard_t report_off = { 0 };
+
+ bool last_isp = isp;
+ uint32_t last_timer;
while (1) {
//keyboard.mediaControl(KEY_VOLUME_DOWN);
//keyboard.printf("Hello World from Mbed\r\n");
@@ -42,14 +48,19 @@ int main(void) { //leds = keyboard.lockStatus();
//ser.putc(ser.getc());
+ if (last_isp == isp) continue;
if (isp == 0) {
led_red = 0; // on
- keyboard.sendReport(report);
+ xprintf("timer: %i\r\n", timer_read32());
+ xprintf("diff: %i\r\n", timer_elapsed32(last_timer));
+ //keyboard.sendReport(report);
} else {
led_red = 1; // off
- keyboard.sendReport(report_off);
+ //keyboard.sendReport(report_off);
}
- led_green = !led_green;
+ last_isp = isp;
+ last_timer = timer_read();
+ //led_green = !led_green;
//wait(0.5);
}
}
|