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

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

?? mac_backoff_timer.c

?? 用IAR開發的ZIGBEE網絡路由例子
?? C
?? 第 1 頁 / 共 2 頁
字號:
/**************************************************************************************************
    Filename:
    Revised:        $Date: 2007-03-26 16:18:09 -0700 (Mon, 26 Mar 2007) $
    Revision:       $Revision: 13860 $

    Description:

    Describe the purpose and contents of the file.

    Copyright (c) 2006 by Texas Instruments, Inc.
    All Rights Reserved.  Permission to use, reproduce, copy, prepare
    derivative works, modify, distribute, perform, display or sell this
    software and/or its documentation for any purpose is prohibited
    without the express written consent of Texas Instruments, Inc.
**************************************************************************************************/



/* ------------------------------------------------------------------------------------------------
 *                                           Includes
 * ------------------------------------------------------------------------------------------------
 */

/* hal */
#include "hal_types.h"
#include "hal_mcu.h"

/* high-level specific */
#include "mac_spec.h"

/* exported low-level */
#include "mac_low_level.h"

/* low-level specific */
#include "mac_backoff_timer.h"
#include "mac_tx.h"

/* target specific */
#include "mac_radio_defs.h"

/* debug */
#include "mac_assert.h"


/* ------------------------------------------------------------------------------------------------
 *                                            Defines
 * ------------------------------------------------------------------------------------------------
 */
#define COMPARE_STATE_ROLLOVER_BV                 BV(0)
#define COMPARE_STATE_TRIGGER_BV                  BV(1)
#define COMPARE_STATE_ARM_BV                      BV(2)

#define COMPARE_STATE_TRIGGER                     COMPARE_STATE_TRIGGER_BV
#define COMPARE_STATE_ROLLOVER                    COMPARE_STATE_ROLLOVER_BV
#define COMPARE_STATE_ROLLOVER_AND_TRIGGER        (COMPARE_STATE_ROLLOVER_BV | COMPARE_STATE_TRIGGER_BV)
#define COMPARE_STATE_ROLLOVER_AND_ARM_TRIGGER    (COMPARE_STATE_ROLLOVER_BV | COMPARE_STATE_ARM_BV)


/*
 *  The datasheet mentions a small delay on both receive and transmit side of approximately
 *  two microseconds.  The precise characterization is given below.
 *  (This data is not given in rev 1.03 datasheet)
 */
#define RX_TX_PROP_DELAY_AVG_USEC         ((MAC_RADIO_RX_TX_PROP_DELAY_MIN_USEC + MAC_RADIO_RX_TX_PROP_DELAY_MAX_USEC) / 2)
#define RX_TX_PROP_DELAY_AVG_TIMER_TICKS  ((uint16)(MAC_RADIO_TIMER_TICKS_PER_USEC() * RX_TX_PROP_DELAY_AVG_USEC + 0.5))

/*
 *  For slotted receives, the SFD signal is expected to occur on a specifc symbol boundary.
 *  This does *not* correspond to the backoff boundary.  The SFD signal occurs at an
 *  offset from the backoff boundary.  This is done for efficiency of related algorithms.
 *
 *  Once transmit is strobed there is a fixed delay until the SFD signal occurs.  The frame
 *  does not start over-the-air transmit until after an internal radio delay of 12 symbols.
 *  Once transmitting over-the-air, the preamble is sent (8 symbols) followed by the
 *  SFD field (2 symbols). After the SFD field completes, the SFD signal occurs.  This
 *  adds up to a total of 22 symbols from strobe to SFD signal.
 *
 *  Since 22 symbols spans more than a backoff (20 symbols) the modulus operation is used
 *  to find the symbol offset which is 2 symbols.
 *
 *  This math is derived formally via the pre-processor.
 */
#define SYMBOLS_FROM_STROBE_TO_PREAMBLE   12 /* from datasheet */
#define SYMBOLS_FROM_PREAMBLE_TO_SFD      (MAC_SPEC_PREAMBLE_FIELD_LENGTH + MAC_SPEC_SFD_FIELD_LENGTH)
#define SYMBOLS_FROM_STROBE_TO_SFD        (SYMBOLS_FROM_STROBE_TO_PREAMBLE + SYMBOLS_FROM_PREAMBLE_TO_SFD)
#define SYMBOLS_EXPECTED_AT_SFD           (SYMBOLS_FROM_STROBE_TO_SFD % MAC_A_UNIT_BACKOFF_PERIOD)

