diff --git a/common.mk b/common.mk index 62ac0ff7..9d58fa21 100644 --- a/common.mk +++ b/common.mk @@ -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 similarity index 98% rename from common/timer.c rename to common/avr/timer.c index e0dec6ce..292b41c3 100644 --- a/common/timer.c +++ b/common/avr/timer.c @@ -18,6 +18,7 @@ along with this program. If not, see . #include #include #include +#include "timer_avr.h" #include "timer.h" diff --git a/common/mbed/timer.c b/common/mbed/timer.c new file mode 100644 index 00000000..a64a7723 --- /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 6437473f..f0c5ffc9 100644 --- a/common/timer.h +++ b/common/timer.h @@ -20,25 +20,6 @@ along with this program. If not, see . #include -#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 f21fce88..975ae9d0 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 581534e0..1df940aa 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); } }