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

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

?? enc28j60.c

?? STM32F103VBT6連接網(wǎng)絡(luò)芯片ENC28J60的例子
?? C
字號(hào):
#include "includes.h"

static uint8_t Enc28j60Bank;static uint16_t NextPacketPtr;


uint8_t enc28j60ReadOp(uint8_t op, uint8_t address)	{	uint8_t dat = 0;
	
	ENC28J60_CSL();
	
	dat = op | (address & ADDR_MASK);
	SPI1_ReadWrite(dat);
	dat = SPI1_ReadWrite(0xFF);
	// do dummy read if needed (for mac and mii, see datasheet page 29)	if(address & 0x80)	    {
		dat = SPI1_ReadWrite(0xFF);
	    }	// release CS	ENC28J60_CSH();
	return dat;
	}

void enc28j60WriteOp(uint8_t op, uint8_t address, uint8_t data)	{
	uint8_t dat = 0;
	
	ENC28J60_CSL();
	// issue write command
	dat = op | (address & ADDR_MASK);
	SPI1_ReadWrite(dat);
	// write data
	dat = data;
	SPI1_ReadWrite(dat);
	ENC28J60_CSH();	}

void enc28j60ReadBuffer(uint16_t len, uint8_t* data)	{	ENC28J60_CSL();	// issue read command
	SPI1_ReadWrite(ENC28J60_READ_BUF_MEM);
	while(len)		{        len--;        // read data
        *data = (uint8_t)SPI1_ReadWrite(0);
        data++;		}	*data='\0';	ENC28J60_CSH();	}void enc28j60WriteBuffer(uint16_t len, uint8_t* data)	{	ENC28J60_CSL();	// issue write command
	SPI1_ReadWrite(ENC28J60_WRITE_BUF_MEM);
		while(len)		{		len--;		SPI1_ReadWrite(*data);
		data++;		}	ENC28J60_CSH();	}