/* after all that formal math, make sure the result is as expected */
#if (SYMBOLS_EXPECTED_AT_SFD != 2)
#error "ERROR! Internal problem with pre-processor math of slotted alignment."
#endif


/*
 *  The expected SFD signal occurs at the symbol offset *plus* a small internal propagation delay
 *  internal to the radio.  This delay is given as the sum of a receive side delay and a transmit
 *  side delay.  When this delay is subtracted from the internal timer, the internal time base
 *  actually becomes the actual receive time *minus* the transmit delay.  This works out though.
 *  The transmit logic does *not* take into account this delay.  Since the timer is skewed by the
 *  transmit delay already, the transmits go out precisely on time.
 */
#define TIMER_TICKS_EXPECTED_AT_SFD   ((SYMBOLS_EXPECTED_AT_SFD * MAC_RADIO_TIMER_TICKS_PER_SYMBOL()) \
                                          + RX_TX_PROP_DELAY_AVG_TIMER_TICKS)


/* ------------------------------------------------------------------------------------------------
 *                                         Local Variables
 * ------------------------------------------------------------------------------------------------
 */
static uint32 backoffTimerRollover;
static uint32 backoffTimerTrigger;
static uint8 compareState;


/**************************************************************************************************
 * @fn          macBackoffTimerInit
 *
 * @brief       Intializes backoff timer.
 *
 * @param       none
 *
 * @return      none
 **************************************************************************************************
 */
void macBackoffTimerInit(void)
{
  compareState = COMPARE_STATE_ROLLOVER;
  MAC_RADIO_BACKOFF_SET_COUNT(0);
  macBackoffTimerSetRollover(MAC_BACKOFF_TIMER_DEFAULT_ROLLOVER);
  MAC_RADIO_BACKOFF_COMPARE_CLEAR_INTERRUPT();
  MAC_RADIO_BACKOFF_COMPARE_ENABLE_INTERRUPT();
}


/**************************************************************************************************
 * @fn          macBackoffTimerReset
 *
 * @brief       Resets backoff timer.
 *
 * @param       none
 *
 * @return      none
 **************************************************************************************************
 */
void macBackoffTimerReset(void)
{
  MAC_RADIO_BACKOFF_COMPARE_DISABLE_INTERRUPT();
  macBackoffTimerInit();
}


/**************************************************************************************************
 * @fn          macBackoffTimerSetRollover
 *
 * @brief       Set rollover count of backoff timer.
 *
 * @param       rolloverBackoff - backoff count where count is reset to zero
 *
 * @return      none
 **************************************************************************************************
 */
void macBackoffTimerSetRollover(uint32 rolloverBackoff)
{
  halIntState_t  s;

  MAC_ASSERT(rolloverBackoff > MAC_RADIO_BACKOFF_COUNT());  /* rollover value must be greater than count */

  HAL_ENTER_CRITICAL_SECTION(s);
  backoffTimerRollover = rolloverBackoff;
  MAC_RADIO_BACKOFF_SET_COMPARE(rolloverBackoff);
  HAL_EXIT_CRITICAL_SECTION(s);
}


/**************************************************************************************************
 * @fn          macBackoffTimerSetCount
 *
 * @brief       Sets the count of the backoff timer.
 *
 * @param       backoff - new count
 *
 * @return      none
 **************************************************************************************************
 */
void macBackoffTimerSetCount(uint32 backoff)
{
  halIntState_t  s;

  MAC_ASSERT(compareState == COMPARE_STATE_ROLLOVER);   /* trigger cannot be active if changing count */
  MAC_ASSERT(backoff < backoffTimerRollover);  /* count must be less than rollover value */

  HAL_ENTER_CRITICAL_SECTION(s);
  MAC_RADIO_BACKOFF_SET_COUNT(backoff);
  HAL_EXIT_CRITICAL_SECTION(s);
}


