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

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

?? evboard.c

?? zigbee 協議堆棧 stack(簡化協議)
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*
  V0.1 Initial Release   10/July/2006  RBR

  V0.1.2.1
  7/17/2006 Fixed problem with maximum length packet (0x7F) 
    reception in interrupt service function. Was checking for overflow,
  when I should not have been, since the RX fifo is flushed after
  reception anyway.  RBR.

  V0.2.2.  
  8/2/2006 Fixed problem with checking of CRC byte.  RBR

  V0.2.3
   8/15/2006 Changed halSendPacket() packet so that TX FIFO is loaded
 before STXONCCA is done.

 V.02.3.4 
 Made change in halInitRadio() with regards to the CC2420_IOCFG0 if
 dynamic PANIDs are used to accept all BCN frames

*/
#include "compiler.h"
//configuration bits here.
#ifdef MCC18
#pragma config OSC = HSPLL, FCMEN=OFF, PWRT = OFF , BOREN = OFF, WDT = OFF, WDTPS = 1024 , MCLRE=ON, LPT1OSC = OFF, PBADEN=OFF, CCP2MX=PORTBE, STVREN=ON, LVP = OFF, XINST=OFF, DEBUG = OFF
#endif
#ifdef HI_TECH_C
__CONFIG(1,HSPLL);   // HSPLL oscillator
__CONFIG(2, BORDIS & PWRTDIS & WDTDIS & WDTPS1K); // PWRTEN disabled, BOR disabled, WDT disabled, 1:256 WDT prescaler
__CONFIG(3,PBDIGITAL & CCP2RB3); //portB digital ports, CCP2 to RB3
__CONFIG(4, DEBUGDIS & LVPDIS & XINSTDIS);  // Debug Disabled, lowVolt Program disabled, extended instructions disabled.

#endif

#include "lrwpan_common_types.h"   //types common acrosss most files
#include "ieee_lrwpan_defs.h"
#include "hal.h"
#include "halstack.h"
#include "debug.h"
#include "evboard.h"
#include "evbRadio.h"
#include "memalloc.h"
#include "console.h"
#include "phy.h"
#include "mac.h"
#include "neighbor.h"




RADIO_FLAGS local_radio_flags;

EVB_SW_STATE sw_state;

static UINT16 random_seed;
void evbInitRandomSeed(void);

void evbIntCallback(void){
//poll the switches
 sw_state.bits.s1_last_val = sw_state.bits.s1_val;
 sw_state.bits.s2_last_val = sw_state.bits.s2_val;
 sw_state.bits.s1_val = !(SW1_INPUT_VALUE()); //low true switch, so invert
 sw_state.bits.s2_val = !(SW2_INPUT_VALUE());//low true switch, so invert
 if (sw_state.bits.s1_last_val != sw_state.bits.s1_val) {
       sw_state.bits.s1_tgl = 1;
 }
 if (sw_state.bits.s2_last_val != sw_state.bits.s2_val) {
       sw_state.bits.s2_tgl = 1;
 }

 }

#define SW_POLL_TIME   MSECS_TO_MACTICKS(100)

UINT32 last_switch_poll;

void evbPoll(void){
//only do this if the slow timer not enabled since
//the slowtimer interrupt will handle the polling
#ifndef LRWPAN_ENABLE_SLOW_TIMER
// poll the switches
if ( halMACTimerNowDelta(last_switch_poll) > SW_POLL_TIME) {
    evbIntCallback();
    last_switch_poll = halGetMACTimer();
  }
#endif
}

//init the board
void evbInit(void){
   local_radio_flags.val = 0;
   sw_state.val = 0;
   last_switch_poll = halGetMACTimer();

   evbInitRandomSeed();
    //configure SW1, SW2
   SW_CONFIG();
   LED_CONFIG();
   LED1_OFF();
   LED2_OFF();
  RADIO_PORT_CONFIG();
}

void evbLedSet(BYTE lednum, BOOL state) {
    switch(lednum) {
       case 1:    if (state) LED1_ON(); else LED1_OFF(); break;
       case 2:    if (state) LED2_ON(); else LED2_OFF(); break;
    }
}

BOOL evbLedGet(BYTE lednum){
 switch(lednum) {
       case 1:    return(LED1_STATE());
       case 2:    return(LED2_STATE());
    }
  return FALSE;
}


//since PIC18 architecture has no good way of doing RANDOM nums, put this
//in the evboard file.

//random_seed variable is unitialized on purpose in RAM
//personalize random_seed by MAC address and TIMER0 value
void evbInitRandomSeed(void) {
  random_seed = random_seed ^ TMR0L ^  aExtendedAddress_B0;
  random_seed = random_seed << 8;
  random_seed = random_seed ^ TMR0L ^ aExtendedAddress_B1;
 if (random_seed == 0) {
   random_seed = TMR0H; 
   random_seed = random_seed << 8;
   random_seed = random_seed | TMR0L;
}
}

