亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? hplatm128timer3p.nc

?? tinyos-2.x.rar
?? NC
字號:
/// $Id: HplAtm128Timer3P.nc,v 1.1 2008/06/12 14:02:16 klueska Exp $

/*
 * 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 following
 * two paragraphs and the author appear in all copies of this software.
 * 
 * IN NO EVENT SHALL CROSSBOW TECHNOLOGY OR ANY OF ITS LICENSORS BE LIABLE TO 
 * ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL 
 * DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
 * IF CROSSBOW OR ITS LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH 
 * DAMAGE. 
 *
 * CROSSBOW TECHNOLOGY AND ITS LICENSORS SPECIFICALLY DISCLAIM ALL WARRANTIES,
 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY 
 * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS 
 * ON AN "AS IS" BASIS, AND NEITHER CROSSBOW NOR ANY LICENSOR HAS ANY 
 * OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR 
 * MODIFICATIONS.
 */

/**
 * Internal componentr of the HPL interface to Atmega128 timer 3.
 *
 * @author Martin Turon <mturon@xbow.com>
 */

#include <Atm128Timer.h>

module HplAtm128Timer3P
{
  provides {
    interface HplAtm128Timer<uint16_t>   as Timer;
    interface HplAtm128TimerCtrl16       as TimerCtrl;
    interface HplAtm128Capture<uint16_t> as Capture;
    interface HplAtm128Compare<uint16_t> as CompareA;
    interface HplAtm128Compare<uint16_t> as CompareB;
    interface HplAtm128Compare<uint16_t> as CompareC;
  }
  uses interface PlatformInterrupt;
}
implementation
{
  //=== Read the current timer value. ===================================
  async command uint16_t Timer.get() { return TCNT3; }

  //=== Set/clear the current timer value. ==============================
  async command void Timer.set(uint16_t t) { TCNT3 = t; }

  //=== Read the current timer scale. ===================================
  async command uint8_t Timer.getScale() { return TCCR3B & 0x7; }

  //=== Turn off the timers. ============================================
  async command void Timer.off() { call Timer.setScale(AVR_CLOCK_OFF); }

  //=== Write a new timer scale. ========================================
  async command void Timer.setScale(uint8_t s)  { 
    Atm128TimerCtrlCapture_t x = call TimerCtrl.getCtrlCapture();
    x.bits.cs = s;
    call TimerCtrl.setCtrlCapture(x);  
  }

  //=== Read the control registers. =====================================
  async command Atm128TimerCtrlCompare_t TimerCtrl.getCtrlCompare() { 
    return *(Atm128TimerCtrlCompare_t*)&TCCR3A; 
  }
  async command Atm128TimerCtrlCapture_t TimerCtrl.getCtrlCapture() { 
    return *(Atm128TimerCtrlCapture_t*)&TCCR3B; 
  }
  async command Atm128TimerCtrlClock_t TimerCtrl.getCtrlClock() { 
    return *(Atm128TimerCtrlClock_t*)&TCCR3C; 
  }


  //=== Control registers utilities. ==================================
  DEFINE_UNION_CAST(TimerCtrlCompare2int, Atm128TimerCtrlCompare_t, uint16_t);
  DEFINE_UNION_CAST(TimerCtrlCapture2int, Atm128TimerCtrlCapture_t, uint16_t);
  DEFINE_UNION_CAST(TimerCtrlClock2int, Atm128TimerCtrlClock_t, uint16_t);

  //=== Write the control registers. ====================================
  async command void TimerCtrl.setCtrlCompare( Atm128_TCCR3A_t x ) { 
    TCCR3A = TimerCtrlCompare2int(x); 
  }
  async command void TimerCtrl.setCtrlCapture( Atm128_TCCR3B_t x ) { 
    TCCR3B = TimerCtrlCapture2int(x); 
  }
  async command void TimerCtrl.setCtrlClock( Atm128_TCCR3C_t x ) { 
    TCCR3C = TimerCtrlClock2int(x); 
  }

  //=== Read the interrupt mask. =====================================
  async command Atm128_ETIMSK_t TimerCtrl.getInterruptMask() { 
    return *(Atm128_ETIMSK_t*)&ETIMSK; 
  }

  //=== Write the interrupt mask. ====================================
  DEFINE_UNION_CAST(TimerMask16_2int, Atm128_ETIMSK_t, uint8_t);

  async command void TimerCtrl.setInterruptMask( Atm128_ETIMSK_t x ) { 
    ETIMSK = TimerMask16_2int(x); 
  }

  //=== Read the interrupt flags. =====================================
  async command Atm128_ETIFR_t TimerCtrl.getInterruptFlag() { 
    return *(Atm128_ETIFR_t*)&ETIFR; 
  }

  //=== Write the interrupt flags. ====================================
  DEFINE_UNION_CAST(TimerFlags16_2int, Atm128_ETIFR_t, uint8_t);

  async command void TimerCtrl.setInterruptFlag( Atm128_ETIFR_t x ) { 
    ETIFR = TimerFlags16_2int(x); 
  }

  //=== Capture 16-bit implementation. ===================================
  async command void Capture.setEdge(bool up) { WRITE_BIT(TCCR3B,ICES3, up); }

  //=== Timer 16-bit implementation. ===================================
  async command void Timer.reset()    { ETIFR = 1 << TOV3; }
  async command void Capture.reset()  { ETIFR = 1 << ICF3; }
  async command void CompareA.reset() { ETIFR = 1 << OCF3A; }
  async command void CompareB.reset() { ETIFR = 1 << OCF3B; }
  async command void CompareC.reset() { ETIFR = 1 << OCF3C; }

  async command void Timer.start()    { SET_BIT(ETIMSK,TOIE3); }
  async command void Capture.start()  { SET_BIT(ETIMSK,TICIE3); }
  async command void CompareA.start() { SET_BIT(ETIMSK,OCIE3A); }
  async command void CompareB.start() { SET_BIT(ETIMSK,OCIE3B); }
  async command void CompareC.start() { SET_BIT(ETIMSK,OCIE3C); }

  async command void Timer.stop()    { CLR_BIT(ETIMSK,TOIE3); }
  async command void Capture.stop()  { CLR_BIT(ETIMSK,TICIE3); }
  async command void CompareA.stop() { CLR_BIT(ETIMSK,OCIE3A); }
  async command void CompareB.stop() { CLR_BIT(ETIMSK,OCIE3B); }
  async command void CompareC.stop() { CLR_BIT(ETIMSK,OCIE3C); }

  async command bool Timer.test() { 
    return (call TimerCtrl.getInterruptFlag()).bits.tov3; 
  }
  async command bool Capture.test()  { 
    return (call TimerCtrl.getInterruptFlag()).bits.icf3; 
  }
  async command bool CompareA.test() { 
    return (call TimerCtrl.getInterruptFlag()).bits.ocf3a; 
  }
  async command bool CompareB.test() { 
    return (call TimerCtrl.getInterruptFlag()).bits.ocf3b; 
  }
  async command bool CompareC.test() { 
    return (call TimerCtrl.getInterruptFlag()).bits.ocf3c; 
  }

  async command bool Timer.isOn() {
    return (call TimerCtrl.getInterruptMask()).bits.toie3;
  }
  async command bool Capture.isOn()  {
    return (call TimerCtrl.getInterruptMask()).bits.ticie3;
  }
  async command bool CompareA.isOn() {
    return (call TimerCtrl.getInterruptMask()).bits.ocie3a;
  }
  async command bool CompareB.isOn() {
    return (call TimerCtrl.getInterruptMask()).bits.ocie3b;
  }
  async command bool CompareC.isOn() {
    return (call TimerCtrl.getInterruptMask()).bits.ocie3c;
  }

  //=== Read the compare registers. =====================================
  async command uint16_t CompareA.get() { return OCR3A; }
  async command uint16_t CompareB.get() { return OCR3B; }
  async command uint16_t CompareC.get() { return OCR3C; }

  //=== Write the compare registers. ====================================
  async command void CompareA.set(uint16_t t) { OCR3A = t; }
  async command void CompareB.set(uint16_t t) { OCR3B = t; }
  async command void CompareC.set(uint16_t t) { OCR3C = t; }

  //=== Read the capture registers. =====================================
  async command uint16_t Capture.get() { return ICR3; }

  //=== Write the capture registers. ====================================
  async command void Capture.set(uint16_t t)  { ICR3 = t; }

  //=== Timer interrupts signals ========================================
  default async event void CompareA.fired() { }
  AVR_NONATOMIC_HANDLER(SIG_OUTPUT_COMPARE3A) {
    signal CompareA.fired();
    call PlatformInterrupt.postAmble();
  }
  default async event void CompareB.fired() { }
  AVR_NONATOMIC_HANDLER(SIG_OUTPUT_COMPARE3B) {
    signal CompareB.fired();
    call PlatformInterrupt.postAmble();
  }
  default async event void CompareC.fired() { }
  AVR_NONATOMIC_HANDLER(SIG_OUTPUT_COMPARE3C) {
    signal CompareC.fired();
    call PlatformInterrupt.postAmble();
  }
  default async event void Capture.captured(uint16_t time) { }
  AVR_NONATOMIC_HANDLER(SIG_INPUT_CAPTURE3) {
    signal Capture.captured(call Timer.get());
    call PlatformInterrupt.postAmble();
  }
  default async event void Timer.overflow() { }
  AVR_NONATOMIC_HANDLER(SIG_OVERFLOW3) {
    signal Timer.overflow();
    call PlatformInterrupt.postAmble();
  }
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲精品一区二区三区香蕉| 一区二区激情视频| 国产精品麻豆久久久| 午夜久久久影院| 91激情在线视频| 中文成人综合网| 韩国欧美国产1区| 欧美日韩国产一级二级| 欧美国产精品一区二区| 久久99久国产精品黄毛片色诱| av动漫一区二区| 久久久亚洲精品石原莉奈| 亚洲aⅴ怡春院| 色婷婷综合久色| 亚洲欧洲一区二区在线播放| 激情五月婷婷综合| 欧美一级久久久| 亚洲成人av电影| 色综合天天综合色综合av| 国产精品丝袜一区| 国产成人综合自拍| 久久这里只有精品首页| 国内精品久久久久影院一蜜桃| 欧美日本在线播放| 亚洲国产一区视频| 精品视频一区二区三区免费| 最新不卡av在线| www.66久久| 亚洲天堂免费在线观看视频| 99久久久无码国产精品| 1区2区3区欧美| 色美美综合视频| 一区二区三区美女视频| 欧美午夜宅男影院| 亚洲国产视频网站| 日韩色在线观看| 极品少妇一区二区三区精品视频| 欧美一级二级三级蜜桃| 久久精品国产亚洲高清剧情介绍 | 日本视频在线一区| 一区二区在线看| 成人午夜视频在线观看| 精品国产成人在线影院| 美腿丝袜一区二区三区| 久久日韩精品一区二区五区| 在线亚洲人成电影网站色www| 欧美视频三区在线播放| 国产欧美视频一区二区三区| 三级欧美在线一区| 色诱亚洲精品久久久久久| 久久伊99综合婷婷久久伊| 日韩中文字幕不卡| 欧美色网站导航| 亚洲三级在线播放| 粉嫩高潮美女一区二区三区| 7777精品伊人久久久大香线蕉| 亚洲人成7777| 99久久综合色| 欧美经典一区二区| 久久精品国产精品亚洲综合| 欧美日韩一区二区三区视频| 最新高清无码专区| 成人av电影在线| 欧美国产精品v| 国产成人午夜视频| 国产欧美日韩综合精品一区二区| 久久99久国产精品黄毛片色诱| 欧美高清激情brazzers| 亚洲成在线观看| 欧美性xxxxx极品少妇| 亚洲影视在线观看| 日本久久精品电影| 亚洲精品大片www| 在线一区二区三区| 亚洲第一电影网| 欧美一区二区播放| 另类小说综合欧美亚洲| 日韩欧美中文字幕公布| 久久99精品国产麻豆婷婷| 日韩视频国产视频| 国产精品综合网| 中文字幕在线不卡| 91高清在线观看| 日欧美一区二区| 精品久久久久久亚洲综合网| 国产一区 二区 三区一级| 国产欧美日韩中文久久| 99re这里只有精品首页| 亚洲欧美偷拍三级| 欧美日韩精品欧美日韩精品一 | 国产成人小视频| 国产精品久久一级| 色8久久精品久久久久久蜜| 一区二区三区四区不卡在线| 欧美三级视频在线播放| 久久国产麻豆精品| 欧美—级在线免费片| 欧洲在线/亚洲| 久久99精品国产麻豆婷婷洗澡| 国产午夜精品在线观看| 色综合久久综合| 久99久精品视频免费观看| 国产精品嫩草影院com| 欧美这里有精品| 国产又黄又大久久| 亚洲一线二线三线视频| 久久久久久久久99精品| 日本二三区不卡| 国产乱对白刺激视频不卡| 一区二区三区日韩欧美精品 | 国产成人精品免费视频网站| 亚洲欧洲三级电影| 欧美一区二区三区四区高清| 成人免费毛片嘿嘿连载视频| 亚洲尤物视频在线| 国产精品久久久久久久岛一牛影视| 欧美久久久久免费| 成人a级免费电影| 久久精品国产77777蜜臀| 亚洲欧美在线视频观看| 亚洲精品在线免费播放| 在线一区二区三区| eeuss鲁片一区二区三区| 久久国内精品视频| 亚洲国产视频a| 自拍偷在线精品自拍偷无码专区| 日韩三级视频中文字幕| 91黄色小视频| 91网站最新网址| 丁香婷婷综合色啪| 国产在线麻豆精品观看| 视频一区二区三区入口| 亚洲男人天堂av网| 中文字幕制服丝袜一区二区三区 | 久久er精品视频| 午夜精品影院在线观看| 亚洲欧洲综合另类| 国产精品成人免费在线| 日本一区二区三区dvd视频在线| 日韩免费看的电影| 日韩亚洲欧美综合| 欧美一区二区黄色| 欧美一区二区黄| 91精品国产乱| 欧美一区二区三区系列电影| 欧美日韩国产a| 欧美日韩精品系列| 欧美日韩大陆一区二区| 精品视频一区 二区 三区| 91久久精品日日躁夜夜躁欧美| 波多野结衣亚洲| 91麻豆蜜桃一区二区三区| 99久久精品一区| 色综合久久66| 欧美影片第一页| 欧美日韩成人在线| 欧美电影一区二区| 欧美一区二区精美| 久久亚洲一区二区三区明星换脸| 精品国产精品网麻豆系列| 久久久91精品国产一区二区三区| 久久久三级国产网站| 欧美国产日韩亚洲一区| 亚洲人吸女人奶水| 亚洲小少妇裸体bbw| 午夜精品久久久久久久久久| 午夜在线成人av| 看电视剧不卡顿的网站| 国产经典欧美精品| 色综合欧美在线视频区| 欧美精品 日韩| 久久久精品影视| 亚洲乱码中文字幕综合| 日韩国产精品久久久久久亚洲| 精品亚洲欧美一区| 91丨九色丨尤物| 欧美老女人在线| 久久久久久99精品| 一区二区欧美国产| 久久99国内精品| 91美女片黄在线观看91美女| 91精品国产综合久久婷婷香蕉| 久久久久国产精品麻豆ai换脸| 亚洲啪啪综合av一区二区三区| 日本不卡一区二区三区| 国产传媒欧美日韩成人| 欧美日韩综合一区| 久久免费的精品国产v∧| 夜夜精品视频一区二区| 狠狠色综合播放一区二区| 99re这里只有精品首页| 欧美大片在线观看一区二区| 亚洲素人一区二区| 久久超碰97中文字幕| 色狠狠一区二区| 国产日韩v精品一区二区| 三级在线观看一区二区 | 欧美乱熟臀69xxxxxx| 中文字幕不卡的av| 美国三级日本三级久久99|