aboutsummaryrefslogtreecommitdiff
path: root/amforth-6.5/avr8/lib/hardware/timer0.frt
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2017-08-19 12:15:28 +0200
committerDimitri Sokolyuk <demon@dim13.org>2017-08-19 12:15:28 +0200
commit67d25d837ac55f28a366c0a3b262e439a6e75fc3 (patch)
treedf7715c7724c5935ab87c807f3b8b4ef529315e3 /amforth-6.5/avr8/lib/hardware/timer0.frt
parente0d6784e89dba33226c0edb815bb974486fa7c48 (diff)
Add AmForth
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
+;