UINT8 halGetRandomByte(void) {
     BYTE bit;

     bit = 0;
     if (random_seed & 0x8000) bit = bit ^ 1;
     if (random_seed &  0x4000) bit = bit ^ 1;
     if (random_seed &  0x1000) bit = bit ^ 1;
     if (random_seed &  0x0008) bit = bit ^ 1;
    random_seed = random_seed << 1;
    if (bit) random_seed++;
    return(random_seed & 0xFF);  
}





void halSetRadioPANID(UINT16 panid){ 
  UINT8 n,intStatus;
  SAVE_AND_DISABLE_GLOBAL_INTERRUPT(intStatus) ;
   FASTSPI_WRITE_RAM_LE(&panid, CC2420RAM_PANID, 2, n);
  RESTORE_GLOBAL_INTERRUPT(intStatus);	
 DEBUG_STRING(DBG_INFO,"RadioPanID: ");
   DEBUG_UINT16(DBG_INFO,panid);
    DEBUG_STRING(DBG_INFO,"\n");
 
}


void halSetRadioShortAddr(SADDR saddr){
   UINT8 n,intStatus;
   SAVE_AND_DISABLE_GLOBAL_INTERRUPT(intStatus) ;
   FASTSPI_WRITE_RAM_LE(&saddr, CC2420RAM_SHORTADDR, 2, n);
   RESTORE_GLOBAL_INTERRUPT(intStatus); 
}

void halSetRadioIEEEAddress(void) {
 UINT8 n,intStatus;
  BYTE buf[8];

 halGetProcessorIEEEAddress(buf);
 SAVE_AND_DISABLE_GLOBAL_INTERRUPT(intStatus) ;
 FASTSPI_WRITE_RAM_LE(&buf[0], CC2420RAM_IEEEADDR, 8, n);
 RESTORE_GLOBAL_INTERRUPT(intStatus); 
}

void halRfWaitForCrystalOscillator(void) {
    BYTE spiStatusByte,intStatus;

    
} // halRfWaitForCrystalOscillator

//TODO
void halDisableRadio(void) {
  DISABLE_FIFOP_INT();
 SET_VREG_INACTIVE();
  SET_RESET_ACTIVE();
  halWaitMs(10); 
}


LRWPAN_STATUS_ENUM halSetChannel(BYTE channel){
    UINT16 f,intStatus;

	// Derive frequency programming from the given channel number
	f = (UINT16) (channel - 11); // Subtract the base channel 
	f = f + (f << 2);    		 // Multiply with 5, which is the channel spacing
	f = f + 357 + 0x4000;		 // 357 is 2405-2048, 0x4000 is LOCK_THR = 1
	
    // Write it to the CC2420
	 SAVE_AND_DISABLE_GLOBAL_INTERRUPT(intStatus) ;
	FASTSPI_SETREG(CC2420_FSCTRL, f);
    RESTORE_GLOBAL_INTERRUPT(intStatus);  
  return(LRWPAN_STATUS_SUCCESS);
}

//this is a desperation move to restart a stuck radio
//called by the SendPacket
void halResetRadio(void){
  SET_VREG_INACTIVE();
  halWaitMs(10); 
  halInitRadio(phy_pib.phyCurrentFrequency, phy_pib.phyCurrentChannel, local_radio_flags);
 //write our PANID, our short address
 halSetRadioPANID(mac_pib.macPANID);
 halSetRadioShortAddr(macGetShortAddr());
}


