~ruther/qmk_firmware

867f115bee190515aa195dc3e58f1c381ea9695b — tmk 11 years ago f15b269
Port timer to mbed
M common.mk => common.mk +1 -1
@@ 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 \

R common/timer.c => common/avr/timer.c +1 -0
@@ 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"



A common/mbed/timer.c => common/mbed/timer.c +40 -0
@@ 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);
}

M common/timer.h => common/timer.h +0 -19
@@ 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)

M keyboard/mbed_onekey/common.mk => keyboard/mbed_onekey/common.mk +15 -14
@@ 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 \

M keyboard/mbed_onekey/main.cpp => keyboard/mbed_onekey/main.cpp +16 -5
@@ 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);
    }
}