Calculate timer values
This commit is contained in:
parent
d1e3e5be08
commit
1216082a4f
15
ispprog.c
15
ispprog.c
@ -28,6 +28,12 @@
|
||||
#include "target.h"
|
||||
#include "uart.h"
|
||||
|
||||
#define TIMER_IRQFREQ_MS 10
|
||||
|
||||
/* convert milliseconds to timer ticks */
|
||||
#define TIMER_MSEC2TICKS(x) ((x * F_CPU) / (TIMER_DIVISOR * 1000ULL))
|
||||
#define TIMER_MSEC2IRQCNT(x) (x / TIMER_IRQFREQ_MS)
|
||||
|
||||
#define EV_NONE 0x00
|
||||
#define EV_STATE_ENTER 0x01
|
||||
#define EV_BUTTON_PRESSED 0x02
|
||||
@ -95,7 +101,8 @@ static void reset_statemachine(uint8_t events)
|
||||
/* remove all events */
|
||||
events = EV_NONE;
|
||||
|
||||
timer = 0; /* stop timer */
|
||||
/* stop timer */
|
||||
timer = TIMER_MSEC2IRQCNT(0);
|
||||
|
||||
spi_init(0);
|
||||
|
||||
@ -122,7 +129,7 @@ static void reset_statemachine(uint8_t events)
|
||||
{
|
||||
events &= ~(EV_STATE_ENTER);
|
||||
|
||||
timer = 1; /* timeout 10ms */
|
||||
timer = TIMER_MSEC2IRQCNT(10);
|
||||
|
||||
/* put device in ISP mode */
|
||||
RESET_ACTIVE();
|
||||
@ -153,7 +160,7 @@ static void reset_statemachine(uint8_t events)
|
||||
{
|
||||
events &= ~(EV_STATE_ENTER);
|
||||
|
||||
timer = 5; /* timeout 50ms */
|
||||
timer = TIMER_MSEC2IRQCNT(50);
|
||||
|
||||
/* put device in RUN mode */
|
||||
RESET_INACTIVE();
|
||||
@ -598,7 +605,7 @@ static void cmdloop(void)
|
||||
ISR(TIMER0_OVF_vect)
|
||||
{
|
||||
/* restart timer */
|
||||
TCNT0 = TIMER_RELOAD;
|
||||
TCNT0 = 0xFF - TIMER_MSEC2TICKS(TIMER_IRQFREQ_MS);
|
||||
|
||||
static uint8_t prev_pressed;
|
||||
if (ISP_CHECK())
|
||||
|
8
target.h
8
target.h
@ -8,9 +8,8 @@
|
||||
* Fuse H: 0xDA (512 words bootloader, jtag disabled)
|
||||
* Fuse L: 0xFF (ext. Crystal)
|
||||
*/
|
||||
#define F_CPU 7372800
|
||||
#define F_CPU 7372800ULL
|
||||
#define BAUDRATE 115200
|
||||
#define TIMER_RELOAD (0xFF - 72) /* 10ms @7.3728MHz */
|
||||
|
||||
#define ISP_RESET PORTB1 /* to target */
|
||||
#define ISP_LED PORTB3 /* low active */
|
||||
@ -36,6 +35,7 @@
|
||||
|
||||
#define USE_DISPLAY 0
|
||||
|
||||
#define TIMER_DIVISOR 1024
|
||||
#define TIMER_INIT() { /* timer0, FCPU/1024, overflow interrupt */ \
|
||||
TCCR0 = (1<<CS02) | (1<<CS00); \
|
||||
TIMSK = (1<<TOIE0); \
|
||||
@ -54,9 +54,8 @@
|
||||
* Fuse H: 0xDC (512 words bootloader)
|
||||
* Fuse L: 0xE2 (internal osc)
|
||||
*/
|
||||
#define F_CPU 8000000
|
||||
#define F_CPU 8000000ULL
|
||||
#define BAUDRATE 115200
|
||||
#define TIMER_RELOAD (0xFF - 78) /* 10ms @8MHz */
|
||||
|
||||
/* trim internal oscillator to get "good" baudrate */
|
||||
#define OSCCAL_VALUE 0x80
|
||||
@ -96,6 +95,7 @@
|
||||
#define DISP_D5 PORTD6
|
||||
#define DISP_D6 PORTD7
|
||||
|
||||
#define TIMER_DIVISOR 1024
|
||||
#define TIMER_INIT() { /* timer0, FCPU/1024, overflow interrupt */ \
|
||||
TCCR0B = (1<<CS02) | (1<<CS00); \
|
||||
TIMSK0 = (1<<TOIE0); \
|
||||
|
Loading…
Reference in New Issue
Block a user