#define CRYSTAL_TIMEOUT 100  //in ms
LRWPAN_STATUS_ENUM halInitRadio(PHY_FREQ_ENUM frequency, BYTE channel, RADIO_FLAGS radio_flags)
{
      BYTE intStatus;
      UINT8 tmp;
     UINT32 start_tick;
     BYTE spiStatusByte;

  	// Make sure that the voltage regulator is on, and that the reset pin is inactive
      SET_RESET_ACTIVE();
      SET_VREG_ACTIVE();
      halWaitMs(1);   
     SET_RESET_INACTIVE();
     halWaitUs(10);

    SAVE_AND_DISABLE_GLOBAL_INTERRUPT(intStatus) ;
  
    // Register modifications
      
    // Poll the SPI status byte until the crystal oscillator is stable
   start_tick = halGetMACTimer();
    do {
          halGetRandomByte(); //shift the LFSR to try to make PANID more random
	    FASTSPI_STROBE(CC2420_SXOSCON);
	    FASTSPI_UPD_STATUS(spiStatusByte);
          if (! (!(spiStatusByte & (BM(CC2420_XOSC16M_STABLE))))) break;	   
    } while (halMACTimerNowDelta(start_tick) < MSECS_TO_MACTICKS(CRYSTAL_TIMEOUT ) );

     if (!(spiStatusByte & (BM(CC2420_XOSC16M_STABLE)))) {
          DEBUG_STRING(DBG_ERR,"halInitRadio: Crystal failed to stabilize\n");
          RESTORE_GLOBAL_INTERRUPT(intStatus); 
           return(LRWPAN_STATUS_PHY_RADIO_INIT_FAILED);
        }
   

#define PAN_COORDINATOR     0x10
#define ADR_DECODE               0x08
#define AUTO_CRC                   0x20
#define AUTO_ACK                   0x10

   // set some registers
  SPI_ENABLE();
 //with auto ack, auto_crc, pan_coor, the MDMCTRL0 reg should be a value of 0x1AF2
  // high byte MDCTRL0
        
        FASTSPI_TX_ADDR(CC2420_MDMCTRL0);
       //first, MSB
        tmp = 0x02;      //CCA hystersis, mid range
        if (radio_flags.bits.pan_coordinator) {
           tmp  =   tmp | PAN_COORDINATOR;
         }
      if (!radio_flags.bits.listen_mode) {
          // Turning on Address Decoding
         tmp = tmp | ADR_DECODE;
      }
      FASTSPI_TX(tmp);
      //now, LSB
      tmp = 0xC2;
       

    if (!radio_flags.bits.listen_mode) {
       //turn on autoCRC and autoACK, address decode
       tmp = tmp | AUTO_CRC | AUTO_ACK ;
     } 
      FASTSPI_TX(tmp);
   
    SPI_DISABLE();
    local_radio_flags = radio_flags;   //save these if we need to do a reset

    //set the rest
    FASTSPI_SETREG(CC2420_MDMCTRL1, 0x0500); // Set the correlation threshold = 20
#ifdef LRWPAN_COORDINATOR
    FASTSPI_SETREG(CC2420_IOCFG0, 0x007F);   // Set the FIFOP threshold to maximum
#else
#ifdef LRWPAN_USE_STATIC_PANID
 FASTSPI_SETREG(CC2420_IOCFG0, 0x007F);   // Set the FIFOP threshold to maximum
#else
 FASTSPI_SETREG(CC2420_IOCFG0, 0x087F);   // Set the FIFOP threshold to maximum, received all BCN frames
#endif
#endif
    FASTSPI_SETREG(CC2420_SECCTRL0, 0x01C4); // Turn off "Security enable"

    //have to set our Long address

      halSetRadioIEEEAddress();

    // Set the RF channel
    halSetChannel(channel);

   
      DEBUG_STRING(DBG_INFO, "Radio configured\n");
     //enable the receive

	FASTSPI_STROBE(CC2420_SRXON);
	FASTSPI_STROBE(CC2420_SFLUSHRX);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品香蕉一区二区三区| 国产精品免费丝袜| 天天综合天天做天天综合| 欧美一二三四在线| 亚洲成人动漫精品| 日韩美女在线视频| 国产精品99精品久久免费| 国产亚洲福利社区一区| 成人在线一区二区三区| 亚洲图片另类小说| 欧美日韩高清在线| 六月丁香综合在线视频| 久久精品人人爽人人爽| 99久免费精品视频在线观看| 亚洲尤物视频在线| 日韩一级二级三级精品视频| 国产精品资源网| 日韩一区欧美小说| 欧美日韩成人综合| 国产制服丝袜一区| 极品少妇xxxx精品少妇| 国产精品一区二区三区乱码| jiyouzz国产精品久久| 综合久久一区二区三区| 欧美三级电影在线观看| 全国精品久久少妇| 国产午夜亚洲精品不卡| 日本精品免费观看高清观看| 美女诱惑一区二区| 国产精品超碰97尤物18| 7777精品伊人久久久大香线蕉经典版下载 | 欧美亚洲一区三区| 秋霞午夜鲁丝一区二区老狼| 尤物av一区二区| 最新久久zyz资源站| 国产欧美一区二区三区沐欲| 国产乱码精品1区2区3区| 亚洲精品免费在线| 2欧美一区二区三区在线观看视频| www.99精品| 六月丁香综合在线视频| 亚洲精品成人悠悠色影视| 精品sm捆绑视频| 在线精品观看国产| 懂色av中文一区二区三区| 日韩电影在线一区| 亚洲精品国产无套在线观| 久久久久久一二三区| 在线成人av网站| 91麻豆成人久久精品二区三区| 国内成+人亚洲+欧美+综合在线| 亚洲一区二区精品3399| 国产精品久久夜| 久久美女高清视频| 日韩一区二区在线观看视频| 91在线观看美女| 国产黄人亚洲片| 久久电影国产免费久久电影| 亚洲成人免费在线观看| 一区二区三区四区精品在线视频 | 亚洲视频一区二区免费在线观看 | 精品日韩在线观看| 欧美日韩在线精品一区二区三区激情 | 欧美大白屁股肥臀xxxxxx| 在线免费观看一区| 91麻豆文化传媒在线观看| 国产成人福利片| 国产一区二区三区av电影 | 日韩精品一区二区三区四区视频 | 天堂午夜影视日韩欧美一区二区| 亚洲男人天堂av网| 国产精品欧美久久久久一区二区| 精品国产91久久久久久久妲己| 最好看的中文字幕久久| 欧美高清激情brazzers| 亚洲激情图片一区| 在线欧美日韩精品| 捆绑调教一区二区三区| 亚洲国产精品久久久男人的天堂 | 亚洲欧美日韩国产一区二区三区| 久久亚洲二区三区| 精品日韩成人av| 欧美xxxxx牲另类人与| 日韩一区二区三区精品视频 | 日韩欧美高清在线| 日韩午夜激情av| 日韩一级大片在线观看| 精品国精品自拍自在线| 久久综合999| 国产日韩欧美精品一区| 欧美国产禁国产网站cc| 日韩一区中文字幕| 亚洲精品日产精品乱码不卡| 亚洲综合小说图片| 日韩伦理电影网| 亚洲国产美女搞黄色| 久久国产精品99久久人人澡| 日韩成人精品在线| 狠狠色综合色综合网络| 国产精品白丝jk黑袜喷水| 成年人网站91| 日本道免费精品一区二区三区| 欧美日韩一区二区三区视频| 337p亚洲精品色噜噜噜| 久久精品一区二区三区不卡 | 91精品国产色综合久久不卡电影 | 免费视频最近日韩| 国产成人高清视频| 91福利精品视频| 欧美一区二区三区精品| 国产欧美日韩另类视频免费观看| 亚洲欧美偷拍三级| 日本色综合中文字幕| 成人免费毛片嘿嘿连载视频| 91一区二区三区在线播放| 欧美精品丝袜中出| 久久久久国产精品厨房| 亚洲美女屁股眼交| 捆绑调教美女网站视频一区| www.成人在线| 欧美一区二区成人6969| 国产精品欧美综合在线| 日韩国产精品久久久久久亚洲| 国产精品18久久久| 精品视频在线视频| 久久久国产一区二区三区四区小说| 亚洲精品国产一区二区三区四区在线| 日本麻豆一区二区三区视频| www.视频一区| 2014亚洲片线观看视频免费| 一区二区三区国产精华| 国产剧情在线观看一区二区| 精品视频在线看| 中文字幕在线一区免费| 免费xxxx性欧美18vr| 色999日韩国产欧美一区二区| 久久综合狠狠综合久久综合88 | 亚洲日本一区二区| 国产麻豆精品95视频| 欧美另类久久久品| 亚洲特级片在线| 国产美女久久久久| 日韩亚洲欧美一区| 一区二区三区电影在线播| 国产伦精品一区二区三区免费| 欧美日韩在线三区| 亚洲免费观看高清完整版在线观看| 九九九精品视频| 在线播放视频一区| 亚洲精品成人天堂一二三| 成人av免费在线观看| 精品国产乱码久久久久久久久| 爽好久久久欧美精品| 在线免费观看不卡av| 国产精品二区一区二区aⅴ污介绍| 蜜臀久久99精品久久久久宅男 | 成人污污视频在线观看| 久久九九影视网| 精品一区二区免费视频| 欧美一级片免费看| 水野朝阳av一区二区三区| 欧美在线观看视频在线| 一区二区三区在线视频播放| 成人avav影音| 国产精品美女一区二区三区| 懂色av一区二区夜夜嗨| 欧美国产一区二区| 国产精品 日产精品 欧美精品| 久久综合丝袜日本网| 国产一区91精品张津瑜| 久久婷婷成人综合色| 国产剧情一区二区| 欧美国产精品专区| 高清视频一区二区| 国产精品久久国产精麻豆99网站| 成人精品免费网站| 国产精品久久99| 色婷婷综合中文久久一本| 一区二区三区中文免费| 91久久久免费一区二区| 亚洲国产精品尤物yw在线观看| 欧美老女人在线| 日本亚洲天堂网| 2欧美一区二区三区在线观看视频 337p粉嫩大胆噜噜噜噜噜91av | 91精品国产欧美日韩| 蜜桃91丨九色丨蝌蚪91桃色| 精品成人a区在线观看| 国产成人精品在线看| 一区视频在线播放| 欧美亚洲高清一区| 日本欧美一区二区在线观看| 日韩欧美国产1| 丁香天五香天堂综合| 亚洲精品日日夜夜| 中文字幕一区二区5566日韩| 色婷婷久久久综合中文字幕 | 国产亚洲精品bt天堂精选| eeuss鲁一区二区三区| 亚洲综合成人网| 日韩免费观看2025年上映的电影 |