[Tinyos-2-commits] CVS: tinyos-2.x/doc/html tep102.html, 1.1.2.6, 1.1.2.7

David Gay idgay at users.sourceforge.net
Thu Jun 15 17:26:02 PDT 2006


Update of /cvsroot/tinyos/tinyos-2.x/doc/html
In directory sc8-pr-cvs10.sourceforge.net:/tmp/cvs-serv23910/html

Modified Files:
      Tag: tinyos-2_0_devel-BRANCH
	tep102.html 
Log Message:
update for current mica family implementation


Index: tep102.html
===================================================================
RCS file: /cvsroot/tinyos/tinyos-2.x/doc/html/Attic/tep102.html,v
retrieving revision 1.1.2.6
retrieving revision 1.1.2.7
diff -C2 -d -r1.1.2.6 -r1.1.2.7
*** tep102.html	9 Jun 2006 21:12:17 -0000	1.1.2.6
--- tep102.html	16 Jun 2006 00:25:58 -0000	1.1.2.7
***************
*** 4,8 ****
  <head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
! <meta name="generator" content="Docutils 0.4: http://docutils.sourceforge.net/" />
  <title>Timers</title>
  <meta name="author" content="Cory Sharp, Martin Turon, David Gay" />
--- 4,8 ----
  <head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
! <meta name="generator" content="Docutils 0.3.9: http://docutils.sourceforge.net/" />
  <title>Timers</title>
  <meta name="author" content="Cory Sharp, Martin Turon, David Gay" />
***************
*** 319,324 ****
  TEP 1.</p>
  </div>
! <div class="section">
! <h1><a id="abstract" name="abstract">Abstract</a></h1>
  <p>This TEP proposes a Timer design that supports common timing
  requirements both in precision and width across common hardware
--- 319,324 ----
  TEP 1.</p>
  </div>
! <div class="section" id="abstract">
! <h1><a name="abstract">Abstract</a></h1>
  <p>This TEP proposes a Timer design that supports common timing
  requirements both in precision and width across common hardware
***************
*** 326,331 ****
  with the three-layer Hardware Abstraction Architecture (HAA).</p>
  </div>
! <div class="section">
! <h1><a id="introduction" name="introduction">1. Introduction</a></h1>
  <p>Most microcontrollers offer a rich timer system, with features like:</p>
  <ul class="simple">
--- 326,331 ----
  with the three-layer Hardware Abstraction Architecture (HAA).</p>
  </div>
! <div class="section" id="introduction">
! <h1><a name="introduction">1. Introduction</a></h1>
  <p>Most microcontrollers offer a rich timer system, with features like:</p>
  <ul class="simple">
***************
*** 341,345 ****
  HAA[_tep2], each microcontroller should expose all this functionality
  via components and interfaces at the HPL and, where appropriate, HAL levels.
! However, two aspects of timers are sufficiently common and important
  that they should be made available in a well-defined way: measuring time,
  and triggering (possibly repeating) events at specific times. The rest
--- 341,345 ----
  HAA[_tep2], each microcontroller should expose all this functionality
  via components and interfaces at the HPL and, where appropriate, HAL levels.
! However, two aspects of timers are sufficiently common and important 
  that they should be made available in a well-defined way: measuring time,
  and triggering (possibly repeating) events at specific times. The rest
***************
*** 350,354 ****
  <li>guidelines on how each microcontroller's HAL SHOULD expose its timer hardware
  in terms of the above interfaces (<a class="reference" href="#hal-guidelines">3. HAL guidelines</a>)</li>
! <li>what components a microcontroller's timer HIL MUST implement
  (<a class="reference" href="#hil-requirements">4. HIL requirements</a>)</li>
  <li>a set of utility components whose use simplifies building the components
--- 350,354 ----
  <li>guidelines on how each microcontroller's HAL SHOULD expose its timer hardware
  in terms of the above interfaces (<a class="reference" href="#hal-guidelines">3. HAL guidelines</a>)</li>
! <li>what components a microcontroller's timer HIL MUST implement 
  (<a class="reference" href="#hil-requirements">4. HIL requirements</a>)</li>
  <li>a set of utility components whose use simplifies building the components
***************
*** 358,368 ****
  timer subsystem implementation.</p>
  </div>
