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

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

?? ip51_mac.c

?? 完整的TCP/IP源代碼,絕對好用
?? C
?? 第 1 頁 / 共 2 頁
字號:
#include "C:\wql\tcpipsocket\target.h"
#include "C:\wql\tcpipsocket\IP51_MAC.h"
#include "C:\wql\tcpipsocket\IP51_sfr.h"
#include "C:\wql\tcpipsocket\err.h"
//#include "reg52.h"
#include <stdio.h>

static	UINT8 far mrx_buf[MAC_RBUFFER_SIZE];
static  UINT8 far mtx_cache[MAC_TXCACHE_SIZE];
static	UINT8 far mtx_buf[MAC_TBUFFER_SIZE];
static	UINT8	PAUSE_ON	=	0;
static	ptr_2_c	idata	mrbuf_header;
static	ptr_2_c	idata	mrbuf_tailer;
static	ptr_2_c	idata	mtbuf_header;
static	ptr_2_c	idata	mtbuf_tailer;
static	ptr_2_c	idata	mtcache_header;
static	ptr_2_c	idata	rin_ptr;
static	ptr_2_c	idata	rout_ptr;
static	ptr_2_c	idata	tin_ptr;
static	ptr_2_c	idata	tout_ptr;
static	UINT16	idata rxbuf_lft=MAC_RBUFFER_SIZE;
static	UINT16	idata txbuf_lft=MAC_TBUFFER_SIZE;
		UINT8	idata rx_pkt_nums=0;
static	UINT8	idata tx_pkt_nums=0;
static	restart	=	0;
/*the pkt_num indicate the number of packets 
in the mac recieve buffer
ATTENTION:there should no more than 255
          packet in the buffer
*/
static	ptr_2_c	idata	rin_stk[3];
static	ptr_2_c	idata	rout_stk[3];
void
Init_mac(void)
{
  UINT8		couten_bk;
/*********************************************/
/**********Initial the global var*************/
/*********************************************/
  rin_ptr.ptr		=	&mrx_buf[0];
  rout_ptr.ptr	=	&mrx_buf[0];
  tin_ptr.ptr		=	&mtx_buf[0];
  tout_ptr.ptr	=	&mtx_buf[0];
  mrbuf_header.ptr	=	&mrx_buf[0];
  mrbuf_tailer.ptr	=	&mrx_buf[MAC_RBUFFER_SIZE-1];
  mtbuf_header.ptr	=	&mtx_buf[0];
  mtbuf_tailer.ptr	=	&mtx_buf[MAC_TBUFFER_SIZE-1];
  mtcache_header.ptr=	&mtx_cache[0];

/*********************************************/
/**********Initial the MAC Core***************/
/*********************************************/
  //soft reset the MAC core
  MADDR =	0x00; //select IP51-MAC's MAC1 reg
  MDATH =	0x80; //reset MAC
  MDATL =	0x00;
  MDATH	=	0x00;//remove MAC rst
#ifdef	FULL_DX
  MDATL	|=	0x0c;
#endif//FULL_DX    
  
  MADDR =	0x01; //select IP51-MAC's MAC2 reg
  MDATH =	0x02;
  MDATL	=	0xB2; //auto PAD,Length check,Half-duplex,append CRC
#ifdef	FULL_DX
  MDATL	|=	0x01;
#endif//FULL_DX 

  MADDR	=	0x02;
#ifdef	FULL_DX
  MDATL	=	0x15;
#else
  MDATL	=	0x12;
#endif

  MADDR	=	0x03;
  MDATH	=	0x0c;
  MDATL	=	0x12;

  MADDR	=	0x05;
  MDATH	=	ETH_MTUH; //set MTU
  MDATL	=	ETH_MTUL;
  
  //set Ethernet MAC address
  MADDR =	0x10;
  MDATH =	SA0;
  MDATL =	SA1;
  
  MADDR =	0x11;
  MDATH =	SA2;
  MDATL =	SA3;

  MADDR =	0x12;
  MDATH =	SA4;
  MDATL =	SA5;

  MADDR	=	0x13;
#ifdef	ETH_PRO//receive any pkt
  MDATL	|=	0x08;
#endif//ETH_PRO

#ifdef	ETH_PRM//receive any multicast pkt
  MDATL	|=	0x40;
#endif//ETH_PRM

#ifdef	ETH_AMC//receive qualified multicast pkt
  MDATL	|=	0x20;
#endif//ETH_AMC

#ifdef	ETH_ABC
  MDATL	|=	0x01;//accept broadcast pkts
#endif//ETH_ABC

  CTR		|=	0x01;//MAC CORE auto insert source MAC addr

  /*********************************************/
  /*********Initial MAC DMA*********************/
  /*********************************************/
  couten_bk	=	COUTEN;
  COUTEN	&=	0xcf;
  MRPG		=	mrbuf_header.p.type;//when mrx_buf is not in page 1,shoule pay attention
  MRBAL		=	mrbuf_header.p.low;
  MRBAH		=	mrbuf_header.p.high;
  MRBALE	=	mrbuf_tailer.p.low;
  MRBAHE	=	mrbuf_tailer.p.high;
  MRUTHE	=	0x08;//10--64byte;08--32byte

  MTPG		=	mtcache_header.p.type;//when mtx_buf is not in page 1,shoule pay attention
  COUTEN	=	couten_bk;

  INTMSK	|=	0xff;//enable MAC's interrupt
  couten_bk	=	INTST;//clear interrupt register
  EXIF =	0x00;//clear MAC interupt flag
  EIE	|=	0x08;//Enable MAC Interrupt


  MADDR	=	0x00;
  MDATL	=	0x01; //enable Reveive
  MRPG	|=	0x80; //start MAC RX DMA

  return;
}


