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

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

?? zphycc2420.c

?? 通過cc2420+pic實現無線通信
?? C
字號:
 /*********************************************************************
 *
 *                  Zigbee PHY layer using CC2420
 *              (Not completely impelemented in Rel 1.0)
 *
 *********************************************************************
 * FileName:        zPHYCC2420.c
 * Dependencies:
 * Processor:       PIC18F
 * Complier:        MCC18 v2.30 or higher
 *                  HITECH PICC-18 V8.10PL1 or higher
 * Company:         Microchip Technology, Inc.
 *
 * Software License Agreement
 *
 * The software supplied herewith by Microchip Technology Incorporated
 * (the 揅ompany? for its PICmicro?Microcontroller is intended and
 * supplied to you, the Company抯 customer, for use solely and
 * exclusively on Microchip PICmicro Microcontroller products. The
 * software is owned by the Company and/or its supplier, and is
 * protected under applicable copyright laws. All rights are reserved.
 * Any use in violation of the foregoing restrictions may subject the
 * user to criminal sanctions under applicable laws, as well as to
 * civil liability for the breach of the terms and conditions of this
 * license.
 *
 * THIS SOFTWARE IS PROVIDED IN AN 揂S IS?CONDITION. NO WARRANTIES,
 * WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT NOT LIMITED
 * TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
 * PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. THE COMPANY SHALL NOT,
 * IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL OR
 * CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER.
 *
 *
 * Author               Date    Comment
 *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 * Nilesh Rajbharti     7/12/04 Rel 0.9
 * Nilesh Rajbharti     11/1/04 Pre-release version
 ********************************************************************/
// Uncommnt ENABLE_DEBUG line to enable debug mode for this file.
// Or you may also globally enable debug by defining this macro
// in zigbee.def file or from compiler command-line.
#ifndef ENABLE_DEBUG
//#define ENABLE_DEBUG
#endif

#include "zigbee.h"

#include "zPHY.h"
#include "zPHYCC2420.h"

#if defined(WIN32)
    #include "physim.h"
#endif


/*
 *  PA_LEVEL determiens output power of transciever
 *          According to Table 9 of CC2420 datasheet
 *
 *          PA_LEVEL (TXCTRL.LSB)       Output Power (dBm)  Current Consumtiion
 *          ====================================================================
 *          0xFF                        0                   17.4 mA
 *          0xFB                        -1                  16.5 mA
 *          0xF7                        -3                  15.2 mA
 *          0xF3                        -5                  13.9 mA
 *          0xEF                        -7                  12.5 mA
 *          0xEB                        -10                 11.2 mA
 *          0xE7                        -15                 9.9 mA
 *          0xE3                        -25                 8.5 mA
 */
#define PA_LEVEL        (0xFF)      // Select one of the above as per your requirement.

BYTE currentChannel;





/*********************************************************************
 * Function:        BOOL PHYInit(void)
 *
 * PreCondition:    None
 *
 * Input:           None
 *
 * Output:          TRUE if the PHY was successfully initialized
 *                  FALSE if the PHY malfunctioned.  Power cycling
 *                        the PHY and calling PHYInit again might be
 *                        worthwhile.
 *
 * Side Effects:    None
 *
 * Overview:        PHY is initialized
 *
 * Note:            None
 ********************************************************************/

void Delay(WORD i)
{
    while( i-- );
}