! <div class="section">
! <h1><a id="interfaces" name="interfaces">2. Interfaces</a></h1>
  <p>Before presenting the interfaces (2.2), we start with a general
  discussion of the issues of precision, width and accuracy in
  timer interfaces (2.1).</p>
! <div class="section">
! <h2><a id="precision-width-and-accuracy" name="precision-width-and-accuracy">2.1 Precision, Width and Accuracy.</a></h2>
  <p>Three fundamental properties of timers are <em>precision</em>, <em>width</em> and
  <em>accuracy</em>.</p>
--- 358,368 ----
  timer subsystem implementation.</p>
  </div>
! <div class="section" id="interfaces">
! <h1><a name="interfaces">2. Interfaces</a></h1>
  <p>Before presenting the interfaces (2.2), we start with a general
  discussion of the issues of precision, width and accuracy in
  timer interfaces (2.1).</p>
! <div class="section" id="precision-width-and-accuracy">
! <h2><a name="precision-width-and-accuracy">2.1 Precision, Width and Accuracy.</a></h2>
  <p>Three fundamental properties of timers are <em>precision</em>, <em>width</em> and
  <em>accuracy</em>.</p>
***************
*** 405,410 ****
  period, whichever is convenient.</p>
  </div>
! <div class="section">
! <h2><a id="timer-interfaces" name="timer-interfaces">2.2 Timer interfaces</a></h2>
  <p>This TEP proposes these timer interfaces:</p>
  <pre class="literal-block">
--- 405,410 ----
  period, whichever is convenient.</p>
  </div>
! <div class="section" id="timer-interfaces">
! <h2><a name="timer-interfaces">2.2 Timer interfaces</a></h2>
  <p>This TEP proposes these timer interfaces:</p>
  <pre class="literal-block">
***************
*** 420,426 ****
  advanced user components.</p>
  </div>
! <div class="section">
! <h2><a id="counter" name="counter">Counter</a></h2>
! <p>A Counter component will increase the width of a low-level hardware timer
  by wrapping the overflow event and incrementing its higher order bits.
  These higher order bits are considered extra state over the HPL register
--- 420,426 ----
  advanced user components.</p>
  </div>
! <div class="section" id="counter">
! <h2><a name="counter">Counter</a></h2>
! <p>A Counter component will increase the width of a low-level hardware timer 
  by wrapping the overflow event and incrementing its higher order bits.
  These higher order bits are considered extra state over the HPL register
***************
*** 440,457 ****
  </pre>
  <dl class="docutils">
! <dt>get()</dt>
  <dd>return the current time.</dd>
! <dt>isOverflowPending()</dt>
  <dd>return TRUE if an overflow interrupt will occur after the outermost
  atomic block is exits.  FALSE otherwise.</dd>
! <dt>clearOverflow()</dt>
  <dd>cancel the pending overflow interrupt.</dd>
! <dt>overflow()</dt>
  <dd>signals that an overflow in the current time.  That is, the current
  time has wrapped around from its maximum value to zero.</dd>
  </dl>
  </div>
! <div class="section">
! <h2><a id="alarm" name="alarm">Alarm</a></h2>
  <p>Alarm components are extensions of Counters that signal an event
  when their Compare register detects the alarm time has been hit.
--- 440,457 ----
  </pre>
  <dl class="docutils">
! <dt>get() </dt>
  <dd>return the current time.</dd>
! <dt>isOverflowPending() </dt>
  <dd>return TRUE if an overflow interrupt will occur after the outermost
  atomic block is exits.  FALSE otherwise.</dd>
! <dt>clearOverflow() </dt>
  <dd>cancel the pending overflow interrupt.</dd>
! <dt>overflow() </dt>
  <dd>signals that an overflow in the current time.  That is, the current
  time has wrapped around from its maximum value to zero.</dd>
  </dl>
  </div>
! <div class="section" id="alarm">
! <h2><a name="alarm">Alarm</a></h2>
  <p>Alarm components are extensions of Counters that signal an event
  when their Compare register detects the alarm time has been hit.
***************
*** 476,491 ****
  </pre>
  <dl class="docutils">
! <dt>start(dt)</dt>
  <dd>cancel any previously running alarm and set to fire in dt time units
  from the time of invocation.  The alarm will only fire once then
  stop.</dd>
! <dt>stop()</dt>
  <dd>cancel any previously running alarm.</dd>
