> Message: 1
> Date: Sat, 12 Oct 2013 12:05:53 +0100
>From: David Wallis <inshallah...@gmail.com>
> Subject: Re: [Amforth] Watchdog prescalers
> To: amforth-devel@lists.sourceforge.net
> 
> ...
> ... I was keen to use the 
>watchdog timer because it
> works with the lowest power mode (power down) and 
>doesn't need external
> components.
> ...
> 
> David
> 


Hello, David.
I have Freaduino Pro Mini ( atmega328p @16MHz)
http://www.hwkitchen.com/products/freaduino-pro-328-5v-16mhz/
I used WatchDog Timer as 1s Interval timer with this code

\
\ WDTON Fuse  unprogrammed

   marker =wdt-timeouts=

\ Watchdog Timer Control Register bits:
\ WDIF WDIE WDP3 WDCE WDE WDP2 WDP1 WDP0

\ am4th51 constants:
\ WDTCSR_WDE WDTCSR_WDCE WDTCSR_WDP WDTCSR_WDIE 
WDTCSR_WDIF WDTCSR

   WDTCSR WDTCSR_WDIF  bitmask: wdt.if
   WDTCSR WDTCSR_WDIE  bitmask: wdt.ie
   WDTCSR WDTCSR_WDCE  bitmask: wdt.ce
   WDTCSR WDTCSR_WDE   bitmask: wdt.e
   WDTCSR WDTCSR_WDP   bitmask: wdt.psc

\
\
     also assembler

   code wdtcsr! ( # --- )

     R16 SREG     lds, cli,
     R25 WDTCSR        lds,
     R25 WDTCSR_WDCE
         WDTCSR_WDE or ori,
     WDTCSR     R25    sts,
     WDTCSR     R24    sts,

        R24     Y+      ld,   \ poptos
        R25     Y+      ld,
     SREG       R16    sts,
   end-code

     previous

\
\ Watchdog Timer Prescale Select
\
\ WDTCSR_WDP bits mask

   $0 constant 1/64s
   $1 constant 1/32s
   $2 constant 1/16s
   $3 constant 1/8s
   $4 constant 1/4s
   $5 constant 1/2s
   $6 constant 1s
   $7 constant 2s
   $8 constant 4s
   $9 constant 8s

   : wdt=prescaler!  ( n -- )

      8s over < if  .x abort" illegal"  then
      dup 2 lshift $20 ( wdp3 ) and or
      wdt.psc drop and
      wdtcsr!
      ;
\
\  mode              action
\  wdt-stop          none
\  wdt-interrupt     interrupt
\  wdt-reset         system reset

   : wdt!interrupt wdt.ie high ;
   : wdt!reset     wdt.e c@ or wdtcsr! ;
   : wdt!stop
        wdt.e wdt.ie
        drop rot or invert swap c@ and wdtcsr! ;

\
\

   variable TimeOuts
   variable StopWatch

   : 0TimeOuts! 0 TimeOuts ! ;

   : 0StopWatch! 0 StopWatch ! ;

\
\ waiting for downcounter
\
   : time?out   begin pause TimeOuts @ 0= until ;

\
\ variable decrement
\
   : ?--!      ( a --- )
        dup @
       ?dup if 1- swap !
          else drop
          then
        ;

\
\   wdt interrupt service routine
\
   : tick-tack
        wdt.if   high   \ очень жаль тактов...
        TimeOuts ?--!
        ;
\
\
   : interval  ( n --- )
       TimeOuts !
       wdt!interrupt
       time?out
       wdt!stop
      ;

\
\ -----------------------------------------------
\ wdt info

   : ?wdt. WDTCSR c@ ." wdt control&status = " .x cr ;

\



------------------------------------------------------------------------------
October Webinars: Code for Performance
Free Intel webinars can help you accelerate application performance.
Explore tips for MPI, OpenMP, advanced profiling, and more. Get the most from 
the latest Intel processors and coprocessors. See abstracts and register >
http://pubads.g.doubleclick.net/gampad/clk?id=60134071&iu=/4140/ostg.clktrk
_______________________________________________
Amforth-devel mailing list for http://amforth.sf.net/
Amforth-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/amforth-devel

Reply via email to