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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? halstack.c

?? * "Copyright (c) 2006 Robert B. Reese ("AUTHOR")" * All rights reserved. * (R. Reese, reese@ece.
?? C
字號:
/*
  V0.1 Initial Release   10/July/2006  RBR

*/
#include <stdio.h>


#include "lrwpan_config.h"
#include "hal.h"
#include "halstack.h"
#include "console.h"
#include "debug.h"
#include "ieee_lrwpan_defs.h"
#include "memalloc.h"



static RADIO_FLAGS local_radio_flags;



static UINT16 radio_panid;
static SADDR radio_saddr;
static BYTE current_channel;  //channels 11 to 16



typedef enum _RADIO_STATE_ENUM {
  RADIO_STATE_OFF,
  RADIO_STATE_ON
}RADIO_STATE_ENUM;

RADIO_STATE_ENUM radio_state;

#ifdef  LRWPAN_ASYNC_INTIO

static volatile BYTE serio_rxBuff[LRWPAN_ASYNC_RX_BUFSIZE];
static volatile BYTE serio_rxHead, serio_rxTail;

#endif


//halInit contains both processor specific initialization
void halInit(void){
    radio_state = RADIO_STATE_OFF;
	local_radio_flags.val = 0;
	halInitUart();
	halInitMACTimer();
  }


//we are going to initialize the console to single character
//input, and no echo to emulate the micro

void halInitUart(void) {
 
  TX9 = 0;  TXEN = 1; // transmit enable  SYNC = 0; // async mode   BRGH = 1; // hi speed mode   halSetBaud(LRWPAN_DEFAULT_BAUDRATE);  TRISC7=1; // RC7 input    TRISC6=0; // RC6 output   RX9 = 0;  // 8-bit reception    SPEN = 1; // serial port enable    CREN = 0; // clear enable first   CREN = 1; // now enable first     
#ifdef LRWPAN_ASYNC_INTIO
  RCIE = 0; 
  serio_rxHead = 0;
  serio_rxTail = 0;
  RCIE = 1; 
  RCIP = 1;
  PEIE = 1; 
#endif
}

#ifdef  LRWPAN_ASYNC_INTIO
//get a character from serial port, uses interrupt driven IO
char halGetch(void){
    while(serio_rxTail == serio_rxHead);
    serio_rxTail++;
   if (serio_rxTail == LRWPAN_ASYNC_RX_BUFSIZE) serio_rxTail = 0;
   return (serio_rxBuff[serio_rxTail]);
}

BOOL halGetchRdy(void){
 return(serio_rxTail != serio_rxHead);
 }


#else

char halGetch(void){
  while(!RCIF);
  return(RCREG);
}

BOOL halGetchRdy(void){
 return(RCIF);
 }

#endif


//write a character to serial port
// Uses UART initialized by halInitUart

void halPutch(char c){
  while(!TXIF);
  TXREG = c;	
}

void halRawPut(char c){
  while(!TXIF);
  TXREG = c;	
}


//defined such that timer0 has a period of 1 symbol, or 16 us
//FOSC assumed to be some multiple of 4 MHZ

#define SYMBOL_FREQ  62500      //equals to symbols period of 16us




#define T0_PRESCALE ((FOSC/(SYMBOL_FREQ/SYMBOLS_PER_MAC_TICK()))/4)

#define MAX_WAIT_MS  (TO_PRESCALE*4*65536*1000)/FOSC  //maximum wait in milliseconds

#if T0_PRESCALE > 256
#error "Timer 0 PRESCALE TOO LARGE"
#endif

#if (T0_PRESCALE == 256) 
  #define T0_PREBITS 7
#elif (T0_PRESCALE == 128) 
  #define T0_PREBITS 6
#elif (T0_PRESCALE == 64) 
  #define T0_PREBITS 5
#elif (T0_PRESCALE == 32) 
  #define T0_PREBITS 4
#elif (T0_PRESCALE == 16) 
  #define T0_PREBITS 3
#elif (T0_PRESCALE == 8) 
  #define T0_PREBITS 2
#elif (T0_PRESCALE == 4) 
  #define T0_PREBITS 1
#elif (T0_PRESCALE == 2) 
  #define T0_PREBITS 0
#else
  #error "Illegal Timer0 prescale!"
#endif

#define T3_PRESCALE 8
#if (T3_PRESCALE == 8) 
  #define T3_PREBITS (3 << 4)
#elif (T3_PRESCALE == 4) 
  #define T3_PREBITS  (2<< 4)
#elif (T3_PRESCALE == 2) 
  #define T0_PREBITS  (1 << 4)
#elif (T3_PRESCALE == 1)
   #define T3_PREBITS  0
#else
  #error "Illegal Timer0 prescale!"
#endif


#define T3PERIOD   ((FOSC/4)/T3_PRESCALE)/SLOWTICKS_PER_SECOND

#if (T3PERIOD > 65535) 
 #error "slow_tics_per_second define is too small!"
#endif


UINT8 halMacTimerOflow;   //assumed incremented by interrupt service

//Timer0 used as MAC timer, Timer3/CCP1 capture compare as theuser periodic interrupt timer

void halInitMACTimer(void) {
   halMacTimerOflow =0;
   //setup Timer0
   T0CON = T0_PREBITS ; //convenient that all other bits beside prescale are '0'
   TMR0H = 0;
   TMR0L = 0;
   TMR0IF = 0;

#ifdef LRWPAN_ENABLE_SLOW_TIMER
   //setup Timer3, will use compare mode with CCP1
  T3CON = 0xC0 | T3_PREBITS;   //uses TMR3 as clock source for compare modules
  TMR3H = 0;
  TMR3L = 0;
  TMR3IF = 0;
   //configure CCP1 as period register for Timer3
   CCP1IF = 0;
   CCP1CON = 0; //reset
   CCP1CON = 0x0A;   //software interrupt on timer match
   T3CCP1 = 0;
   T3CCP2 = 1;           //select timer3 as match source
  //setup the first match with CCP1
   //now configure interrupts
   TMR3IE = 0;
   CCPR1 = T3PERIOD;
   CCP1IP = 1;
   CCP1IE = 1;
   TMR3ON = 1;
 #endif
 
 
   TMR0IE = 1;
   //turn on the timers
   TMR0ON = 1;
   IPEN = 0;    //disable priorities
   GIEL = 1;


}

void halShutdown(void){
  //disable timer interrupts so that they don't wake us up
   TMR0IE = 0;
#ifdef LRWPAN_ENABLE_SLOW_TIMER
    CCP1IE = 0;
 #endif
   halDisableRadio();
}

void halWarmstart(void){
//enable timer interrupts 
  TMR0IE = 1;
#ifdef LRWPAN_ENABLE_SLOW_TIMER
    CCP1IE =1;
 #endif
}


//only works as long as SYMBOLS_PER_MAC_TICK is not less than 1
UINT32 halMacTicksToUs(UINT32 ticks){

   UINT32 rval;
   
   rval =  (ticks/SYMBOLS_PER_MAC_TICK())* (1000000/LRWPAN_SYMBOLS_PER_SECOND);
   return(rval);
}



//read the macTimer, assumes interrupts, Timer0 are enabled!
UINT32 halGetMACTimer(void)
{
     UINT8   iStatus;
     UINT32  rval;
    

   do {
     rval = TMR0L;      //freeze timer 0
     rval  +=  ((UINT16) TMR0H  << 8);
    SAVE_AND_DISABLE_GLOBAL_INTERRUPT(iStatus) ; 
    if (rval > 2) { //ok, trust that the Oflow byte is correctly incremented by ISR
      break;
    }
   RESTORE_GLOBAL_INTERRUPT(iStatus) ;  //renable global interrupt, allow to tick some more
  }
    while(1);
   //at this point, global interrupts are disabled, read overflow value
    rval  += ((UINT32) halMacTimerOflow) << 16;
   RESTORE_GLOBAL_INTERRUPT(iStatus) ;
   return (rval);
}


#ifdef LRWPAN_COMPILER_NO_RECURSION
UINT32 halISRGetMACTimer(void)
{
     UINT8   iStatus;
     UINT32  rval;
    

   do {
     rval = TMR0L;      //freeze timer 0
     rval  +=  ((UINT16) TMR0H  << 8);
    SAVE_AND_DISABLE_GLOBAL_INTERRUPT(iStatus) ; 
    if (rval > 2) { //ok, trust that the Oflow byte is correctly incremented by ISR
      break;
    }
   RESTORE_GLOBAL_INTERRUPT(iStatus) ;  //renable global interrupt, allow to tick some more
  }
    while(1);
   //at this point, global interrupts are disabled, read overflow value
    rval  += ((UINT32) halMacTimerOflow) << 16;
   RESTORE_GLOBAL_INTERRUPT(iStatus) ;
   return (rval);
}
#endif





UINT32 halMACTimerNowDelta(UINT32 x){
   UINT32 now;
   now = halGetMACTimer();
   now = (now - x);
   now = now & (UINT32) MACTIMER_MAX_VALUE;
   return(now);
}




void halUtilMemCopy(BYTE *dst, BYTE *src, BYTE len) {
	while (len) {
		*dst = *src;
		dst++;src++;
		len--;
	}
}




void halGetProcessorIEEEAddress(BYTE *buf) {

	buf[0] = aExtendedAddress_B0;
	buf[1] = aExtendedAddress_B1;
	buf[2] = aExtendedAddress_B2;
	buf[3] = aExtendedAddress_B3;
	buf[4] = aExtendedAddress_B4;
	buf[5] = aExtendedAddress_B5;
	buf[6] = aExtendedAddress_B6;
	buf[7] = aExtendedAddress_B7;

}

//this is a software delay loop, not meant for precision
void halWaitMs (UINT32 msecs){	UINT32	i, cnt;
 
      cnt = msecs;	do {		i = 20;		do {			halWaitUs(50);		} while(--i);	} while(--cnt);}



void halIdle(void) {
  CLRWDT(); //clear the watchdog timer	
}

//simple implementation that ignores the argument and that simply
//sleeps for the duration of the of the watchdog timer timeout
void halSleep(UINT32 msecs) {
   ENABLE_WDT() ;
   IDLEN = 0;
   SLEEP();
   NOP();
   DISABLE_WDT();
}



//ISR stuff



#ifdef MCC18
#pragma interruptlow HighISR
void HighISR(void)
#endif
#ifdef HI_TECH_C
void interrupt HighISR(void)
#endif
{
    //handle Timer0 interrupt first, mac timer overflow
   if (TMR0IF && TMR0IE) {
    TMR0IF=0;
     halMacTimerOflow++;
  }

#ifdef LRWPAN_ENABLE_SLOW_TIMER
  //CCP1IF use for period interrupt generation with TIMER3
  if (CCP1IF && CCP1IE) {
     CCP1IF = 0;
     CCPR1 = CCPR1 + T3PERIOD; //setup next interrupt
     evbIntCallback(); // call evb 
     //call the usrInterrupt
    usrSlowTimerInt();
   }
#endif

#ifdef  LRWPAN_ASYNC_INTIO
  if (RCIF && RCIE) {
     serio_rxHead++;
     if (serio_rxHead == LRWPAN_ASYNC_RX_BUFSIZE ) serio_rxHead = 0;
     serio_rxBuff[serio_rxHead] = RCREG;
  }

#endif

   
  evbRadioIntCallback();
  usrIntCallback();
   
}



//vector everything to high priority interrup
#if defined(MCC18)
#pragma code HighVector=0x08
void HighVector (void)
{
    _asm goto HighISR _endasm
}
#pragma code /* return to default code section */
#endif

#if defined(MCC18)
#pragma code lowhVector=0x18
void LowVector (void)
{
    _asm goto HighISR _endasm
}
#pragma code /* return to default code section */
#endif

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩视频在线第一区| 成人黄色大片在线观看| 91精品国产麻豆| 日韩精品一二三四| 精品久久人人做人人爽| 狠狠色丁香久久婷婷综| 中文字幕不卡一区| 色噜噜偷拍精品综合在线| 亚洲午夜免费福利视频| 日韩三级中文字幕| 国产精一品亚洲二区在线视频| 中文欧美字幕免费| 色婷婷综合久久久中文字幕| 亚洲v日本v欧美v久久精品| 日韩一区二区不卡| 国产99久久久国产精品免费看| 中文字幕一区二区三区在线不卡| 在线观看www91| 久久99久久99小草精品免视看| 欧美国产精品一区二区| 欧美日韩一区视频| 欧美视频你懂的| 日本欧美大码aⅴ在线播放| 欧美精品一区二区三区蜜桃视频| www.久久精品| 偷拍与自拍一区| 国产欧美一区二区精品性色| 色综合久久99| 麻豆91在线观看| 成人免费在线观看入口| 日韩视频在线你懂得| va亚洲va日韩不卡在线观看| 午夜在线成人av| 国产精品午夜久久| 欧美一区二区三区视频| 99久久婷婷国产综合精品电影 | 国产成人一区在线| 亚洲欧美日韩国产成人精品影院 | 精品少妇一区二区三区视频免付费| 成人精品高清在线| 免费成人av资源网| 亚洲欧美区自拍先锋| 精品国产乱码久久久久久夜甘婷婷| 色妹子一区二区| 国产一区二区三区电影在线观看| 亚洲电影你懂得| 国产精品久久久久久福利一牛影视| 欧美一区二区私人影院日本| 99久久精品国产导航| 国产在线视频不卡二| 午夜在线电影亚洲一区| 亚洲精品视频一区| 国产欧美日韩激情| 日韩精品一区二区三区中文精品| 欧美性淫爽ww久久久久无| 不卡一区中文字幕| 国产精品一区二区三区99| 蜜臀a∨国产成人精品| 亚洲成人av资源| 亚洲天天做日日做天天谢日日欢 | 欧美一级二级在线观看| 欧美中文字幕亚洲一区二区va在线 | 国产精品另类一区| 久久综合九色综合欧美就去吻| 777色狠狠一区二区三区| 在线精品视频小说1| 色婷婷综合视频在线观看| 不卡在线观看av| www.欧美.com| 99久精品国产| proumb性欧美在线观看| 成人av网站在线观看| 丁香激情综合国产| 成人手机在线视频| 福利视频网站一区二区三区| 懂色一区二区三区免费观看| 国产精品综合网| 岛国精品在线观看| 成人免费视频免费观看| 99在线精品一区二区三区| a在线播放不卡| 色狠狠综合天天综合综合| 91色视频在线| 在线精品亚洲一区二区不卡| 在线观看日韩毛片| 884aa四虎影成人精品一区| 欧美高清视频不卡网| 日韩精品中文字幕一区二区三区| 欧美不卡一区二区| 国产欧美一二三区| 中文字幕一区二区三区精华液| 亚洲欧美日韩久久| 亚洲成人激情av| 蜜臀久久久99精品久久久久久| 秋霞午夜鲁丝一区二区老狼| 老司机午夜精品99久久| 国产成人亚洲综合a∨婷婷 | 久久99九九99精品| 国产精品一区二区无线| av在线不卡网| 欧美肥妇free| 久久免费美女视频| 亚洲欧洲精品成人久久奇米网| 一区二区三区在线视频免费| 日本不卡的三区四区五区| 国产一区不卡视频| 一本大道久久a久久精二百| 欧美丰满嫩嫩电影| 国产色综合一区| 一区二区三区不卡视频| 麻豆精品国产传媒mv男同| 成人av中文字幕| 欧美精品黑人性xxxx| 久久久久久免费| 亚洲综合自拍偷拍| 国产一区视频导航| 在线看国产日韩| 久久久久久97三级| 亚洲v日本v欧美v久久精品| 国产精品一区二区无线| 欧美日韩中文一区| 欧美国产日本视频| 日韩不卡在线观看日韩不卡视频| 成人美女视频在线看| 欧美剧在线免费观看网站| 国产精品久久久久影院老司| 日韩在线一区二区| 色婷婷国产精品| 国产亚洲一区二区三区在线观看 | 欧美一区二区三区视频在线观看| 欧美激情一区在线观看| 日本午夜精品一区二区三区电影| 成人av在线播放网站| 欧美成人精品福利| 亚洲成人午夜影院| 91免费精品国自产拍在线不卡| 精品国产青草久久久久福利| 亚洲最新在线观看| www.亚洲激情.com| 久久亚洲一区二区三区四区| 日韩精品1区2区3区| 色综合久久综合| 中文字幕免费不卡| 国产在线观看免费一区| 欧美一级淫片007| 亚洲一区二区三区爽爽爽爽爽| eeuss鲁片一区二区三区在线观看| 精品久久久久久无| 日韩精品视频网站| 欧美视频在线一区二区三区| 亚洲欧洲另类国产综合| 国产精品1区2区| 精品国产污网站| 精品无人码麻豆乱码1区2区 | 狠狠色丁香婷综合久久| 91精品国产91久久综合桃花| 亚洲成人中文在线| 91国产丝袜在线播放| 亚洲三级免费电影| 99久久精品国产导航| 国产精品进线69影院| 成人黄色在线视频| 欧美国产日韩亚洲一区| 国产成人精品亚洲777人妖| 26uuu成人网一区二区三区| 精品一区二区免费看| 欧美成人a在线| 国产一区二区三区国产| 精品国产123| 国产精品1区2区| 中文乱码免费一区二区 | 欧美亚洲综合久久| 一区二区三区在线免费视频| 91久久国产最好的精华液| 亚洲制服丝袜在线| 91精品在线一区二区| 蜜桃av一区二区三区| 久久久久久久久久美女| 岛国一区二区三区| 亚洲精品免费视频| 欧美在线色视频| 免费观看在线色综合| 久久久久9999亚洲精品| 成年人午夜久久久| 亚洲国产精品一区二区久久| 欧美一区二区在线看| 国产一区免费电影| 自拍视频在线观看一区二区| 在线中文字幕一区二区| 免费人成黄页网站在线一区二区| 日韩欧美国产不卡| 成人一区二区三区中文字幕| ●精品国产综合乱码久久久久| 欧美三级日本三级少妇99| 免费高清视频精品| 国产精品素人一区二区| 欧美性生活影院| 国产精品996| 一区av在线播放| 欧美精品一区二区三区久久久|