! <dt>fired()</dt>
  <dd>signals that the alarm has occurred.</dd>
! <dt>isRunning()</dt>
  <dd>return TRUE if the alarm has been started and has not been cancelled
  or has not yet fired.  FALSE is returned otherwise.</dd>
! <dt>startAt(t0,dt)</dt>
  <dd>cancel any previously running alarm and set to fire at time t1 =
  t0+dt.  This form allows a delay to be anchored to some time t0
--- 476,491 ----
  </pre>
  <dl class="docutils">
! <dt>start(dt) </dt>
  <dd>cancel any previously running alarm and set to fire in dt time units
  from the time of invocation.  The alarm will only fire once then
  stop.</dd>
! <dt>stop() </dt>
  <dd>cancel any previously running alarm.</dd>
! <dt>fired() </dt>
  <dd>signals that the alarm has occurred.</dd>
! <dt>isRunning() </dt>
  <dd>return TRUE if the alarm has been started and has not been cancelled
  or has not yet fired.  FALSE is returned otherwise.</dd>
! <dt>startAt(t0,dt) </dt>
  <dd>cancel any previously running alarm and set to fire at time t1 =
  t0+dt.  This form allows a delay to be anchored to some time t0
***************
*** 494,506 ****
  of an alarm while being able to detect if the alarm time for a short
  alarm prematurely elapsed.</dd>
! <dt>getNow()</dt>
  <dd>return the current time in the precision and width of the alarm.</dd>
! <dt>getAlarm()</dt>
  <dd>return the time the currently running alarm will fire or the time
  that the previously running alarm was set to fire.</dd>
  </dl>
  </div>
! <div class="section">
! <h2><a id="busywait" name="busywait">BusyWait</a></h2>
  <p>The BusyWait interface replaces the TOSH_uwait macro from TinyOS
  1.x.</p>
--- 494,506 ----
  of an alarm while being able to detect if the alarm time for a short
  alarm prematurely elapsed.</dd>
! <dt>getNow() </dt>
  <dd>return the current time in the precision and width of the alarm.</dd>
! <dt>getAlarm() </dt>
  <dd>return the time the currently running alarm will fire or the time
  that the previously running alarm was set to fire.</dd>
  </dl>
  </div>
! <div class="section" id="busywait">
! <h2><a name="busywait">BusyWait</a></h2>
  <p>The BusyWait interface replaces the TOSH_uwait macro from TinyOS
  1.x.</p>
***************
*** 516,521 ****
  </dl>
  </div>
! <div class="section">
! <h2><a id="localtime" name="localtime">LocalTime</a></h2>
  <p>The LocalTime interface exposes a 32-bit counter without overflow
  utilities.  This is primarily for application code that does not
--- 516,521 ----
  </dl>
  </div>
! <div class="section" id="localtime">
! <h2><a name="localtime">LocalTime</a></h2>
  <p>The LocalTime interface exposes a 32-bit counter without overflow
  utilities.  This is primarily for application code that does not
***************
*** 528,537 ****
  </pre>
  <dl class="docutils">
! <dt>get()</dt>
  <dd>return the current time.</dd>
  </dl>
  </div>
! <div class="section">
! <h2><a id="timer" name="timer">Timer</a></h2>
  <p>All commands and events of the Timer interface are synchronous (or
  in &quot;task context&quot;).  The Timer interface provides a set of &quot;basic&quot;
--- 528,537 ----
  </pre>
  <dl class="docutils">
! <dt>get() </dt>
  <dd>return the current time.</dd>
  </dl>
  </div>
! <div class="section" id="timer">
! <h2><a name="timer">Timer</a></h2>
  <p>All commands and events of the Timer interface are synchronous (or
  in &quot;task context&quot;).  The Timer interface provides a set of &quot;basic&quot;
***************
*** 558,599 ****
  </pre>
  <dl class="docutils">
! <dt>startPeriodic(dt)</dt>
  <dd>cancel any previously running timer and set to fire in dt time units
  from the time of invocation.  The timer will fire periodically every
  dt time units until stopped.</dd>
! <dt>startOneShot(dt)</dt>
  <dd>cancel any previously running timer and set to fire in dt time units
  from the time of invocation.  The timer will only fire once then
  stop.</dd>
