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

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

?? w5300.c

?? 帶硬件TCP/IP網卡芯片W5300 AVR下應用工程代碼
?? C
?? 第 1 頁 / 共 3 頁
字號:
/**
 * \file    w5300.c
 * Implementation of W5300 I/O fucntions
 *
 * This file implements the basic I/O fucntions that access a register of W5300( IINCHIP_REG).
 * 
 * Revision History :
 * ----------  -------  -----------  ----------------------------
 * Date        Version  Author       Description
 * ----------  -------  -----------  ----------------------------
 * 24/03/2008  1.0.0    MidnightCow  Release with W5300 launching
 * ----------  -------  -----------  ----------------------------
 * 01/05/2008  1.0.1    MidnightCow  Modify a logical error in iinchip_irq(). Refer to M_01052008
 * ----------  -------  -----------  ----------------------------
 * 15/05/2008  1.1.0    MidnightCow  Refer to M_15052008
 *                                   Delete getSn_DPORTR() because \ref Sn_DPORTR is write-only. 
 *                                   Replace 'Sn_DHAR2' with 'Sn_DIPR' in \ref getSn_DIPR().
 * ----------  -------  -----------  ----------------------------
 */

#include <stdio.h>
#include <avr/interrupt.h>

#include "md5.h"
#include "w5300.h"
#include "types.h"

/** 
 * TX memory size variables
 */
uint32 TXMEM_SIZE[MAX_SOCK_NUM];

/** 
 * RX memory size variables
 */
uint32 RXMEM_SIZE[MAX_SOCK_NUM];

/** 
 * The variables for SOCKETn interrupt
 */
uint8 SOCK_INT[MAX_SOCK_NUM];


/***********************
 * Basic I/O  Function *
 ***********************/
uint8 IINCHIP_READ(uint16 addr)
{
#if (__DEF_IINCHIP_ADDRESS_MODE__ == __DEF_IINCHIP_DIRECT_MODE__)
	 return ({*((vuint8*)(addr));});
#else
   uint8 data;
      *((vuint8*)IDM_AR) = addr >> 8;
      *((vuint8*)IDM_AR1) = addr;
	  if(addr &0x01) data = *((vuint8*)IDM_DR1);
	  else data = *((vuint8*)IDM_DR);

   return data;
#endif
}

void IINCHIP_WRITE(uint16 addr,uint8 data)
{
#if (__DEF_IINCHIP_ADDRESS_MODE__ == __DEF_IINCHIP_DIRECT_MODE__)  
	 ({*((vuint8*)(addr)) = data;});
#else
    *((vuint8*)IDM_AR) = addr >> 8;
	  *((vuint8*)IDM_AR1) = addr;
	  if(addr &0x01) *((vuint8*)IDM_DR1) = data;
	  else *((vuint8*)IDM_DR) = data;
#endif
}




uint16   getMR(void)
{
   return (IINCHIP_READ(MR_) << 8 | IINCHIP_READ(MR));
}
void     setMR(uint16 val)
{
   *((volatile uint8*)MR_) = val >> 8;
   *((volatile uint8*)MR) = val & 0xff;
}


/***********************************
 * COMMON Register Access Function *
 ***********************************/

/* Interrupt */ 

uint16 getIR(void)
{
   return (IINCHIP_READ(IR0) << 8 | IINCHIP_READ(IR1)); 
}

void setIR(uint8 s, uint16 val)
{
   IINCHIP_WRITE(IR,val&0xFF00);
}

uint16   getIMR(void)
{
   return ((IINCHIP_READ(IMR0) << 8) | IINCHIP_READ(IMR1));
}
void     setIMR(uint16 mask)
{
	IINCHIP_WRITE(IMR0, mask >> 8); 
	IINCHIP_WRITE(IMR1, mask & 0xff); 
}


/* Network Information */