BOOL PHYInit(void)
{
    typedef union _PHY_STATUS
    {
        struct
        {
            unsigned int :1;
            unsigned int RSSI_VALID : 1;
            unsigned int LOCK : 1;
            unsigned int TX_ACTIVE : 1;
            unsigned int ENC_BUSY : 1;
            unsigned int TX_UNDERFLOW : 1;
            unsigned int XOSC16M_STABLE : 1;
        } bits;
        BYTE Val;
    } PHY_STATUS;

    PHY_STATUS phyStatus;
    BYTE AttemptCount;

    /*
     * Do soft reset of the the chip
     */
    // TODO: Use optimum delay.
    PHY_RESET(0);
    Delay(1000);
    PHY_RESET(1);
    Delay(500);


    // Switch oscillator ON here and do other things in parallel
    // while oscillator stabilizes.
    PHYBegin();
    PHYPut(STROBE_SXOSCON);
    PHYEnd();


    PHYBegin();

    /*
     * For MDMCTRL0, we will accept the default settings of most bits except
     * that we need to do AutoACK
     */
    PHYPut(REG_MDMCTRL0);

    // Set AUTOACK bit in MDMCTRL0 register.
    // 15:14 = '00' = Reserved
    // 13    = '0'  = Reserved frames are rejected
    // 12    = '?'  = '1' if this is coordinator, '0' if otherwise
    // 11    = '1'  = Address decoding is enabled
    // 10:8  = '010'    = CCA Hysteresis in DB - default value
    // 7:6   = '11' = CCA = 1, when RSSI_VAL < CCA_THR - CCA_HYST and not receiving valid IEEE 802.15.4 data
    // 5     = '1'  = Auto CRC
    // 4     = '1'  = Auto ACK
    // 3:0   = '0010' = 3 leading zero bytes - IEEE compliant.

#if defined(I_AM_COORDINATOR)
    // MSB = 0b0001 1010
    PHYPut(0x1A);
#else
    // MSB = 0b0000 1010
    PHYPut(0x0A);
#endif

    // LSB = 0b1111 0010
    PHYPut(0xf2);
    PHYEnd();

    /*
     *
     */


    /*
     * For MDMCTRL1, set CORR_THR to 20.
     */

    PHYBegin();
    PHYPut(REG_MDMCTRL1);
    PHYPut(0x05);            // MSB
    PHYPut(0x00);            // LSB
    PHYEnd();

    /*
     *
     */

    PHYBegin();           // Disable MAC security
    PHYPut(REG_SECCTRL0);
    PHYPut(0x01);            // MSB
    PHYPut(0xC4);            // LSB
    PHYEnd();

    // Select desired TX output power level
    PHYBegin();
    PHYPut(REG_TXCTRL);
    // As defined by Table 9 of CC2420 datasheet.
    PHYPut(0xA);             // MSB
    PHYPut(PA_LEVEL);        // LSB
    PHYEnd();

    // Set FIFOP threshold to full RXFIFO buffer
    PHYBegin();
    PHYPut(REG_IOCFG0);
    PHYPut(0x00);
    PHYPut(0x7F);
    PHYEnd();

    // Turn on oscillator
    PHYBegin();

    AttemptCount = 100;
    do                      // Wait for stable oscillator.
    {
        // Execute NOP to read the status.
        PHYPut(STROBE_SNOP);

        phyStatus.Val = PHYGet();

#if defined(WIN32)
        phyStatus.bits.XOSC16M_STABLE = 1;
#endif
    } while( phyStatus.bits.XOSC16M_STABLE == 0 && --AttemptCount);

    PHYPut(STROBE_SFLUSHTX);
    PHYPut(STROBE_SFLUSHRX);

    PHYEnd();

    return AttemptCount != 0;
}


/*********************************************************************
 * Function:        void PHYSetTxPower(BYTE val)
 *
 * PreCondition:    None
 *
 * Input:           val - Power level as described above
 *
 * Output:          None
 *
 * Side Effects:    None
 *
 * Overview:        Changes transmit output power as per given value
 *
 * Note:            None
 ********************************************************************/
void PHYSetTxPower(BYTE val)
{
    // Select desired TX output power level
    PHYBegin();
    PHYPut(REG_TXCTRL);
    // As defined by Table 9 of CC2420 datasheet.
    PHYPut(0xA);                // MSB
    PHYPut(val);                // LSB
    PHYEnd();
}



/*********************************************************************
 * Function:        BOOL PHYProcessRxOverflow(void)
 *
 * PreCondition:    PHYInit() is called
 *
 * Input:           None
 *
 * Output:          None
 *
 * Side Effects:    None
 *
 * Overview:        Chedks for receive overflow and clears as per
 *                  RF chip specific procedure
 *
 * Note:            None
 ********************************************************************/