! <dt>stop()</dt>
  <dd>cancel any previously running timer.</dd>
  <dt>fired()</dt>
  <dd>signals that the timer has occurred.</dd>
! <dt>isRunning()</dt>
  <dd>return TRUE if the timer has been started and has not been cancelled
  and has not fired for the case of one-shot timers.  One a periodic
  timer is started, isRunning will return TRUE until it is cancelled.</dd>
! <dt>isOneShot()</dt>
  <dd>return TRUE if the timer is a one-shot timer.  Return FALSE
  otherwise if the timer is a periodic timer.</dd>
! <dt>startPeriodicAt(t0,dt)</dt>
  <dd>cancel any previously running timer and set to fire at time t1 =
  t0+dt.  The timer will fire periodically every dt time units until
  stopped.</dd>
! <dt>startOneShotAt(t0,dt)</dt>
  <dd>cancel any previously running timer and set to fire at time t1 =
  t0+dt.  The timer will fire once then stop.</dd>
! <dt>getNow()</dt>
  <dd>return the current time in the precision and width of the timer.</dd>
! <dt>gett0()</dt>
  <dd>return the time anchor for the previously started timer or the time
  of the previous event for periodic timers.</dd>
! <dt>getdt()</dt>
  <dd>return the delay or period for the previously started timer.</dd>
  </dl>
  </div>
  </div>
