📄 atm128capturec.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 + -