void getSHAR(uint8 * addr)
{
	addr[0] = IINCHIP_READ(SHAR);
	addr[1] = IINCHIP_READ(SHAR1);
	addr[2] = IINCHIP_READ(SHAR2);
	addr[3] = IINCHIP_READ(SHAR3);
	addr[4] = IINCHIP_READ(SHAR4);
	addr[5] = IINCHIP_READ(SHAR5);
}
void setSHAR(uint8 * addr)
{
	uint8 k;

	for(k = 0; k < 6; k++) {
		IINCHIP_WRITE(SHAR+k, addr[k]);
	}
}
void getGAR(uint8 * addr)
{
	addr[0] = IINCHIP_READ(GAR);
	addr[1] = IINCHIP_READ(GAR1);
	addr[2] = IINCHIP_READ(GAR2);
	addr[3] = IINCHIP_READ(GAR3);
}
void setGAR(uint8 * addr)
{
	IINCHIP_WRITE((GAR),addr[0]);
	IINCHIP_WRITE((GAR1),addr[1]);
	IINCHIP_WRITE((GAR2),addr[2]);
	IINCHIP_WRITE((GAR3),addr[3]);
}

void getSUBR(uint8 * addr)
{
	addr[0] = IINCHIP_READ(SUBR);
	addr[1] = IINCHIP_READ(SUBR1);
	addr[2] = IINCHIP_READ(SUBR2);
	addr[3] = IINCHIP_READ(SUBR3);
}
void setSUBR(uint8 * addr)
{
	IINCHIP_WRITE((SUBR),addr[0]);
	IINCHIP_WRITE((SUBR1),addr[1]);
	IINCHIP_WRITE((SUBR2),addr[2]);
	IINCHIP_WRITE((SUBR3),addr[3]);
}

void getSIPR(uint8 * addr)
{
	addr[0] = IINCHIP_READ(SIPR);
	addr[1] = IINCHIP_READ(SIPR1);
	addr[2] = IINCHIP_READ(SIPR2);
	addr[3] = IINCHIP_READ(SIPR3);
}
void setSIPR(uint8 * addr)
{
	IINCHIP_WRITE((SIPR),addr[0]);
	IINCHIP_WRITE((SIPR1),addr[1]);
	IINCHIP_WRITE((SIPR2),addr[2]);
	IINCHIP_WRITE((SIPR3),addr[3]);
}


/* Retransmittion */

uint16   getRTR(void)
{
   return ((IINCHIP_READ(RTR0) << 8) | IINCHIP_READ(RTR1));
}
void     setRTR(uint16 timeout)
{
	IINCHIP_WRITE(RTR0, timeout >> 8);
	IINCHIP_WRITE(RTR1, timeout);
}

uint8    getRCR(void)
{
   return (uint8)IINCHIP_READ(RCR);
}
void     setRCR(uint8 retry)
{
   IINCHIP_WRITE(RCR,retry);
}

/* PPPoE */
uint16   getPATR(void)
{
   return ((IINCHIP_READ(PATR0) << 8) | IINCHIP_READ(PATR1));
}

uint8    getPTIMER(void)
{
   return (uint8)IINCHIP_READ(PTIMER);
}
void     setPTIMER(uint8 time)
{
   IINCHIP_WRITE(PTIMER,time);
}

uint8    getPMAGICR(void)
{
   return (uint8)IINCHIP_READ(PMAGICR);
}
void     setPMAGICR(uint8 magic)
{
   IINCHIP_WRITE(PMAGICR,magic);
}

uint16   getPSIDR(void)
{
   return ((IINCHIP_READ(PSIDR0) << 8) | IINCHIP_READ(PSIDR1));
}

void     getPDHAR(uint8* addr)
{
   addr[0] = (uint8)(IINCHIP_READ(PDHAR) >> 8);
   addr[1] = (uint8)IINCHIP_READ(PDHAR);
   addr[2] = (uint8)(IINCHIP_READ(PDHAR2) >> 8);
   addr[3] = (uint8)IINCHIP_READ(PDHAR2);
   addr[4] = (uint8)(IINCHIP_READ(PDHAR4) >> 8);
   addr[5] = (uint8)IINCHIP_READ(PDHAR4);
}


/* ICMP packets */