! <div class="section">
! <h1><a id="hal-guidelines" name="hal-guidelines">3. HAL guidelines</a></h1>
  <p>Platforms typically select a clocking option for each of their
  hardware counters, based on their hardware design (e.g., the mica
--- 558,599 ----
  </pre>
  <dl class="docutils">
! <dt>startPeriodic(dt) </dt>
  <dd>cancel any previously running timer and set to fire in dt time units
  from the time of invocation.  The timer will fire periodically every
  dt time units until stopped.</dd>
! <dt>startOneShot(dt) </dt>
  <dd>cancel any previously running timer and set to fire in dt time units
  from the time of invocation.  The timer will only fire once then
  stop.</dd>
! <dt>stop() </dt>
  <dd>cancel any previously running timer.</dd>
  <dt>fired()</dt>
  <dd>signals that the timer has occurred.</dd>
! <dt>isRunning() </dt>
  <dd>return TRUE if the timer has been started and has not been cancelled
  and has not fired for the case of one-shot timers.  One a periodic
  timer is started, isRunning will return TRUE until it is cancelled.</dd>
! <dt>isOneShot() </dt>
  <dd>return TRUE if the timer is a one-shot timer.  Return FALSE
  otherwise if the timer is a periodic timer.</dd>
! <dt>startPeriodicAt(t0,dt) </dt>
  <dd>cancel any previously running timer and set to fire at time t1 =
  t0+dt.  The timer will fire periodically every dt time units until
  stopped.</dd>
! <dt>startOneShotAt(t0,dt) </dt>
  <dd>cancel any previously running timer and set to fire at time t1 =
  t0+dt.  The timer will fire once then stop.</dd>
! <dt>getNow() </dt>
  <dd>return the current time in the precision and width of the timer.</dd>
! <dt>gett0() </dt>
  <dd>return the time anchor for the previously started timer or the time
  of the previous event for periodic timers.</dd>
! <dt>getdt() </dt>
  <dd>return the delay or period for the previously started timer.</dd>
  </dl>
  </div>
  </div>
! <div class="section" id="hal-guidelines">
! <h1><a name="hal-guidelines">3. HAL guidelines</a></h1>
  <p>Platforms typically select a clocking option for each of their
  hardware counters, based on their hardware design (e.g., the mica
***************
*** 608,614 ****
  several components:</p>
  <pre class="literal-block">
! configuration CounterPW {
    provides interface Counter&lt;TP, uintW_t&gt;;
! } ...
  generic configuration AlarmPWC {
    provides interface Alarm&lt;TP,uintW_t&gt;;
--- 608,614 ----
  several components:</p>
  <pre class="literal-block">
! configuration CounterPWC {
    provides interface Counter&lt;TP, uintW_t&gt;;
! } ... 
  generic configuration AlarmPWC {
    provides interface Alarm&lt;TP,uintW_t&gt;;
***************
*** 617,623 ****
  <p>and, except if <em>W</em> is 32:</p>
  <pre class="literal-block">
! configuration CounterP32 {
    provides interface Counter&lt;TP, uint32_t&gt;;
! } ...
  generic configuration AlarmP32C {
    provides interface Alarm&lt;TP,uint32_t&gt;;
--- 617,623 ----
  <p>and, except if <em>W</em> is 32:</p>
  <pre class="literal-block">
! configuration CounterP32C {
    provides interface Counter&lt;TP, uint32_t&gt;;
! } ... 
  generic configuration AlarmP32C {
    provides interface Alarm&lt;TP,uint32_t&gt;;
***************
*** 635,640 ****
  allowed).</p>
  </div>
! <div class="section">
! <h1><a id="hil-requirements" name="hil-requirements">4. HIL requirements</a></h1>
  <dl class="docutils">
  <dt>The following component MUST be provided on all platforms::</dt>
--- 635,640 ----
  allowed).</p>
  </div>
! <div class="section" id="hil-requirements">
! <h1><a name="hil-requirements">4. HIL requirements</a></h1>
  <dl class="docutils">
  <dt>The following component MUST be provided on all platforms::</dt>
***************
*** 642,647 ****
  BusyWaitMicroC</dd>
  </dl>
! <div class="section">
! <h2><a id="timermillic" name="timermillic">TimerMilliC</a></h2>
  <pre class="literal-block">
  #define TIMERMILLIC_SERVICE ...
--- 642,647 ----
  BusyWaitMicroC</dd>
  </dl>
! <div class="section" id="timermillic">
! <h2><a name="timermillic">TimerMilliC</a></h2>
  <pre class="literal-block">
  #define TIMERMILLIC_SERVICE ...
***************
*** 657,662 ****
  parameterised interface.</p>
  </div>
! <div class="section">
! <h2><a id="busywaitmicroc" name="busywaitmicroc">BusyWaitMicroC</a></h2>
  <pre class="literal-block">
  configuration BusyWaitMicroC
--- 657,662 ----
  parameterised interface.</p>
  </div>
! <div class="section" id="busywaitmicroc">
! <h2><a name="busywaitmicroc">BusyWaitMicroC</a></h2>
  <pre class="literal-block">
  configuration BusyWaitMicroC
***************
*** 671,676 ****
  </div>
  </div>
! <div class="section">
! <h1><a id="utility-components" name="utility-components">5. Utility components</a></h1>
  <p>A number of platform independent generic components are provided to
  help implementers and advanced users of the TinyOS timer system:</p>
--- 671,676 ----
  </div>
  </div>
! <div class="section" id="utility-components">
! <h1><a name="utility-components">5. Utility components</a></h1>
  <p>A number of platform independent generic components are provided to
  help implementers and advanced users of the TinyOS timer system:</p>
***************
*** 685,690 ****
  <p>Appendices B and C show how these can be used to help implement
  the timer HAL and HIL.</p>
! <div class="section">
! <h2><a id="alarmtotimerc" name="alarmtotimerc">AlarmToTimerC</a></h2>
  <p>AlarmToTimerC converts a 32-bit Alarm to a Timer.</p>
  <pre class="literal-block">
--- 685,690 ----
  <p>Appendices B and C show how these can be used to help implement
  the timer HAL and HIL.</p>
! <div class="section" id="alarmtotimerc">
! <h2><a name="alarmtotimerc">AlarmToTimerC</a></h2>
  <p>AlarmToTimerC converts a 32-bit Alarm to a Timer.</p>
  <pre class="literal-block">
***************
*** 696,701 ****
  </pre>
  </div>
! <div class="section">
! <h2><a id="busywaitcounterc" name="busywaitcounterc">BusyWaitCounterC</a></h2>
  <p>BusyWaitCounterC uses a Counter to block until a specified amount of
  time elapses.</p>
--- 696,701 ----
  </pre>
  </div>
! <div class="section" id="busywaitcounterc">
! <h2><a name="busywaitcounterc">BusyWaitCounterC</a></h2>
  <p>BusyWaitCounterC uses a Counter to block until a specified amount of
  time elapses.</p>
***************
*** 709,714 ****
  </pre>
  </div>
! <div class="section">
! <h2><a id="countertolocaltimec" name="countertolocaltimec">CounterToLocalTimeC</a></h2>
  <p>CounterToLocalTimeC converts from a 32-bit Counter to LocalTime.</p>
  <pre class="literal-block">
--- 709,714 ----
  </pre>
  </div>
! <div class="section" id="countertolocaltimec">
! <h2><a name="countertolocaltimec">CounterToLocalTimeC</a></h2>
  <p>CounterToLocalTimeC converts from a 32-bit Counter to LocalTime.</p>
  <pre class="literal-block">
***************
*** 720,729 ****
  </pre>
  </div>
! <div class="section">
! <h2><a id="transformalarmc" name="transformalarmc">TransformAlarmC</a></h2>
  <p>TransformAlarmC decreases precision and/or widens an Alarm.  An
  already widened Counter component is used to help.</p>
  <pre class="literal-block">
! generic component TransformAlarmC(
    typedef to_precision_tag,
    typedef to_size_type &#64;integer(),
--- 720,729 ----
  </pre>
  </div>
! <div class="section" id="transformalarmc">
! <h2><a name="transformalarmc">TransformAlarmC</a></h2>
  <p>TransformAlarmC decreases precision and/or widens an Alarm.  An
  already widened Counter component is used to help.</p>
  <pre class="literal-block">
! generic component TransformAlarmC( 
    typedef to_precision_tag,
    typedef to_size_type &#64;integer(),
***************
*** 749,754 ****
  </pre>
  </div>
! <div class="section">
! <h2><a id="transformcounterc" name="transformcounterc">TransformCounterC</a></h2>
  <p>TransformCounterC decreases precision and/or widens a Counter.</p>
  <pre class="literal-block">
--- 749,754 ----
  </pre>
  </div>
! <div class="section" id="transformcounterc">
! <h2><a name="transformcounterc">TransformCounterC</a></h2>
  <p>TransformCounterC decreases precision and/or widens a Counter.</p>
  <pre class="literal-block">
***************
*** 781,786 ****
  </pre>
  </div>
! <div class="section">
! <h2><a id="virtualizetimerc" name="virtualizetimerc">VirtualizeTimerC</a></h2>
  <p>VirtualizeTimerC uses a single Timer to create up to 255 virtual
  timers.</p>
--- 781,786 ----
  </pre>
  </div>
! <div class="section" id="virtualizetimerc">
! <h2><a name="virtualizetimerc">VirtualizeTimerC</a></h2>
  <p>VirtualizeTimerC uses a single Timer to create up to 255 virtual
  timers.</p>
***************
*** 795,800 ****
  </div>
  </div>
! <div class="section">
! <h1><a id="appendix-a-timer-hardware-on-various-microcontrollers" name="appendix-a-timer-hardware-on-various-microcontrollers">Appendix A: Timer hardware on various microcontrollers</a></h1>
  <blockquote>
  <ol class="loweralpha simple">
--- 795,800 ----
  </div>
  </div>
! <div class="section" id="appendix-a-timer-hardware-on-various-microcontrollers">
! <h1><a name="appendix-a-timer-hardware-on-various-microcontrollers">Appendix A: Timer hardware on various microcontrollers</a></h1>
  <blockquote>
  <ol class="loweralpha simple">
***************
*** 872,877 ****
  </blockquote>
  </div>
! <div class="section">
! <h1><a id="appendix-b-a-microcontroller-atmega-128-timer-subsystem" name="appendix-b-a-microcontroller-atmega-128-timer-subsystem">Appendix B: a microcontroller: Atmega 128 timer subsystem</a></h1>
  <p>The Atmega128 exposes its four timers through a common set of interfaces:</p>
  <blockquote>
--- 872,877 ----
  </blockquote>
  </div>
! <div class="section" id="appendix-b-a-microcontroller-atmega-128-timer-subsystem">
! <h1><a name="appendix-b-a-microcontroller-atmega-128-timer-subsystem">Appendix B: a microcontroller: Atmega 128 timer subsystem</a></h1>
  <p>The Atmega128 exposes its four timers through a common set of interfaces:</p>
  <blockquote>
***************
*** 903,907 ****
  
    /// Clock initialization interface
!   async command void    off();                     //&lt;! Turn off the clock
    async command void    setScale( uint8_t scale);  //&lt;! Turn on the clock
    async command uint8_t getScale();                //&lt;! Get prescaler setting
--- 903,907 ----
  
    /// Clock initialization interface
!   async command void    off();                     //&lt;! Turn off the clock 
    async command void    setScale( uint8_t scale);  //&lt;! Turn on the clock
    async command uint8_t getScale();                //&lt;! Get prescaler setting
***************
*** 934,938 ****
    async event void captured(size_type t);  //&lt;! Signalled on capture int
  
!   /// Interrupt flag utilites: Bit level set/clr
    async command void reset();          //&lt;! Clear the capture interrupt flag
    async command void start();          //&lt;! Enable the capture interrupt
--- 934,938 ----
    async event void captured(size_type t);  //&lt;! Signalled on capture int
  
!   /// Interrupt flag utilites: Bit level set/clr  
    async command void reset();          //&lt;! Clear the capture interrupt flag
    async command void start();          //&lt;! Enable the capture interrupt
***************
*** 972,1002 ****
  </pre>
  </div>
! <div class="section">
! <h1><a id="appendix-c-a-mote-mica2-timer-subsystem" name="appendix-c-a-mote-mica2-timer-subsystem">Appendix C: a mote: Mica2 timer subsystem</a></h1>
! <p>The mica2 HAL exposes its four timers as follows:</p>
! <ul class="simple">
! <li>Timer 0: divides the external 32768Hz crystal by 32 to build AlarmMilli8C
  and AlarmMilli32C (see Section 3). As timer 0 has a single compare
  register, these can only be instantiated once.
! Timing accuracy is as good as the external crystal.</li>
! <li>Timer 1: the internal oscillator is divided by 8 to build AlarmMicro16C
! and AlarmMicro32C (see Section 3). 3 compare registers are available.
! The timing accuracy depends on how the mica2 is clocked:<ul>
! <li>internal 8MHz clock: depends on how well the clock is calibrated</li>
  <li>external 7.37MHz crystal: times will be off by ~8.6%</li>
! <li>selecting other clocking options will produce gross inaccuracy</li>
  </ul>
  </li>
! <li>Timer 2, 3: these timers are not currently exposed by the HAL.</li>
  </ul>
! <p>The mica2 HIL components are built as follows:</p>
  <ul class="simple">
  <li>TimerMilliC: built using AlarmMilli32C (consuming its single compare
  register)</li>
  <li>BusyWaitMicroC: implemented using a simple software busy-wait loop which
! waits for 8 cycles per requested microsecond. Accuracy is the same as
! with Timer 1.</li>
  </ul>
! <p>We include here as an example some of the source code for the above components:</p>
  </div>
  </div>
--- 972,1050 ----
  </pre>
  </div>
! <div class="section" id="appendix-c-a-mote-mica-family-timer-subsystem">
! <h1><a name="appendix-c-a-mote-mica-family-timer-subsystem">Appendix C: a mote: Mica family timer subsystem</a></h1>
! <p>Members of the mica family (mica2, mica2dot, micaz) use the Atmega128
! microprocessor and have external crystals at 4 or 7.37MHz. Additionally,
! they can be run from an internal oscillator at 1, 2, 4, or 8 MHz. The
! internal oscillator is less precise, but allows for much faster startup
! from power-down and power-save modes (6 clocks vs 16000 clocks). Finally,
! power consumption is lower at the lower frequencies.</p>
! <p>The mica family members support operation at all these frequencies via
! a <tt class="docutils literal"><span class="pre">MHZ</span></tt> preprocessor symbol, which can be defined to 1, 2, 4, or 8.
! If undefined, it defaults to a platform-dependent value (4 for mica2dot,
! 8 for mica2 and micaz).</p>
! <p>The mica family configures its four timers in part based on the value
! of this MHZ symbol:</p>
! <ul>
! <li><p class="first">Timer 0: divides the external 32768Hz crystal by 32 to build AlarmMilli8C
  and AlarmMilli32C (see Section 3). As timer 0 has a single compare
  register, these can only be instantiated once.
! Timing accuracy is as good as the external crystal.</p>
! </li>
! <li><p class="first">Timer 1: the 16-bit hardware timer 1 is set to run at 1MHz if possible.
! However, the set of dividers for timer 1 is limited to 1, 8,
! 64, 256 and 1024. So, when clocked at 2 or 4MHz, a divider of 1 is
! selected and timer 1 runs at 2 or 4MHz. To reflect this fact, the 
! HAL components exposing timer 1 are named <tt class="docutils literal"><span class="pre">CounterOne16C</span></tt> and
! <tt class="docutils literal"><span class="pre">AlarmOne16C</span></tt> (rather than the <tt class="docutils literal"><span class="pre">CounterMicro16C</span></tt> <tt class="docutils literal"><span class="pre">AlarmMicro16C</span></tt>
! as suggested in Section 3).</p>
! <p>When building the 32-bit counter and 32-bit alarms, the rate of
! timer 1 is adjusted in software to 1MHz. Thus the 32-bit HAL components
! for timer <em>are</em> named <tt class="docutils literal"><span class="pre">CounterMicro32C</span></tt> and <tt class="docutils literal"><span class="pre">AlarmMicro32C</span></tt>.</p>
! <p>Three compare registers are available on timer1, so up to three instances
! of <tt class="docutils literal"><span class="pre">AlarmOne16C</span></tt> and/or <tt class="docutils literal"><span class="pre">AlarmMicro32C</span></tt> can be created. The timing
! accuracy depends on how the mote is clocked:</p>
! <ul class="simple">
! <li>internal clock: depends on how well the clock is calibrated</li>
  <li>external 7.37MHz crystal: times will be off by ~8.6%</li>
! <li>external 4MHz crystal: times will be as accurate as the crystal</li>
  </ul>
  </li>
! <li><p class="first">Timer 2: this timer is not currently exposed by the HAL.</p>
! </li>
! <li><p class="first">Timer 3: the 16-bit hardware timer 3 is set to run at a rate close to
! 32768Hz, if possible. As with timer 1, the limited set of dividers makes
! this impossible at some clock frequencies, so the 16-bit timer 3 HAL
! components are named <tt class="docutils literal"><span class="pre">CounterThree16C</span></tt> and <tt class="docutils literal"><span class="pre">AlarmThree16C</span></tt>. As 
! with timer 1, the rate of timer 3 is adjusted in software when
! building the 32-bit counter and 32-bit alarms, giving components
! <tt class="docutils literal"><span class="pre">Counter32khz32C</span></tt> and <tt class="docutils literal"><span class="pre">Alarm32khz32C</span></tt>. As with timer 1, three compare
! registers, hence up to three instances of <tt class="docutils literal"><span class="pre">Alarm32khz32C</span></tt> and/or
! <tt class="docutils literal"><span class="pre">AlarmThree16C</span></tt> are available.</p>
! <p>At 1, 2, 4 and 8MHz, <tt class="docutils literal"><span class="pre">Counter32khz32C</span></tt> and <tt class="docutils literal"><span class="pre">Alarm32khz32C</span></tt> run
! at 31.25kHz (plus clock rate inaccuracy). At 7.37MHz, they run at
! ~28.8kHz.</p>
! </li>
  </ul>
! <p>When an Atmega128 is in any power-saving mode, hardware timers 1, 2 and
! 3 stop counting. The default Atmega128 power management <em>will</em> enter
! these power-saving modes even when timers 1 and 3 are enabled, so
! time as measured by timers 1 and 3 does <em>not</em> represent real time.
! However, if any alarms are actives on timers 1 and 3, the Atmega128
! power management will not enter power-saving modes.</p>
! <p>The mica family HIL components are built as follows:</p>
  <ul class="simple">
  <li>TimerMilliC: built using AlarmMilli32C (consuming its single compare
  register)</li>
  <li>BusyWaitMicroC: implemented using a simple software busy-wait loop which
! waits for <tt class="docutils literal"><span class="pre">MHZ</span></tt> cycles per requested microsecond. Accuracy is the same as
! Timer 1.</li>
  </ul>
! <p>Finally, the mica family motes measure their clock rate at boot time, based
! on the external 32768Hz crystal. The results of this clock rate measurement
! are made available via the <tt class="docutils literal"><span class="pre">cyclesPerJiffy</span></tt> command of the
! <tt class="docutils literal"><span class="pre">Atm128Calibrate</span></tt> interface of the <tt class="docutils literal"><span class="pre">MeasureClockC</span></tt> component. This
! command reports the number of cycles per 1/32768s. Please see this interface
! definition for other useful commands for more accurate timing.</p>
  </div>
  </div>



More information about the Tinyos-2-commits mailing list