aboutsummaryrefslogtreecommitdiff
path: root/amforth-6.5/avr8/lib/hardware/timer2.frt
blob: ed0472f4c01bc6b774ddfce5cb61f072510577fb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
\ TIMER_2 example
\ uses an external 32kHz clock quartz
\ 32kHz / 256 => 128 ticks per second
\   7.8125 ms per tick (gets approximated)
\ --> less accurate than the other timers, but...
\
\ 16 ticks are 125ms
\    125 = 15*8+5: 15x 8-tock and a short step
\ or 125 = 15*7+20:15x 7-tock and a huge step 
\ -> we choose the 1st variant
\ provides
\  timer2.tick      -- increasing ticker
\ 

variable timer2.tick
variable timer2.tock \ used internally 

: timer2.isr ( -- )
  timer2.tock @ 1+ 15 = if
    0 timer2.tock !
    5 timer2.tick +!
  else
    8 timer2.tick +!
    1 timer2.tock +!
  then
;

: timer2.init ( -- )
    1 TCCR2 c!
    8 ASSR  c!
    ['] timer2.isr TIMER2_OVFAddr int!
;

: timer2.start
    0 timer2.tick !
    0 timer2.tock !
    TIMSK c@ $40 or TIMSK c! ( enable timer2 interupt )
;

: timer2.stop
   TIMSK c@ [ $40 invert ] literal and TIMSK c! \ stop timer2 interrupt
;