aboutsummaryrefslogtreecommitdiff
path: root/amforth-6.5/avr8/lib/hardware/timer0.frt
blob: 29670e66da7c34b8aa0818a659e6241dd3da4043 (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
43
\ TIMER_0 example
\
\ requires
\  in application master file
\    .set WANT_TIMER_COUNTER_0 = 1
\  from device.frt
\    TIMER0_OVFAddr
\ provides
\  timer0.tick      -- increasing ticker
\ 
\ older mcu's may need
TCCR0 constant TCCR0B
TIMSK constant TIMSK0

variable timer0.tick

: timer0.isr
  1 timer0.tick +!
;

\ preload for overflow interrupt every 1ms
\ preload = 256 - (f_cpu / (prescaler * 1000))

: timer0.preload
   f_cpu #1000 um/mod nip 64 / 256 - negate 
;

: timer0.init ( -- )
    timer0.preload TCNT0 c!
    0 timer0.tick !
    ['] timer0.isr TIMER0_OVFAddr int!
;

: timer0.start
    timer0.init
    %00000011 TCCR0B c! \ prescaler 64
    %00000001 TIMSK0 c! \ enable overflow interrupt
;

: timer0.stop
   %00000000 TCCR0B c! \ stop timer
   %00000000 TIMSK0 c! \ stop interrupt
;