$(COMMON_DIR)/action_layer.c \ | $(COMMON_DIR)/action_layer.c \ | ||||
$(COMMON_DIR)/action_util.c \ | $(COMMON_DIR)/action_util.c \ | ||||
$(COMMON_DIR)/keymap.c \ | $(COMMON_DIR)/keymap.c \ | ||||
$(COMMON_DIR)/timer.c \ | |||||
$(COMMON_DIR)/avr/timer.c \ | |||||
$(COMMON_DIR)/print.c \ | $(COMMON_DIR)/print.c \ | ||||
$(COMMON_DIR)/bootloader.c \ | $(COMMON_DIR)/bootloader.c \ | ||||
$(COMMON_DIR)/suspend.c \ | $(COMMON_DIR)/suspend.c \ |
#include <avr/io.h> | #include <avr/io.h> | ||||
#include <avr/interrupt.h> | #include <avr/interrupt.h> | ||||
#include <stdint.h> | #include <stdint.h> | ||||
#include "timer_avr.h" | |||||
#include "timer.h" | #include "timer.h" | ||||
#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); | |||||
} |
#include <stdint.h> | #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(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_8(a, b) TIMER_DIFF(a, b, UINT8_MAX) | ||||
#define TIMER_DIFF_16(a, b) TIMER_DIFF(a, b, UINT16_MAX) | #define TIMER_DIFF_16(a, b) TIMER_DIFF(a, b, UINT16_MAX) |
COMMON_DIR = common | COMMON_DIR = common | ||||
OBJECTS += \ | 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 += \ | INCLUDE_PATHS += \ | ||||
-I$(TMK_DIR)/$(COMMON_DIR) | -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 \ |
#include "mbed.h" | #include "mbed.h" | ||||
#include "HIDKeyboard.h" | #include "HIDKeyboard.h" | ||||
#include "debug.h" | #include "debug.h" | ||||
#include "timer.h" | |||||
/* | /* | ||||
//#define DEBUG | //#define DEBUG | ||||
//led_red = 0; | //led_red = 0; | ||||
//led_green = 0; | //led_green = 0; | ||||
debug_enable = true; | 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 = { 2, 0, 4, }; //a | ||||
report_keyboard_t report_off = { 0 }; | report_keyboard_t report_off = { 0 }; | ||||
bool last_isp = isp; | |||||
uint32_t last_timer; | |||||
while (1) { | while (1) { | ||||
//keyboard.mediaControl(KEY_VOLUME_DOWN); | //keyboard.mediaControl(KEY_VOLUME_DOWN); | ||||
//keyboard.printf("Hello World from Mbed\r\n"); | //keyboard.printf("Hello World from Mbed\r\n"); | ||||
//leds = keyboard.lockStatus(); | //leds = keyboard.lockStatus(); | ||||
//ser.putc(ser.getc()); | //ser.putc(ser.getc()); | ||||
if (last_isp == isp) continue; | |||||
if (isp == 0) { | if (isp == 0) { | ||||
led_red = 0; // on | 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 { | } else { | ||||
led_red = 1; // off | 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); | //wait(0.5); | ||||
} | } | ||||
} | } |