/**************************************************************************************************
 * @fn          macBackoffTimerCount
 *
 * @brief       Returns the current backoff count.
 *
 * @param       none
 *
 * @return      current backoff count
 **************************************************************************************************
 */
uint32 macBackoffTimerCount(void)
{
  halIntState_t  s;
  uint32 backoffCount;

  HAL_ENTER_CRITICAL_SECTION(s);
  backoffCount = MAC_RADIO_BACKOFF_COUNT();
  HAL_EXIT_CRITICAL_SECTION(s);
  
#ifdef MAC_RADIO_FEATURE_HARDWARE_OVERFLOW_NO_ROLLOVER
  /*
   *  Extra processing is required if the radio has a special hardware overflow
   *  count feature.  Unfortunately this feature does not provide for setting a
   *  rollover value.  This must be done manually.
   *
   *  This means there is a small window in time when reading the hardware count
   *  will be inaccurate.  It's possible it could be one more than the allowable
   *  count.  This happens if the count has just incremented beyond the maximum
   *  and is queried before the ISR has a chance to run and reset the backoff
   *  count back to zero.  (Pure software implementation of backoff count does
   *  not have this problem.)
   *
   *  To solve this, before returning a value for the backoff count, the value
   *  must be tested to see if it is beyond the maximum value.  If so, a rollover
   *  interrupt that will set backoff count to zero is imminent.  In that case,
   *  the correct backoff count of zero is returned.
   */
  if (backoffCount >= backoffTimerRollover)
  {
    return(0);
  }
#endif
  
  return(backoffCount);
}


