From 67d25d837ac55f28a366c0a3b262e439a6e75fc3 Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Sat, 19 Aug 2017 12:15:28 +0200 Subject: Add AmForth --- amforth-6.5/common/lib/hardware/timer.frt | 56 +++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 amforth-6.5/common/lib/hardware/timer.frt (limited to 'amforth-6.5/common/lib/hardware/timer.frt') diff --git a/amforth-6.5/common/lib/hardware/timer.frt b/amforth-6.5/common/lib/hardware/timer.frt new file mode 100644 index 0000000..5e73b6e --- /dev/null +++ b/amforth-6.5/common/lib/hardware/timer.frt @@ -0,0 +1,56 @@ +\ generic timer routines, based +\ upon hardware modules. + +\ requires +\ timer0.frt OR timer1.frt +\ provides +\ expired? -- checks whether a counter has expired +\ elapsed -- get the elapsed time in ms +\ after -- execute a word after n ms after now +\ ms -- alternative implementation for ANS94 ms +\ every -- runs a word every cycle. the word provides an exit flag +\ every-second -- runs a word every second +\ +: @tick + timer0.tick @ + \ timer1.tick @ + \ timer2.tick @ +; + +\ a timer is generally a timer tick number. +\ the actual meaning is either the start time +\ or the desired end time. All math is done +\ using unsigned numbers. The maximum interval +\ is 65.535 seconds (little more then a minute) + +\ check if the the timer t has expired +: expired? ( t -- flag ) + pause @tick - 0> invert +; + +\ alternative implementation for ms +: ms @tick + begin dup expired? until drop ; + +\ get the elapsed time since t +: elapsed ( t -- n ) + @tick swap - +; + +\ execute the word after u milliseconds +\ ex: ' foo 10 after +: after ( xt u -- ) + ms execute +; + +\ execute a word every u ms. The word +\ has the stack effect ( -- f). If f is +\ false, the loop ends +: every ( xt u -- ) + begin over over after until drop drop +; + +\ +: every-second ( xt -- ) + 1000 every +; + -- cgit v1.2.3