Port timer to mbed
This commit is contained in:
		
							parent
							
								
									f15b2691c9
								
							
						
					
					
						commit
						867f115bee
					
				@ -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"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										40
									
								
								common/mbed/timer.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								common/mbed/timer.c
									
									
									
									
									
										Normal file
									
								
							@ -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);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user