/**************************************************************************************************
 * @fn          macBackoffTimerCapture
 *
 * @brief       Returns the most recently captured backoff count
 *

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日本在线一区| 亚洲第一福利一区| 国产午夜精品一区二区三区嫩草| 欧美日韩国产首页| 欧美日韩视频一区二区| 欧美午夜精品久久久| 欧洲一区二区三区免费视频| 欧美视频一区在线| 欧美浪妇xxxx高跟鞋交| 91精品啪在线观看国产60岁| 欧美一区二区国产| 欧美精品777| 精品女同一区二区| 精品福利二区三区| 欧美高清在线精品一区| 国产精品毛片a∨一区二区三区 | 亚洲免费在线视频| 最新久久zyz资源站| 亚洲日本va午夜在线影院| 亚洲天堂av一区| 亚洲伦在线观看| 五月婷婷色综合| 蜜桃av一区二区三区电影| 国产一区高清在线| 成人爽a毛片一区二区免费| 91小视频免费看| 欧美性猛片aaaaaaa做受| 555夜色666亚洲国产免| 久久久青草青青国产亚洲免观| 国产日韩欧美a| 亚洲欧美偷拍卡通变态| 亚洲第一二三四区| 激情偷乱视频一区二区三区| 成人h版在线观看| 欧美日韩的一区二区| 精品av综合导航| 亚洲激情图片一区| 久久99国产精品成人| 不卡一卡二卡三乱码免费网站| 一本大道av一区二区在线播放| 欧美日韩国产片| 久久久久久久综合色一本| 综合久久国产九一剧情麻豆| 奇米精品一区二区三区在线观看 | 成年人国产精品| 欧美日韩久久不卡| 国产欧美精品在线观看| 性欧美疯狂xxxxbbbb| 国产v综合v亚洲欧| 欧美人妇做爰xxxⅹ性高电影 | 国产中文一区二区三区| 一本色道久久加勒比精品| 欧美成人aa大片| 亚洲国产人成综合网站| 国产乱淫av一区二区三区| 欧美午夜寂寞影院| 中文字幕av一区二区三区高| 午夜精品成人在线视频| 国产成人精品一区二| 欧美日韩高清一区| 国产精品久久免费看| 精品在线观看视频| 欧美三级日本三级少妇99| 国产精品网站在线观看| 日本特黄久久久高潮| 成人激情午夜影院| www久久精品| 日韩成人av影视| 91久久精品一区二区三| 中文字幕+乱码+中文字幕一区| 日韩精品视频网| 91福利资源站| 国产精品久久三| 国产一区高清在线| 日韩色在线观看| 亚洲一二三专区| 色综合色狠狠综合色| 亚洲日本成人在线观看| 国产成人精品免费在线| 日韩美一区二区三区| 亚洲一区精品在线| 色婷婷国产精品| 亚洲特黄一级片| av一二三不卡影片| 国产婷婷色一区二区三区| 免费精品99久久国产综合精品| 在线日韩一区二区| 尤物av一区二区| 一本到高清视频免费精品| 中文字幕日韩一区二区| 国产91精品在线观看| 精品国产1区2区3区| 精品亚洲成a人| 精品精品国产高清一毛片一天堂| 日韩主播视频在线| 欧美精品第一页| 日本一道高清亚洲日美韩| 欧美午夜一区二区| 亚洲不卡av一区二区三区| 欧美色偷偷大香| 亚洲成人www| 制服丝袜亚洲网站| 日韩激情一区二区| 欧美一区二区福利在线| 精品一区二区综合| 久久久久久久久久美女| 国产精品一卡二| 国产精品你懂的| 97久久精品人人做人人爽| 亚洲精品国产第一综合99久久 | 国产拍欧美日韩视频二区| 国产一区二区三区久久悠悠色av| 久久综合久久综合亚洲| 国产a区久久久| 亚洲男同性恋视频| 欧美三级日韩三级| 美洲天堂一区二卡三卡四卡视频 | 婷婷国产v国产偷v亚洲高清| 777色狠狠一区二区三区| 麻豆精品一区二区综合av| 欧美精品一区二区三区蜜臀| 丁香桃色午夜亚洲一区二区三区| 国产精品久久久久一区二区三区| 91蜜桃免费观看视频| 亚洲午夜一区二区三区| 日韩一级大片在线观看| 国内精品久久久久影院薰衣草| 国产亚洲人成网站| 91麻豆123| 日本女人一区二区三区| 亚洲精品在线观看网站| 91农村精品一区二区在线| 亚洲成人黄色小说| 久久这里只精品最新地址| 成人av在线一区二区三区| 亚洲一区精品在线| 欧美精品一区二区三区蜜桃视频 | 99国产精品久久久久久久久久 | 成人激情视频网站| 亚洲成人777| 精品毛片乱码1区2区3区| 成人网在线免费视频| 五月激情六月综合| 久久精品夜夜夜夜久久| 色老汉一区二区三区| 青青国产91久久久久久| 中文字幕高清不卡| 欧美剧情电影在线观看完整版免费励志电影 | 亚洲成人在线观看视频| 久久午夜色播影院免费高清| 91丨porny丨国产入口| 日韩成人一级大片| 国产精品网站一区| 欧美酷刑日本凌虐凌虐| 北条麻妃一区二区三区| 人禽交欧美网站| 中文字幕一区二区三区四区不卡| 欧美一区二区三区色| k8久久久一区二区三区 | 欧美精品tushy高清| 不卡欧美aaaaa| 久久国产生活片100| 亚洲乱码精品一二三四区日韩在线| 欧美成人女星排名| 在线视频国内一区二区| 懂色av中文字幕一区二区三区| 日本美女一区二区| 一区二区三区中文在线观看| 亚洲精品一区二区三区99| 欧美日韩中文精品| 91视视频在线直接观看在线看网页在线看 | 国产精品理伦片| 欧美一个色资源| 欧美日韩中文字幕一区二区| av在线播放成人| 国产不卡在线一区| 久久国内精品视频| 日韩国产精品久久| 亚洲最新在线观看| 国产精品电影院| 国产日产欧产精品推荐色| 欧美一级高清片| 欧美丰满少妇xxxxx高潮对白| 色综合天天综合网天天看片| 国产高清精品网站| 国产在线精品一区在线观看麻豆| 日本午夜一本久久久综合| 亚洲国产婷婷综合在线精品| 亚洲欧美一区二区不卡| 国产精品国产三级国产三级人妇| 精品欧美久久久| 日韩精品自拍偷拍| 欧美人xxxx| 欧美精品丝袜久久久中文字幕| 在线精品国精品国产尤物884a| 91麻豆福利精品推荐| 91麻豆产精品久久久久久| 91亚洲精品乱码久久久久久蜜桃 | 色综合天天综合网天天狠天天| 99国产精品一区|