
4 changed files with 55 additions and 3 deletions
@ -1 +1 @@
@@ -1 +1 @@
|
||||
OBJS=main.o usb.o usbpad.o mappings.o gcn64_protocol.o n64.o gamecube.o usart1.o bootloader.o eeprom.o config.o hiddata.o usbstrings.o |
||||
OBJS=main.o usb.o usbpad.o mappings.o gcn64_protocol.o n64.o gamecube.o usart1.o bootloader.o eeprom.o config.o hiddata.o usbstrings.o intervaltimer.o |
||||
|
@ -0,0 +1,39 @@
@@ -0,0 +1,39 @@
|
||||
#include <avr/io.h> |
||||
#include "intervaltimer.h" |
||||
|
||||
|
||||
void intervaltimer_init(void) |
||||
{ |
||||
TCCR1A = 0; |
||||
TCCR1B = (1<<WGM12) | (1<<CS12) | (1<<CS00); // CTC, /1024 prescaler
|
||||
} |
||||
|
||||
void intervaltimer_set(int interval_ms) |
||||
{ |
||||
static int cur_interval = 0; |
||||
|
||||
// We are setting TCNT back to zero, and updating
|
||||
// the compare match register.
|
||||
//
|
||||
// To allows for simple repeated calling of this
|
||||
// function from the main loop, only touch
|
||||
// the counter when the interval changes.
|
||||
if (cur_interval != interval_ms) { |
||||
cur_interval = interval_ms; |
||||
|
||||
TCNT1 = 0; |
||||
OCR1A = interval_ms * (F_CPU/1024) / 1000; |
||||
} |
||||
} |
||||
|
||||
char intervaltimer_get(void) |
||||
{ |
||||
char a; |
||||
|
||||
if (TIFR1 & (1<<OCF1A)) { |
||||
TIFR1 = 1<<OCF1A; |
||||
return 1; |
||||
} |
||||
|
||||
return 0; |
||||
} |
@ -0,0 +1,9 @@
@@ -0,0 +1,9 @@
|
||||
#ifndef _interval_timer_h__ |
||||
#define _interval_timer_h__ |
||||
|
||||
void intervaltimer_init(void); |
||||
void intervaltimer_set(int interval_ms); |
||||
char intervaltimer_get(void); |
||||
|
||||
#endif // _interval_timer_h__
|
||||
|
Loading…
Reference in new issue