void enc28j60SetBank(uint8_t address)	{	// set the bank (if needed)	if((address & BANK_MASK) != Enc28j60Bank)		{        // set the bank        enc28j60WriteOp(ENC28J60_BIT_FIELD_CLR, ECON1, (ECON1_BSEL1|ECON1_BSEL0));        enc28j60WriteOp(ENC28J60_BIT_FIELD_SET, ECON1, (address & BANK_MASK)>>5);        Enc28j60Bank = (address & BANK_MASK);		}	}uint8_t enc28j60Read(uint8_t address)	{	// set the bank	enc28j60SetBank(address);	// do the read	return enc28j60ReadOp(ENC28J60_READ_CTRL_REG, address);	}void enc28j60Write(uint8_t address, uint8_t data)	{	// set the bank	enc28j60SetBank(address);	// do the write	enc28j60WriteOp(ENC28J60_WRITE_CTRL_REG, address, data);	}void enc28j60PhyWrite(uint8_t address, uint16_t data)	{	// set the PHY register address	enc28j60Write(MIREGADR, address);	// write the PHY data	enc28j60Write(MIWRL, data);	enc28j60Write(MIWRH, data>>8);	// wait until the PHY write completes	while(enc28j60Read(MISTAT) & MISTAT_BUSY)
		{	    Del_10us(1);		}	}void enc28j60clkout(uint8_t clk)	{    //setup clkout: 2 is 12.5MHz:	enc28j60Write(ECOCON, clk & 0x7);	}

void enc28j60Init(uint8_t* macaddr)	{	// initialize I/O	//enc28j60CSinit();	ENC28J60_CSH();

    //enc28j60SetSCK();
    //enc28j60HWreset();	// perform system reset	enc28j60WriteOp(ENC28J60_SOFT_RESET, 0, ENC28J60_SOFT_RESET);	Del_1ms(250);	// check CLKRDY bit to see if reset is complete        // The CLKRDY does not work. See Rev. B4 Silicon Errata point. Just wait.	//while(!(enc28j60Read(ESTAT) & ESTAT_CLKRDY));	// do bank 0 stuff	// initialize receive buffer	// 16-bit transfers, must write low byte first	// set receive buffer start address	NextPacketPtr = RXSTART_INIT;        // Rx start	enc28j60Write(ERXSTL, RXSTART_INIT&0xFF);	enc28j60Write(ERXSTH, RXSTART_INIT>>8);	// set receive pointer address	enc28j60Write(ERXRDPTL, RXSTART_INIT&0xFF);	enc28j60Write(ERXRDPTH, RXSTART_INIT>>8);	// RX end	enc28j60Write(ERXNDL, RXSTOP_INIT&0xFF);	enc28j60Write(ERXNDH, RXSTOP_INIT>>8);	// TX start	enc28j60Write(ETXSTL, TXSTART_INIT&0xFF);	enc28j60Write(ETXSTH, TXSTART_INIT>>8);	// TX end	enc28j60Write(ETXNDL, TXSTOP_INIT&0xFF);	enc28j60Write(ETXNDH, TXSTOP_INIT>>8);	// do bank 1 stuff, packet filter:        // For broadcast packets we allow only ARP packtets        // All other packets should be unicast only for our mac (MAADR)        //        // The pattern to match on is therefore        // Type     ETH.DST        // ARP      BROADCAST        // 06 08 -- ff ff ff ff ff ff -> ip checksum for theses bytes=f7f9        // in binary these poitions are:11 0000 0011 1111        // This is hex 303F->EPMM0=0x3f,EPMM1=0x30	enc28j60Write(ERXFCON, ERXFCON_UCEN|ERXFCON_CRCEN|ERXFCON_PMEN);
	enc28j60Write(EPMM0, 0x3f);	enc28j60Write(EPMM1, 0x30);	enc28j60Write(EPMCSL, 0xf9);	enc28j60Write(EPMCSH, 0xf7);        //        //	// do bank 2 stuff	// enable MAC receive	enc28j60Write(MACON1, MACON1_MARXEN|MACON1_TXPAUS|MACON1_RXPAUS);	// bring MAC out of reset	enc28j60Write(MACON2, 0x00);	// enable automatic padding to 60bytes and CRC operations	enc28j60WriteOp(ENC28J60_BIT_FIELD_SET, MACON3, MACON3_PADCFG0|MACON3_TXCRCEN|MACON3_FRMLNEN|MACON3_FULDPX);	// set inter-frame gap (non-back-to-back)	enc28j60Write(MAIPGL, 0x12);	enc28j60Write(MAIPGH, 0x0C);	// set inter-frame gap (back-to-back)	enc28j60Write(MABBIPG, 0x12);	// Set the maximum packet size which the controller will accept        // Do not send packets longer than MAX_FRAMELEN:	enc28j60Write(MAMXFLL, MAX_FRAMELEN&0xFF);		enc28j60Write(MAMXFLH, MAX_FRAMELEN>>8);	// do bank 3 stuff	// write MAC address	// NOTE: MAC address in ENC28J60 is byte-backward	enc28j60Write(MAADR5, macaddr[0]);	enc28j60Write(MAADR4, macaddr[1]);	enc28j60Write(MAADR3, macaddr[2]);	enc28j60Write(MAADR2, macaddr[3]);	enc28j60Write(MAADR1, macaddr[4]);	enc28j60Write(MAADR0, macaddr[5]);

	enc28j60PhyWrite(PHCON1, PHCON1_PDPXMD);

	// no loopback of transmitted frames	enc28j60PhyWrite(PHCON2, PHCON2_HDLDIS);	// switch to bank 0	enc28j60SetBank(ECON1);	// enable interrutps	enc28j60WriteOp(ENC28J60_BIT_FIELD_SET, EIE, EIE_INTIE|EIE_PKTIE);	// enable packet reception	enc28j60WriteOp(ENC28J60_BIT_FIELD_SET, ECON1, ECON1_RXEN);	}// read the revision of the chip:uint8_t enc28j60getrev(void)	{	return(enc28j60Read(EREVID));	}

void enc28j60PacketSend(uint16_t len, uint8_t* packet)	{	// Set the write pointer to start of transmit buffer area	enc28j60Write(EWRPTL, TXSTART_INIT&0xFF);	enc28j60Write(EWRPTH, TXSTART_INIT>>8);
	// Set the TXND pointer to correspond to the packet size given	enc28j60Write(ETXNDL, (TXSTART_INIT+len)&0xFF);	enc28j60Write(ETXNDH, (TXSTART_INIT+len)>>8);
	// write per-packet control byte (0x00 means use macon3 settings)	enc28j60WriteOp(ENC28J60_WRITE_BUF_MEM, 0, 0x00);
	// copy the packet into the transmit buffer	enc28j60WriteBuffer(len, packet);
	// send the contents of the transmit buffer onto the network	enc28j60WriteOp(ENC28J60_BIT_FIELD_SET, ECON1, ECON1_TXRTS);
    // Reset the transmit logic problem. See Rev. B4 Silicon Errata point 12.	if( (enc28j60Read(EIR) & EIR_TXERIF) )
		{        enc28j60WriteOp(ENC28J60_BIT_FIELD_CLR, ECON1, ECON1_TXRTS);        }	}

// Gets a packet from the network receive buffer, if one is available.// The packet will by headed by an ethernet header.//      maxlen  The maximum acceptable length of a retrieved packet.//      packet  Pointer where packet data should be stored.// Returns: Packet length in bytes if a packet was retrieved, zero otherwise.uint16_t enc28j60PacketReceive(uint16_t maxlen, uint8_t* packet)	{	uint16_t rxstat;	uint16_t len;
	// check if a packet has been received and buffered	//if( !(enc28j60Read(EIR) & EIR_PKTIF) ){        // The above does not work. See Rev. B4 Silicon Errata point 6.	if( enc28j60Read(EPKTCNT) ==0 )
		{		return(0);        }	// Set the read pointer to the start of the received packet	enc28j60Write(ERDPTL, (NextPacketPtr));	enc28j60Write(ERDPTH, (NextPacketPtr)>>8);
	// read the next packet pointer	NextPacketPtr  = enc28j60ReadOp(ENC28J60_READ_BUF_MEM, 0);	NextPacketPtr |= enc28j60ReadOp(ENC28J60_READ_BUF_MEM, 0)<<8;
	// read the packet length (see datasheet page 43)	len  = enc28j60ReadOp(ENC28J60_READ_BUF_MEM, 0);	len |= enc28j60ReadOp(ENC28J60_READ_BUF_MEM, 0)<<8;
    len-=4; //remove the CRC count	// read the receive status (see datasheet page 43)	rxstat  = enc28j60ReadOp(ENC28J60_READ_BUF_MEM, 0);	rxstat |= enc28j60ReadOp(ENC28J60_READ_BUF_MEM, 0)<<8;	// limit retrieve length    if (len>maxlen-1)
		{        len=maxlen-1;    	}
        // check CRC and symbol errors (see datasheet page 44, table 7-3):        // The ERXFCON.CRCEN is set by default. Normally we should not        // need to check this.    if ((rxstat & 0x80)==0)
			{		    // invalid		    len=0;		    }
		else
			{            // copy the packet from the receive buffer            enc28j60ReadBuffer(len, packet);        	}	// Move the RX read pointer to the start of the next received packet	// This frees the memory we just read out	enc28j60Write(ERXRDPTL, (NextPacketPtr));	enc28j60Write(ERXRDPTH, (NextPacketPtr)>>8);
	// decrement the packet counter indicate we are done with this packet	enc28j60WriteOp(ENC28J60_BIT_FIELD_SET, ECON2, ECON2_PKTDEC);	return(len);	}



?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩中文字幕av电影| 国产欧美精品一区| 成人夜色视频网站在线观看| 国产精品传媒入口麻豆| 日韩免费视频一区| 91影视在线播放| 粉嫩嫩av羞羞动漫久久久| 亚洲成人免费视| 亚洲色图都市小说| 日韩精品一区二区三区三区免费 | 日本怡春院一区二区| 国产精品萝li| 久久精品在这里| 欧美精品一区二区三区在线播放 | 91麻豆swag| 国产成人午夜精品影院观看视频| 亚洲午夜电影在线观看| 中日韩av电影| 欧美国产丝袜视频| 久久久精品tv| 中文字幕精品三区| 久久蜜臀精品av| 国产精品蜜臀在线观看| 国产女主播视频一区二区| 日韩一级大片在线观看| 欧美一级免费大片| 欧美电影免费观看完整版| 日韩一区二区三区四区| 91精品免费观看| 日韩一二三区不卡| 精品国产一区二区精华| 欧美精品一区二区在线播放| xnxx国产精品| 中文字幕的久久| 亚洲色欲色欲www| 丝袜a∨在线一区二区三区不卡| 日韩黄色在线观看| 精品一区二区三区不卡| 成人天堂资源www在线| 色婷婷av一区| 久久综合久久综合久久| 中文字幕免费观看一区| 亚洲高清久久久| 精品无人码麻豆乱码1区2区 | 亚洲高清一区二区三区| 奇米精品一区二区三区在线观看| 蜜臀av一级做a爰片久久| 国产精品99久久久久久宅男| 97se狠狠狠综合亚洲狠狠| 91麻豆精品国产自产在线 | 亚洲激情男女视频| 秋霞午夜av一区二区三区| 国产98色在线|日韩| 制服丝袜一区二区三区| 国产精品家庭影院| 麻豆91精品91久久久的内涵| 色婷婷激情一区二区三区| 久久尤物电影视频在线观看| 亚洲国产视频a| av在线一区二区| 国产日韩欧美精品在线| 久久国产乱子精品免费女| 欧美在线你懂得| 亚洲三级电影全部在线观看高清| 国产精品一区专区| 精品999久久久| 精品一区二区三区的国产在线播放| 欧美日韩一级视频| 一二三四区精品视频| 99精品欧美一区二区蜜桃免费| 久久久久久久国产精品影院| 三级亚洲高清视频| 欧美男人的天堂一二区| 免费在线观看精品| 日韩欧美一区二区久久婷婷| 美女视频一区二区三区| 欧美白人最猛性xxxxx69交| 奇米色777欧美一区二区| 日韩精品一区国产麻豆| 国产精品一区二区在线播放 | 久久毛片高清国产| 国产一区二区中文字幕| 日本一区二区三区四区在线视频| 国产一区二区三区免费| 国产人久久人人人人爽| 99视频一区二区| 亚洲精品免费在线播放| 这里是久久伊人| 国产精品中文欧美| 一区二区三区毛片| 国产乱对白刺激视频不卡| 日韩中文字幕麻豆| 成人动漫av在线| 久久久久亚洲蜜桃| 91小视频在线观看| 日韩国产在线一| 日本一区二区在线不卡| 欧洲视频一区二区| 狠狠色综合色综合网络| 亚洲欧美日韩国产中文在线| 777午夜精品视频在线播放| 韩国毛片一区二区三区| 亚洲视频免费观看| 久久精品亚洲一区二区三区浴池| 色欧美片视频在线观看| 国产精品一二三区| 日韩成人一区二区| 亚洲美女免费视频| 久久一区二区三区四区| 欧美日韩黄色影视| 成人三级在线视频| 国内精品国产成人| 免费成人美女在线观看| 亚洲黄色片在线观看| 国产精品色哟哟| 亚洲精品在线免费播放| 日韩小视频在线观看专区| 在线精品视频小说1| 91免费视频网| 99riav久久精品riav| 成人做爰69片免费看网站| 国产精品中文字幕日韩精品| 老汉av免费一区二区三区| 日韩电影在线一区| 日韩电影免费一区| 蜜臀va亚洲va欧美va天堂| 免费成人你懂的| 国产原创一区二区三区| 国产精品一卡二| 高清在线成人网| 91在线视频播放| 欧美日韩久久久一区| 欧美高清视频一二三区| 欧美一区二区三区爱爱| 日韩一级免费一区| 久久久美女艺术照精彩视频福利播放| 日韩亚洲欧美综合| 欧美国产精品专区| 亚洲激情中文1区| 日韩主播视频在线| 国产黄色91视频| 日本高清不卡aⅴ免费网站| 在线精品亚洲一区二区不卡| 欧美日本国产视频| 久久久亚洲精品一区二区三区| 中文字幕一区二区三区av| 悠悠色在线精品| 捆绑紧缚一区二区三区视频| 床上的激情91.| 色妹子一区二区| 日韩精品一区二区三区中文精品| 国产欧美一区二区三区沐欲| 亚洲超碰97人人做人人爱| 国产一区二区三区免费| 欧美日韩国产综合一区二区三区| 欧美本精品男人aⅴ天堂| 亚洲影视资源网| 国产盗摄女厕一区二区三区 | 欧美精品丝袜中出| 久久久精品国产99久久精品芒果 | 久久精品国产久精国产爱| 91一区一区三区| 日本一区二区综合亚洲| 天天影视涩香欲综合网| av一二三不卡影片| 久久蜜桃av一区精品变态类天堂 | 福利一区二区在线观看| 日韩欧美美女一区二区三区| 亚洲午夜电影在线观看| 成人福利视频网站| 欧美激情一区在线| 国产精品自产自拍| 国产亚洲精品免费| 国产成人日日夜夜| 久久久美女毛片| 国产69精品久久久久毛片| 精品国产第一区二区三区观看体验| 视频一区免费在线观看| 7777精品伊人久久久大香线蕉完整版 | 日韩电影在线看| 日韩免费看网站| 极品少妇一区二区| 久久久久国产精品人| 久久er精品视频| 欧美v国产在线一区二区三区| 三级成人在线视频| 欧美成人a在线| 国产九色精品成人porny| 国产精品视频在线看| 成人性生交大合| 一区二区三区不卡视频| 欧美精品欧美精品系列| 毛片不卡一区二区| 国产欧美日韩久久| 欧美性极品少妇| 精品一区二区免费| 亚洲欧美偷拍另类a∨色屁股| 欧美午夜一区二区| 韩日av一区二区| 亚洲成人一区二区在线观看|