UINT8
Rd_pkt_num(void)
{

  return	rx_pkt_nums;
}

UINT16
Rd_pkt_len(void)
{
 return ( ((mdma_hdr *)rout_ptr.ptr)->len.i );
}


err_t
Rd_pkt(UINT8 *desptr)
{
  if(rx_pkt_nums==0)
	return ERR_MRXEMP;
  else
  {
  	ptr_2_c	tmp_ptr;
	UINT8	couten_bk;
	UINT8	status;
	EA = 0;
//	rout_stk[2]	=	rout_stk[1];
//	rout_stk[1]	=	rout_stk[0];
//	rout_stk[0]	=	rout_ptr;
	couten_bk	=	COUTEN;
	COUTEN	|=	0x30;//select BOOT DMA
	status	=	((mdma_hdr *)rout_ptr.ptr)->sta;
	switch(status)
	{
	case	0xaa:
	//this is not a valid pkt due to buffer overflow,
	//which a at the end of buffer
	  rxbuf_lft	+=	mrbuf_tailer.ptr -rout_ptr.ptr;
	  rout_ptr	=	mrbuf_header;
	case	0x00://received a correct pkt
	case	0x01://received a correct pkt,but not in continuous buffer
	case	0x02:
	case	0x03:
	case	0x80:
	case	0x81:
	case	0x82:
	case	0x83:
	  BTSPAG	=	rout_ptr.p.type;//when mrx_buf is not in page 1,shoule pay attention
	  BTSCPL	=	rout_ptr.p.low;
	  BTSCPH	=	rout_ptr.p.high;
	  BTSHDL	=	mrbuf_header.p.low;
	  BTSHDH	=	mrbuf_header.p.high;
	  BTSEDL	=	mrbuf_tailer.p.low;
	  BTSEDH	=	mrbuf_tailer.p.high;	  
	  tmp_ptr.ptr	=	desptr;
	  BTTPAG	=	tmp_ptr.p.type;//when mrx_buf is not in page 1,shoule pay attention
	  BTTCPL	=	tmp_ptr.p.low;
	  BTTCPH	=	tmp_ptr.p.high;
	  BTTEDL	=	0xFF;//Attention:user should make sure the read buffer 
	  BTTEDH	=	0xFF;//is large enough,otherwise there will be data overlay
	  BTLTHL	=	((mdma_hdr *)rout_ptr.ptr)->len.u8.u8_2;
	  BTLTHH	=	((mdma_hdr *)rout_ptr.ptr)->len.u8.u8_1;
	  BTCTRL	|=	0x80;//start MEM copy

	  BTTPAG	=	BTSPAG;
	  BTTCPL	=	BTSCPL;
	  BTTCPH	=	BTSCPH;
	  BTLTHH	=	0x00;
	  BTLTHL	=	0x04; //copy the MAC's CRC--4 byte
	  BTCTRL	|=	0x80;

  	  rx_pkt_nums --;

	  {
		rxbuf_lft	+=	((mdma_hdr *)rout_ptr.ptr)->len.i + 4;
		if(((mdma_hdr *)rout_ptr.ptr)->len.i > 0x600)
		while(1);
/*	rlft_b[4]	=	rlft_b[3];
	rlft_b[3]	=	rlft_b[2];
	rlft_b[2]	=	rlft_b[1];
	rlft_b[1]	=	rlft_b[0];
	rlft_b[0]	=	rxbuf_lft;*/

/*  if(	  rxbuf_lft> MAC_RBUFFER_SIZE)
  {
    tmp_ptr.p.low	=	((mdma_hdr *)rout_ptr.ptr)->len.u8.u8_2;//for debug
    tmp_ptr.p.low	=	((mdma_hdr *)rout_ptr.ptr)->len.u8.u8_1;//for debug
	tmp_ptr.p.type	=	((mdma_hdr *)rout_ptr.ptr)->sta;//for debug;
    while(1);
  }*/

	    rout_ptr.p.low	=	BTSCPL;
		rout_ptr.p.high	=	BTSCPH;
	  }
	  break;
	default	://should no other value
    tmp_ptr.p.low	=	((mdma_hdr *)rout_ptr.ptr)->len.u8.u8_2;//for debug
    tmp_ptr.p.low	=	((mdma_hdr *)rout_ptr.ptr)->len.u8.u8_1;//for debug
	tmp_ptr.p.type	=	((mdma_hdr *)rout_ptr.ptr)->sta;//for debug;

	  while(1);
	  break;
	}
 
  if(PAUSE_ON && (rxbuf_lft >MAC_RXBUF_THRE))
  {
#ifdef FULL_DX
	Rx_pause(0);
#else
	Rx_bkp(0);																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																					
#endif
	PAUSE_ON	=	0;
  }
  EA	=	1;
  COUTEN	&=	0xCF;//select MAC DMA
  if(((MRPG & 0x80) == 0) && (rxbuf_lft > ETH_MTU))
	MRPG	|=	0x80;//enable MAC RXDMA

  COUTEN	=	couten_bk;
  
  if(status & 0x82)
  return	ERR_MRPKT_INVALID;
  return	ERR_OK;
  }
}