void     getUIPR(uint8* addr)
{
   addr[0] = (uint8)(IINCHIP_READ(UIPR) >> 8);
   addr[1] = (uint8)IINCHIP_READ(UIPR);
   addr[2] = (uint8)(IINCHIP_READ(UIPR2) >> 8);
   addr[3] = (uint8)IINCHIP_READ(UIPR2);   
}

uint16   getUPORTR(void)
{
   return ((IINCHIP_READ(UPORTR0) << 8) | IINCHIP_READ(UPORTR1));
}

uint16   getFMTUR(void)
{
   return ((IINCHIP_READ(FMTUR0) << 8) | IINCHIP_READ(FMTUR1));
}


/* PIN "BRYDn" */

uint8    getPn_BRDYR(uint8 p)
{
   return (uint8)IINCHIP_READ(Pn_BRDYR(p));
}
void     setPn_BRDYR(uint8 p, uint8 cfg)
{
   IINCHIP_WRITE(Pn_BRDYR(p),cfg);   
}


uint16   getPn_BDPTHR(uint8 p)
{
   return ((IINCHIP_READ(Pn_BDPTHR0(p) << 8)) | IINCHIP_READ(Pn_BDPTHR1(p)));   
}
void     setPn_BDPTHR(uint8 p, uint16 depth)
{
   IINCHIP_WRITE(Pn_BDPTHR0(p),depth >> 8);
   IINCHIP_WRITE(Pn_BDPTHR1(p),depth);
}


/* IINCHIP ID */
uint16   getIDR(void)
{
   return ((IINCHIP_READ(IDR) << 8) | IINCHIP_READ(IDR1));
}


/***********************************
 * SOCKET Register Access Function *
 ***********************************/

/* SOCKET control */

uint16   getSn_MR(SOCKET s)
{
   return ((IINCHIP_READ(Sn_MR_(s) << 8) | IINCHIP_READ(Sn_MR(s))));
}
void     setSn_MR(SOCKET s, uint8 mode)
{
   IINCHIP_WRITE(Sn_MR(s),mode);
}

uint8    getSn_CR(SOCKET s)
{
   return IINCHIP_READ(Sn_CR(s));
}
void     setSn_CR(SOCKET s, uint8 com)
{
   IINCHIP_WRITE(Sn_CR(s),com);
   while(IINCHIP_READ(Sn_CR(s))); // wait until Sn_CR is cleared.
}

uint8    getSn_IMR(SOCKET s)
{
   return (uint8)IINCHIP_READ(Sn_IMR(s));
}
void     setSn_IMR(SOCKET s, uint8 mask)
{
   IINCHIP_WRITE(Sn_IMR(s),mask);
}

uint8    getSn_IR(SOCKET s)
{
   #ifdef __DEF_IINCHIP_INT__    // In case of using ISR routine of iinchip
      return (uint8)IINCHIP_READ(Sn_IR(s));
   #else                         // In case of processing directly
      return (uint8)IINCHIP_READ(Sn_IR(s));
   #endif   
}
void     setSn_IR(SOCKET s, uint8 ir)
{
   #ifdef __DEF_IINCHIP_INT__    // In case of using ISR routine of iinchip
      IINCHIP_WRITE(Sn_IR(s),ir);
   #else                         // In case of processing directly
      IINCHIP_WRITE(Sn_IR(s),ir);
   #endif   
}


/* SOCKET information */

uint8    getSn_SSR(SOCKET s)
{
   uint8 ssr, ssr1;
   ssr = (uint8)IINCHIP_READ(Sn_SSR(s));     // first read

   while(1)
   {
      ssr1 = (uint8)IINCHIP_READ(Sn_SSR(s)); // second read
      if(ssr == ssr1) break;                 // if first == sencond, Sn_SSR value is valid.
      ssr = ssr1;                            // if first <> second, save second value into first.
   }
   return ssr;
}

void     getSn_DHAR(SOCKET s, uint8* addr)
{
   addr[0] = (uint8)(IINCHIP_READ(Sn_DHAR(s))>>8);
   addr[1] = (uint8)IINCHIP_READ(Sn_DHAR(s));
   addr[2] = (uint8)(IINCHIP_READ(Sn_DHAR2(s))>>8);
   addr[3] = (uint8)IINCHIP_READ(Sn_DHAR2(s));
   addr[4] = (uint8)(IINCHIP_READ(Sn_DHAR4(s))>>8);
   addr[5] = (uint8)IINCHIP_READ(Sn_DHAR4(s));
}