BOOL PHYProcessRxOverflow(void)
{
    BYTE v;

    // Check to see if there was an overflow.
    if ( PHY_FIFO == 0 && PHY_FIFOP == 1 )
    {
        // As per CC2420, overflow would be handled by
        // reading at least one RX byte and then issuing
        // RX FLUSH command.
        PHYBegin();

        // Select RX FIFO.
        PHYSelectRxFIFO();

        // Read one byte.
        v = PHYGet();

        // End of dummy read sequence.
        PHYEnd();

        // Start RX flush sequence
        PHYBegin();

        // Now issue SFLUSHRX command
        PHYFlushRx();

        PHYEnd();

        return TRUE;
    }

    return FALSE;
}




/*********************************************************************
 * Function:        BYTE CC2420GetStatus(void)
 *
 * PreCondition:    None
 *
 * Input:           None
 *
 * Output:          Status byte of CC2420
 *
 * Side Effects:    None
 *
 * Overview:        None
 *
 * Note:            None
 ********************************************************************/
BYTE CC2420GetStatus(void)
{
    BYTE v;

    PHYBegin();

    v = PHYGet();

    PHYEnd();

    return v;
}


/*********************************************************************
 * Function:        BOOL PHYSetNextChannel(void)
 *
 * PreCondition:    None
 *
 * Input:           None
 *
 * Output:          TRUE if next channel was selected
 *                  FALSE, if top channel is reached.
 *
 * Side Effects:    None
 *
 * Overview:        None
 *
 * Note:            None
 ********************************************************************/
BOOL PHYSetNextChannel(void)
{
    // If we reach upper end of available channels, tell app about it.
    if ( currentChannel == 26 )
        return FALSE;

    // We can still go up next channel.
    currentChannel++;

    PHYSetChannel(currentChannel);

    return TRUE;
}

/*********************************************************************
 * Function:        void PHYSetChannel(BYTE channel)
 *
 * PreCondition:    None
 *
 * Input:           channel     - Channel number to set (Must be 11 - 26)
 *
 * Output:          None
 *
 * Side Effects:    None
 *
 * Overview:        None
 *
 * Note:            None
 ********************************************************************/
void PHYSetChannel(BYTE channel)
{
    currentChannel = channel;

    PHYBegin();
    PHYPut(REG_FSCTRL);
    PHYPut(0x41);            // LOCK_THR = 1 as recommended, with bit 8 = 1 for MSb of FREQ value
    PHYPut((channel-11)*5+101);      // Create raw LSB for given channel
    PHYEnd();
}



/*********************************************************************
 * Function:        BYTE PHYGetED(void)
 *
 * PreCondition:    TXON = TRUE
 *
 * Input:           None
 *
 * Output:          0x00 - 0xff energy level on current channel
 *
 * Side Effects:    None
 *
 * Overview:        None
 *
 * Note:            None
 ********************************************************************/
BYTE PHYGetED(void)
{
    BYTE val;

    PHYBegin();
    PHYPut(REG_RSSI | CMD_READ);

    // Read the value
    val = PHYGet();

    PHYEnd();

    return val;
}

/*********************************************************************
 * Function:        void PHYSetTRXState(PHY_TRX_STATE state)
 *
 * PreCondition:    PHYInit() is called.
 *
 * Input:           state   - State to set
 *
 * Output:          None
 *
 * Side Effects:    None
 *
 * Overview:        None
 *
 * Note:            None
 ********************************************************************/
void PHYSetTRXState(PHY_TRX_STATE state)
{
    PHYBegin();

    if ( state == PHY_TRX_RX_ON )
    {
        PHYPut(STROBE_SRXON);
    }

    else if ( state == PHY_TRX_OFF || state == PHY_TRX_FORCE_OFF )
    {
        PHYPut(STROBE_SRFOFF);
    }

    else if ( state == PHY_TRX_TX_ON )
    {
        PHYPut(STROBE_STXON);
    }

    PHYEnd();

}

