@@ -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 \ |
@@ -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" | |||
@@ -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); | |||
} |
@@ -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) |
@@ -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 \ |
@@ -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); | |||
} | |||
} |