#ifdef FULL_DX
void Rx_pause(UINT8 sw)
{
  if(sw == 0)
  {
  	MFCTL |= 0x80;
	printf("pau 0\n");
  }
  else
  {
  	MFCTL |= 0X40;
	printf("pau 1\n");
  }

}
#else
void Rx_bkp(UINT8 bkp_t)
{
  if(bkp_t != 0)
    MFCTL	=	0x20 | (bkp_t & 0x0f);
  else
    MFCTL	=	0;

  return;
}
#endif//FULL_DX


void Tx_pkt(void)
{
  UINT8	couten_bk;
  int_2_c	len;
  EA	=	0;
  if(tx_pkt_nums == 0)
  return;

  couten_bk	=	COUTEN;
  COUTEN	|=	0x30;//select BOOT DMA

  //copy the pkt data to the send cache
  BTSPAG	=	tout_ptr.p.type;//Attention
  BTTPAG	=	mtcache_header.p.type;//
  BTSCPL	=	tout_ptr.p.low;
  BTSCPH	=	tout_ptr.p.high;
  BTSHDL	=	mtbuf_header.p.low;
  BTSHDH	=	mtbuf_header.p.high;
  BTSEDL	=	mtbuf_tailer.p.low;
  BTSEDH	=	mtbuf_tailer.p.high;
  BTTCPL	=	mtcache_header.p.low;
  BTTCPH	=	mtcache_header.p.high;
  BTTEDL	=	0xFF;//Attention Make sure tx cache is enough
  BTTEDH	=	0xFF;//otherwise data will be overlay
  BTLTHL	=	2;
  BTLTHH	=	0;
  BTCTRL	|=	0x80;//copy len data to mtx_cache
  len.i		=	*((UINT16 *)mtcache_header.ptr);
//  tout_ptr.p.low =	BTSCPL;//update tout_ptr
//  tout_ptr.p.high=	BTSCPH;//update tout_ptr
  BTLTHL	=	len.u8.u8_2;
  BTLTHH	=	len.u8.u8_1;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲一区二区三区四区在线观看| 欧美不卡在线视频| 狠狠色丁香婷婷综合| 日韩专区一卡二卡| 日韩高清不卡在线| 青青草原综合久久大伊人精品 | 亚洲欧美中日韩| 中文天堂在线一区| 亚洲三级理论片| 夜夜嗨av一区二区三区| 亚洲3atv精品一区二区三区| 日日摸夜夜添夜夜添精品视频| 日韩精品一二三| 麻豆精品在线看| 国产在线一区观看| 色狠狠色狠狠综合| 欧美日韩情趣电影| 日韩欧美在线不卡| 国产午夜亚洲精品羞羞网站| 国产精品久久久久久久久晋中| 亚洲欧洲性图库| 午夜视频在线观看一区二区三区 | 另类小说一区二区三区| 捆绑紧缚一区二区三区视频| 精品在线一区二区| 不卡一区二区三区四区| 色偷偷88欧美精品久久久| 欧美伊人精品成人久久综合97| 欧美特级限制片免费在线观看| 欧美人与性动xxxx| 久久久一区二区三区| 国产精品久久久久久久久晋中 | 成人午夜电影网站| 色香蕉久久蜜桃| 777午夜精品视频在线播放| 久久亚洲一区二区三区四区| 亚洲视频在线一区观看| 亚洲国产精品天堂| 国产一区二区三区四区五区入口| 99re66热这里只有精品3直播 | 亚洲sss视频在线视频| 国产精品自在欧美一区| 色综合一个色综合亚洲| 欧美成人猛片aaaaaaa| 中文字幕制服丝袜成人av| 青青草97国产精品免费观看| 白白色亚洲国产精品| 欧美成人官网二区| 亚洲蜜臀av乱码久久精品 | 91丨九色porny丨蝌蚪| 欧美福利电影网| 久久精品视频在线免费观看| 欧洲视频一区二区| 岛国一区二区三区| 欧美一级在线观看| 一区二区三区四区在线| 国产高清久久久久| 在线播放中文一区| 欧美日韩一区三区| 麻豆成人免费电影| 亚洲成人中文在线| 亚洲人成影院在线观看| 国产精品久久看| 国产精品久久久久久久久免费桃花 | 国产成人av一区| 99久久国产综合色|国产精品| 日韩亚洲欧美在线观看| 中文字幕一区二区三区四区| ...中文天堂在线一区| 在线亚洲+欧美+日本专区| 精品电影一区二区三区| 午夜天堂影视香蕉久久| 91在线精品一区二区| 欧美精彩视频一区二区三区| 日本女人一区二区三区| 日本丰满少妇一区二区三区| 亚洲色图制服丝袜| av一区二区三区四区| 国产视频一区在线播放| 紧缚奴在线一区二区三区| 欧美一级国产精品| 日韩av电影天堂| 51久久夜色精品国产麻豆| 首页国产丝袜综合| 在线播放91灌醉迷j高跟美女| 亚洲图片有声小说| 欧美中文字幕亚洲一区二区va在线| 中文字幕日韩一区| 99久久久免费精品国产一区二区| 亚洲欧洲日韩av| 欧美日韩美少妇| 婷婷中文字幕一区三区| 欧美一区二区三区在| 日日摸夜夜添夜夜添亚洲女人| 91精品国产综合久久久久久久久久 | 伊人色综合久久天天人手人婷| 91视视频在线观看入口直接观看www| 国产精品盗摄一区二区三区| 91亚洲精品一区二区乱码| 亚洲精品视频一区| 欧美高清你懂得| 久久99精品久久只有精品| 久久久久久久久久久久电影 | 在线亚洲一区二区| 免播放器亚洲一区| 中文在线一区二区| 欧美亚洲综合色| 麻豆精品久久久| 成人欧美一区二区三区白人| 欧美日韩和欧美的一区二区| 激情久久久久久久久久久久久久久久| 国产亚洲欧美中文| 欧美性猛片aaaaaaa做受| 狠狠久久亚洲欧美| 亚洲精品视频免费看| 日韩美女视频在线| 一本色道久久综合精品竹菊| 日韩不卡在线观看日韩不卡视频| 精品国产一区二区亚洲人成毛片| 成人精品鲁一区一区二区| 日韩av网站免费在线| 中文字幕一区二区三区精华液 | 精品一区中文字幕| 一区二区视频在线| 久久精品免费在线观看| 欧美日韩精品是欧美日韩精品| 国产精品123| 奇米777欧美一区二区| 亚洲同性gay激情无套| 精品sm在线观看| 欧美日本高清视频在线观看| 不卡一区中文字幕| 国产精品18久久久久| 日韩专区欧美专区| 亚洲成人一区二区在线观看| 国产精品国产三级国产aⅴ无密码| 欧美一级二级三级乱码| 91小视频免费观看| 成人精品免费网站| 风间由美一区二区三区在线观看 | 国产精品一区三区| 视频一区二区不卡| 亚洲成av人在线观看| 亚洲视频一区二区在线观看| 国产日韩欧美不卡在线| 久久天天做天天爱综合色| 日韩精品中文字幕在线一区| 欧美日韩美少妇| 欧美日韩精品电影| 欧美视频第二页| 欧美性极品少妇| 欧美中文字幕亚洲一区二区va在线| 99精品偷自拍| 99精品视频在线播放观看| 不卡欧美aaaaa| 一本到一区二区三区| 91蜜桃视频在线| 色婷婷亚洲一区二区三区| 色婷婷综合久久久久中文| 91精品福利在线| 欧美精品视频www在线观看| 欧美精品123区| 日韩一区二区在线播放| 精品国产不卡一区二区三区| 欧美tickling挠脚心丨vk| 精品久久久久香蕉网| 久久久激情视频| 亚洲色图欧美偷拍| 亚洲成人免费观看| 日本aⅴ免费视频一区二区三区| 日韩av中文字幕一区二区三区| 奇米精品一区二区三区在线观看| 久久精品国产精品青草| 国产91精品免费| 在线观看欧美精品| 9191精品国产综合久久久久久| 日韩视频免费观看高清完整版在线观看 | caoporn国产精品| 欧洲一区二区三区在线| 日韩欧美国产精品一区| 久久久99久久| 亚洲国产另类精品专区| 国产在线乱码一区二区三区| 色综合天天综合色综合av| 在线不卡欧美精品一区二区三区| 久久精品日产第一区二区三区高清版| 中文字幕日本不卡| 奇米在线7777在线精品| 成人免费观看男女羞羞视频| 欧美日韩国产小视频| 久久午夜电影网| 香蕉久久一区二区不卡无毒影院| 久久99精品久久久| 91久久免费观看| 精品国产一区二区三区av性色| 亚洲乱码日产精品bd| 狠狠色丁香婷综合久久| 欧美日韩精品综合在线| 亚洲精品中文字幕在线观看| 免播放器亚洲一区|