// A temp function to work around CC2420 bug.
// Called by MAC when required.
void PHYEnableRxFilter(BOOL bEnable)
{
    PHYBegin();

    /*
     * For MDMCTRL0, we will accept the default settings of most bits except
     * that we need to do AutoACK
     */
    PHYPut(REG_MDMCTRL0);

    // Set AUTOACK bit in MDMCTRL0 register.
    // 15:14 = '00' = Reserved
    // 13    = '0'  = Reserved frames are rejected
    // 12    = '?'  = '1' if this is coordinator, '0' if otherwise
    // 11    = '1'  = Address decoding is enabled
    // 10:8  = '010'    = CCA Hysteresis in DB - default value
    // 7:6   = '11' = CCA = 1, when RSSI_VAL < CCA_THR - CCA_HYST and not receiving valid IEEE 802.15.4 data
    // 5     = '1'  = Auto CRC
    // 4     = '1'  = Auto ACK
    // 3:0   = '0010' = 3 leading zero bytes - IEEE compliant.

#if defined(I_AM_COORDINATOR)
    // MSB = 0b0001 1010
    if ( bEnable )
    {
        PHYPut(0x1A);
    }
    else
    {
        PHYPut(0x12);
    }
#else
    if ( bEnable )
    {
        // MSB = 0b0000 1010
        PHYPut(0x0A);
    }
    else
    {
        PHYPut(0x02);
    }
#endif

    // LSB = 0b1111 0010
    PHYPut(0xf2);

    PHYEnd();
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
青青草国产精品亚洲专区无| 久久婷婷国产综合国色天香| 亚洲视频一二三| 成人自拍视频在线观看| 久久综合久久综合久久综合| 亚洲大型综合色站| 欧美日韩一区二区三区不卡 | 日日摸夜夜添夜夜添亚洲女人| 欧美色爱综合网| 日本欧美一区二区在线观看| 日韩一区二区在线观看| 国产一区二区在线视频| 国产精品对白交换视频| 91国产成人在线| 青青草原综合久久大伊人精品| 欧美r级电影在线观看| 国产成人aaaa| 亚洲自拍偷拍麻豆| 欧美变态凌虐bdsm| 大桥未久av一区二区三区中文| 亚洲人精品一区| 欧美一区二区三区免费观看视频| 久久国产福利国产秒拍| 亚洲日本成人在线观看| 欧美一区二区播放| 成人激情免费视频| 日本在线不卡一区| 中文字幕+乱码+中文字幕一区| 在线欧美日韩国产| 国产乱码精品一区二区三 | 欧美一区二区播放| 成人黄色免费短视频| 亚欧色一区w666天堂| 久久精品人人做人人爽人人| 色综合久久综合网| 精品无人区卡一卡二卡三乱码免费卡 | 亚洲精品第一国产综合野| 日韩情涩欧美日韩视频| 91免费视频大全| 激情综合网av| 亚洲国产成人精品视频| 久久综合999| 欧美日韩国产小视频| 国产精品自拍毛片| 日本午夜一本久久久综合| 国产精品丝袜在线| 日韩视频国产视频| 欧美日本不卡视频| 91色porny蝌蚪| 风间由美一区二区av101| 日韩精品视频网| 一区二区三区在线视频观看| 久久网站热最新地址| 欧美日韩视频专区在线播放| 99久久精品久久久久久清纯| 裸体一区二区三区| 亚洲成av人片在www色猫咪| 中文字幕日本乱码精品影院| 久久精品视频在线免费观看| 91麻豆精品国产91久久久使用方法| 99精品欧美一区二区三区小说 | 婷婷开心激情综合| 亚洲乱码国产乱码精品精的特点| 国产亚洲精品aa午夜观看| 日韩一级二级三级精品视频| 在线一区二区视频| 色猫猫国产区一区二在线视频| www.亚洲人| 成人h动漫精品一区二区| 国产乱码精品一区二区三区五月婷| 日本aⅴ精品一区二区三区 | 蜜臀91精品一区二区三区| 亚洲电影在线免费观看| 亚洲精品乱码久久久久久黑人| 最新欧美精品一区二区三区| 日本一区二区成人| 中文字幕一区三区| 亚洲色图.com| 亚洲精品日日夜夜| 亚洲一区二区三区美女| 亚洲一区二区三区四区在线免费观看| 亚洲日韩欧美一区二区在线| 亚洲色图欧美在线| 一区二区三区加勒比av| 亚洲高清不卡在线| 日韩精彩视频在线观看| 秋霞午夜鲁丝一区二区老狼| 亚洲mv在线观看| 全国精品久久少妇| 裸体歌舞表演一区二区| 激情五月婷婷综合网| 国产精品亚洲一区二区三区妖精| 风间由美性色一区二区三区| 懂色一区二区三区免费观看 | 色综合一区二区| 欧美视频精品在线观看| 欧美一级淫片007| 精品国产髙清在线看国产毛片| 久久夜色精品一区| 亚洲视频狠狠干| 香蕉成人啪国产精品视频综合网| 久久精品国产成人一区二区三区| 激情五月婷婷综合| 91麻豆免费视频| 欧美一区二区三区视频在线观看| 国产亚洲综合性久久久影院| 亚洲视频免费看| 麻豆国产精品一区二区三区 | 九九视频精品免费| av电影在线观看一区| 欧美日韩在线三级| 久久综合99re88久久爱| 亚洲啪啪综合av一区二区三区| 亚洲国产精品久久久久秋霞影院| 激情成人综合网| 色综合中文综合网| 久久99精品久久久| www.亚洲免费av| 91精品久久久久久久99蜜桃| 国产蜜臀av在线一区二区三区| 亚洲国产成人va在线观看天堂| 国内成人免费视频| 在线亚洲+欧美+日本专区| 精品三级在线看| 亚洲一区二区在线免费观看视频| 国产制服丝袜一区| 在线电影一区二区三区| 国产清纯美女被跳蛋高潮一区二区久久w| 亚洲女人****多毛耸耸8| 精品亚洲成av人在线观看| 欧美最猛性xxxxx直播| 国产欧美综合在线| 男男视频亚洲欧美| 欧美视频自拍偷拍| 国产精品乱码一区二三区小蝌蚪| 日本欧美久久久久免费播放网| 97久久精品人人澡人人爽| 久久综合色综合88| 丝袜亚洲精品中文字幕一区| 99视频在线精品| 久久久精品天堂| 久久精品国产在热久久| 欧美性受xxxx黑人xyx| 国产精品初高中害羞小美女文| 老色鬼精品视频在线观看播放| 欧美手机在线视频| 亚洲伦理在线免费看| 成人一区二区三区视频在线观看| 日韩午夜在线观看视频| 亚洲aⅴ怡春院| 欧美在线视频全部完| 亚洲日本乱码在线观看| jizz一区二区| 亚洲国产精品ⅴa在线观看| 国产尤物一区二区| 精品国产精品网麻豆系列| 蜜臀av一区二区在线免费观看 | 亚洲美女屁股眼交3| 99久久免费国产| 成人欧美一区二区三区在线播放| 成人免费的视频| 国产精品欧美一区喷水| caoporn国产一区二区| 国产精品久久久久久久久免费相片 | 欧美国产精品一区二区三区| 国产在线视频精品一区| 精品国产1区2区3区| 国产乱人伦精品一区二区在线观看 | 日韩专区欧美专区| 在线这里只有精品| 亚洲日穴在线视频| 懂色av中文字幕一区二区三区 | 日韩亚洲欧美在线观看| 香港成人在线视频| 欧美日韩aaa| 午夜私人影院久久久久| 91精品国产入口| 奇米色777欧美一区二区| 欧美另类久久久品| 亚洲乱码日产精品bd| av在线播放不卡| 亚洲视频中文字幕| 一本久久综合亚洲鲁鲁五月天| 亚洲成人资源在线| 欧美人伦禁忌dvd放荡欲情| 无码av中文一区二区三区桃花岛| 日韩一级二级三级精品视频| 日韩电影在线一区二区| 678五月天丁香亚洲综合网| 亚洲香肠在线观看| 精品粉嫩超白一线天av| 国产成人精品综合在线观看| 国产欧美精品一区二区三区四区 | 色婷婷精品大视频在线蜜桃视频| 综合精品久久久| 91精品国产福利| 国产资源在线一区| 中文在线资源观看网站视频免费不卡| 在线观看一区二区视频| 日本中文字幕不卡|