⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 atm128capturec.nc

📁 tinyos-2.x.rar
💻 NC
字号:
/*
 *  Copyright (c) 2004-2005 Crossbow Technology, Inc.
 *  All rights reserved.
 *
 *  Permission to use, copy, modify, and distribute this software and its
 *  documentation for any purpose, without fee, and without written
 *  agreement is hereby granted, provided that the above copyright
 *  notice, the (updated) modification history and the author appear in
 *  all copies of this source code.
 *
 *  Permission is also granted to distribute this software under the
 *  standard BSD license as contained in the TinyOS distribution.
 *
 *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
 *  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
 *  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 *  ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS 
 *  BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 
 *  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, LOSS OF USE, DATA, 
 *  OR PROFITS) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
 *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
 *  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 
 *  THE POSSIBILITY OF SUCH DAMAGE.
 *
 *  $Id: Atm128CaptureC.nc,v 1.4 2006/12/12 18:23:04 vlahan Exp $
 */

/**
 * Exposes Capture capability of hardware as general interface, 
 * with some ATmega128 specific dependencies including:
 *     Only available with the two 16-bit timers.
 *     Each Timer has only one dedicated capture pin.
 *         Timer1 == PortD.Pin4 [D4]
 *         Timer3 == PortE.Pin7 [E7]
 * So selection of 16-bit timer gives implicit wiring of actual Pin to capture.
 *
 *  @author Alan Broad, Crossbow <abroad@xbow.com>
 *  @author Matt Miller, Crossbow <mmiller@xbow.com>
 *  @author Martin Turon, Crossbow <mturon@xbow.com>
 */
generic module Atm128CaptureC () 
{
  provides {
    interface Capture as CapturePin;
  }
  uses {
    interface HplAtm128Capture<uint16_t>;
    // interface HplAtm128Timer<uint16_t> as Timer;
    // interface GeneralIO as PinToCapture;       // implicit to timer used
  }
}
implementation
{
  // ************* CapturePin Interrupt handlers and dispatch *************

  /**
   *  CapturePin.enableCapture
   *
   * Configure Atmega128 TIMER to capture edge input of CapturePin signal.
   * This will cause an interrupt and save TIMER count.
   * TIMER Timebase is set by stdControl.start
   *  -- see HplAtm128Capture interface and HplAtm128TimerM implementation
   */
  async command error_t CapturePin.enableCapture(bool low_to_high) {
    atomic {
      call HplAtm128Capture.stop();  // clear any capture interrupt
      call HplAtm128Capture.setEdge(low_to_high);
      call HplAtm128Capture.reset();
      call HplAtm128Capture.start();
    }
    return SUCCESS;
  }
    
  async command error_t CapturePin.disable() {
    call HplAtm128Capture.stop();
    return SUCCESS;
  }
    
  /**
   * Handle signal from HplAtm128Capture interface indicating an external 
   * event has been timestamped. 
   * Signal client with time and disable capture timer if nolonger needed.
   */
  async event void HplAtm128Capture.captured(uint16_t time) {
    // first, signal client
    error_t val = signal CapturePin.captured(time);     

    if (val == FAIL) {
      // if client returns failure, stop time capture
      call HplAtm128Capture.stop();
    } else { 
      // otherwise, time capture keeps running, reset if needed
      if (call HplAtm128Capture.test()) 
	call HplAtm128Capture.reset();
    }         
  }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -