forked from mirrors/qmk_userspace
improve layer switching
This commit is contained in:
parent
6c3b9a2ded
commit
45d4a7a898
21 changed files with 290 additions and 229 deletions
61
timer.c
Normal file
61
timer.c
Normal file
|
@ -0,0 +1,61 @@
|
|||
#include <avr/io.h>
|
||||
#include <avr/interrupt.h>
|
||||
#include <stdint.h>
|
||||
#include "timer.h"
|
||||
|
||||
uint16_t timer_count = 0;
|
||||
|
||||
// Configure timer 0 to generate a timer overflow interrupt every
|
||||
// 256*1024 clock cycles, or approx 61 Hz when using 16 MHz clock
|
||||
// This demonstrates how to use interrupts to implement a simple
|
||||
// inactivity timeout.
|
||||
void timer_init(void)
|
||||
{
|
||||
TCCR0A = 0x00;
|
||||
TCCR0B = 0x05;
|
||||
TIMSK0 = (1<<TOIE0);
|
||||
}
|
||||
|
||||
inline
|
||||
void timer_clear(void)
|
||||
{
|
||||
cli();
|
||||
timer_count = 0;
|
||||
sei();
|
||||
}
|
||||
|
||||
inline
|
||||
uint16_t timer_read(void)
|
||||
{
|
||||
uint8_t _sreg = SREG;
|
||||
uint16_t t;
|
||||
|
||||
cli();
|
||||
t = timer_count;
|
||||
SREG = _sreg;
|
||||
|
||||
return t;
|
||||
}
|
||||
|
||||
inline
|
||||
uint16_t timer_elapsed(uint16_t last)
|
||||
{
|
||||
uint8_t _sreg = SREG;
|
||||
uint16_t t;
|
||||
|
||||
cli();
|
||||
t = timer_count;
|
||||
SREG = _sreg;
|
||||
|
||||
return TIMER_DIFF(t, last);
|
||||
}
|
||||
|
||||
// This interrupt routine is run approx 61 times per second.
|
||||
// A very simple inactivity timeout is implemented, where we
|
||||
// will send a space character and print a message to the
|
||||
// hid_listen debug message window.
|
||||
ISR(TIMER0_OVF_vect)
|
||||
{
|
||||
timer_count++;
|
||||
}
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue