aboutsummaryrefslogtreecommitdiff
path: root/amforth-6.5/avr8/lib/hardware/timer0.frt
diff options
context:
space:
mode:
Diffstat (limited to 'amforth-6.5/avr8/lib/hardware/timer0.frt')
-rw-r--r--amforth-6.5/avr8/lib/hardware/timer0.frt43
1 files changed, 43 insertions, 0 deletions
diff --git a/amforth-6.5/avr8/lib/hardware/timer0.frt b/amforth-6.5/avr8/lib/hardware/timer0.frt
new file mode 100644
index 0000000..29670e6
--- /dev/null
+++ b/amforth-6.5/avr8/lib/hardware/timer0.frt
@@ -0,0 +1,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
+;