void     setSn_DHAR(SOCKET s, uint8* addr)
{
   IINCHIP_WRITE(Sn_DHAR(s),  ((uint16)(addr[0]<<8)) + addr[1]);
   IINCHIP_WRITE(Sn_DHAR2(s), ((uint16)(addr[2]<<8)) + addr[3]);
   IINCHIP_WRITE(Sn_DHAR4(s), ((uint16)(addr[4]<<8)) + addr[5]);
}

// M_15052008 : Delete this function
//uint16   getSn_DPORTR(SOCKET s)
//{
//   return IINCHIP_READ(Sn_DPORTR(s));
//}


void     setSn_DPORTR(SOCKET s, uint16 port)
{
 	 IINCHIP_WRITE(Sn_DPORTR0(s), port >> 8);
	 IINCHIP_WRITE(Sn_DPORTR1(s), port);
}

void     getSn_DIPR(SOCKET s, uint8* addr)
{
   addr[0] = (uint8)(IINCHIP_READ(Sn_DIPR(s))>>8);
   addr[1] = (uint8)IINCHIP_READ(Sn_DIPR(s));

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲一区二区欧美日韩| 国产麻豆精品theporn| 天天免费综合色| 国产福利一区二区三区| 欧美精品精品一区| 国产精品初高中害羞小美女文| 亚洲自拍与偷拍| 粉嫩久久99精品久久久久久夜| 56国语精品自产拍在线观看| 中文字幕一区二区三区不卡 | 日韩国产欧美在线播放| 东方aⅴ免费观看久久av| 欧美一区二区美女| 亚洲综合一区二区三区| 国产不卡视频一区二区三区| 91精品国产综合久久精品图片| 中文字幕乱码久久午夜不卡| 久久99久久久久| 在线综合+亚洲+欧美中文字幕| 一区二区三区蜜桃网| 97久久精品人人做人人爽| 国产人成一区二区三区影院| 久久99久国产精品黄毛片色诱| 欧美性生活大片视频| 亚洲欧美色一区| 一本大道久久a久久精二百| 国产精品久久久久久久裸模 | 蜜桃精品视频在线观看| 在线亚洲人成电影网站色www| 日韩毛片一二三区| 99re这里只有精品首页| 亚洲美女少妇撒尿| 色狠狠一区二区| 亚洲国产一区二区a毛片| 欧美午夜精品一区二区三区| 一区二区高清视频在线观看| 91老师国产黑色丝袜在线| 国产精品国产自产拍高清av| 99国内精品久久| 亚洲美女免费视频| 欧美艳星brazzers| 首页亚洲欧美制服丝腿| 91精品免费观看| 韩国三级在线一区| 国产欧美一区视频| 91亚洲精品一区二区乱码| 亚洲人妖av一区二区| 欧美最新大片在线看| 午夜精品成人在线视频| 日韩一区二区影院| 国产ts人妖一区二区| 国产精品卡一卡二| 欧美日韩午夜精品| 极品少妇xxxx偷拍精品少妇| 国产日韩欧美精品在线| 91蝌蚪porny成人天涯| 亚洲午夜久久久| 欧美精品一区二区高清在线观看| 国产麻豆精品视频| 亚洲综合男人的天堂| 精品免费视频一区二区| 成人免费毛片片v| 亚洲国产综合在线| 精品久久久久香蕉网| 成人精品免费视频| 亚洲成人第一页| 久久久久久久久99精品| 色天使色偷偷av一区二区| 免费看精品久久片| 亚洲免费毛片网站| 日韩一区二区三区在线| 99久久精品国产麻豆演员表| 日韩精品色哟哟| 国产精品国产三级国产有无不卡 | 日韩av一二三| 中文字幕一区二区三区精华液| 欧美精品久久一区| 成人免费av资源| 麻豆一区二区三| 亚洲国产毛片aaaaa无费看| 国产日韩精品一区二区三区 | 强制捆绑调教一区二区| 中文字幕制服丝袜成人av| 日韩一级免费一区| 在线看日本不卡| 成人小视频免费在线观看| 日韩成人精品在线观看| 中文字幕av一区二区三区高| 日韩一区二区三区视频| 在线观看亚洲一区| 成人深夜在线观看| 极品美女销魂一区二区三区| 香蕉成人伊视频在线观看| 亚洲欧洲美洲综合色网| 久久久99精品免费观看不卡| 91精品国产麻豆| 色呦呦国产精品| 成人sese在线| 国产91精品免费| 国产自产2019最新不卡| 秋霞国产午夜精品免费视频| 国产精品88av| 青娱乐精品视频| 日本中文字幕一区| 日韩精品免费视频人成| 亚洲九九爱视频| 综合激情网...| 国产精品伦一区| 久久精品一区二区| 精品第一国产综合精品aⅴ| 这里只有精品免费| 91精品国产综合久久小美女| 欧美视频一区二| 欧美精品日韩精品| 欧美另类一区二区三区| 欧美日韩另类国产亚洲欧美一级| 91天堂素人约啪| 色综合 综合色| 欧美中文字幕一区二区三区亚洲| 一本大道久久a久久精二百| 91香蕉视频在线| 色诱亚洲精品久久久久久| 色菇凉天天综合网| 欧洲精品中文字幕| 91精品婷婷国产综合久久竹菊| 91精品久久久久久蜜臀| 日韩午夜激情免费电影| 欧美成人vr18sexvr| 亚洲精品一区二区三区在线观看| 久久久精品tv| 日韩一区欧美小说| 性欧美疯狂xxxxbbbb| 美女脱光内衣内裤视频久久网站 | 久久亚洲免费视频| 国产日产欧美一区二区视频| 国产网红主播福利一区二区| 中文成人综合网| 国产精品国产三级国产aⅴ无密码| 1024成人网色www| 婷婷开心久久网| 欧美绝品在线观看成人午夜影视| 欧美日韩精品电影| 日韩欧美一级精品久久| 国产欧美视频在线观看| 亚洲精品日产精品乱码不卡| 天天做天天摸天天爽国产一区 | 国产亚洲综合色| 亚洲天堂福利av| 男人的j进女人的j一区| 粉嫩绯色av一区二区在线观看| 99久久精品一区二区| 91精品国产黑色紧身裤美女| 久久久久久久久久美女| 亚洲一区二区四区蜜桃| 精品一区二区三区免费视频| 成人av网站在线| 91精品国产91久久综合桃花 | ww亚洲ww在线观看国产| 亚洲欧美一区二区三区国产精品| 亚洲成人免费电影| 丰满放荡岳乱妇91ww| 欧美一区二区三区视频| 中文字幕一区二区三区四区| 蜜臀精品一区二区三区在线观看 | 中文字幕一区在线| 精品无人码麻豆乱码1区2区 | 精品国产sm最大网站免费看| 中文字幕欧美一| 蜜桃av一区二区| 日本韩国欧美国产| 国产欧美日本一区二区三区| 午夜伦理一区二区| 色综合天天综合网国产成人综合天 | 成人一区二区在线观看| 91.麻豆视频| 玉足女爽爽91| 大胆亚洲人体视频| 久久影院视频免费| 蜜臀av性久久久久蜜臀aⅴ四虎| 色婷婷久久久久swag精品| 国产午夜精品在线观看| 老司机精品视频一区二区三区| 欧美在线观看视频在线| ...xxx性欧美| 成人免费视频app| 久久免费精品国产久精品久久久久| 午夜亚洲福利老司机| 在线影视一区二区三区| 亚洲人被黑人高潮完整版| 成人av在线影院| 国产精品女主播av| 国产精品自在欧美一区| 日韩美一区二区三区| 天使萌一区二区三区免费观看| 欧美自拍偷拍一区| 亚洲自拍欧美精品| 欧美日韩精品一区二区三区蜜桃 | 精品一区二区av| 精品国产成人在线影院 | 久久精品一二三|