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

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

?? w5100.c

?? 韓國Wiznet公司的W5100芯片在keil c環境下的間接總線的例程。
?? C
?? 第 1 頁 / 共 2 頁
字號:
/********************************************************************************
	提供商:成都浩然電子有限公司
	網  址:http://www.hschip.com

    時  間: 2007-11-30

    本軟件包括5個部分:
    	1. W5100初始化
    	2. W5100的Socket初始化
    	3. Socket連接
    	   如果Socket設置為TCP服務器模式,則調用Socket_Listen()函數,W5100處于偵聽狀態,直到遠程客戶端與它連接。
    	   如果Socket設置為TCP客戶端模式,則調用Socket_Connect()函數,
    	                                  每調用一次Socket_Connect(s)函數,產生一次連接,
    	                                  如果連接不成功,則產生超時中斷,然后可以再調用該函數進行連接。
    	   如果Socket設置為UDP模式,則調用Socket_UDP函數
    	4. Socket數據接收和發送
    	5. W5100中斷處理

    置W5100為服務器模式的調用過程:W5100_Init()-->Socket_Init(s)-->Socket_Listen(s),設置過程即完成,等待客戶端的連接。
    置W5100為客戶端模式的調用過程:W5100_Init()-->Socket_Init(s)-->Socket_Connect(s),設置過程即完成,并與遠程服務器連接。
    置W5100為UDP模式的調用過程:W5100_Init()-->Socket_Init(s)-->Socket_UDP(s),設置過程即完成,可以與遠程主機UDP通信。

    W5100產生的連接成功、終止連接、接收數據、發送數據、超時等事件,都可以從中斷狀態中獲得。
********************************************************************************/
#include <stm32f10x_lib.h>			/* STM32F10x庫定義 */

#include"io_define.h"
#include"W5100.h"					/* 定義W5100的寄存器地址、狀態 */

#define TRUE	0xff
#define FALSE	0x00

typedef unsigned char SOCKET;
extern void Delay(unsigned int d);

/* 端口數據緩沖區 */
extern unsigned char Rx_Buffer[1460];			/* 端口接收數據緩沖區 */
extern unsigned char Tx_Buffer[1460];			/* 端口發送數據緩沖區 */

/* 網絡參數寄存器 */
extern unsigned char Gateway_IP[4];	     		/* Gateway IP Address */
extern unsigned char Sub_Mask[4];				/* Subnet Mask */
extern unsigned char Phy_Addr[6];  			/* Physical Address */
extern unsigned char IP_Addr[4];				/* Loacal IP Address */

extern unsigned char S0_Port[2];   			/* Socket0 Port number */
extern unsigned char S0_DIP[4];				/* Socket0 Destination IP Address */
extern unsigned char S0_DPort[2];				/* Socket0 Destination Port number */

extern unsigned char S1_Port[2];   			/* Socket1 Port number */
extern unsigned char S1_DIP[4];   			/* Socket1 Destination IP Address */
extern unsigned char S1_DPort[2];				/* Socket1 Destination Port number */

extern unsigned char S2_Port[2];				/* Socket2 Port number */
extern unsigned char S2_DIP[4];				/* Socket2 Destination IP Address */
extern unsigned char S2_DPort[2];				/* Socket2 Destination Port number */

extern unsigned char S3_Port[2];				/* Socket3 Port number */
extern unsigned char S3_DIP[4];				/* Socket3 Destination IP Address */
extern unsigned char S3_DPort[2];				/* Socket3 Destination Port number */

extern unsigned char S0_State;				/* Socket0 state recorder */
extern unsigned char S1_State;				/* Socket1 state recorder */
extern unsigned char S2_State;				/* Socket2 state recorder */
extern unsigned char S3_State;				/* Socket3 state recorder */
	#define S_INIT	0x01
	#define S_CONN	0x02

extern unsigned char S0_Data;			/* Socket0 receive data and transmit OK */
extern unsigned char S1_Data;			/* Socket1 receive data and transmit OK */
extern unsigned char S2_Data;			/* Socket2 receive data and transmit OK */
extern unsigned char S3_Data;			/* Socket3 receive data and transmit OK*/
	#define S_RECEIVE		0x01
	#define S_TRANSMITOK	0x02

extern unsigned char W5100_Interrupt;

/* UDP Destionation IP address and Port number */
unsigned char UDP_DIPR[4];
unsigned char UDP_DPORT[2];

/*****************************************************************
*/
void Write_W5100_Address(unsigned short addr)
{
	unsigned short i;

	/* 設置地址為0x01 */
	GPIO_SetBits(GPIOA, W5100_A0);
	GPIO_ResetBits(GPIOA, W5100_A1);

	/* 輸出地址值 */
	i=GPIO_ReadOutputData(GPIOB);
	i &= 0x00ff;
	i = i | (addr & 0xff00);
	GPIO_Write(GPIOB, i);

	/* 置W5100的CS為低電平 */
	GPIO_ResetBits(GPIOA, W5100_CS);
	GPIO_ResetBits(GPIOA, W5100_WR);
	/*寫入地址高8位 */
	GPIO_SetBits(GPIOA, W5100_WR);
	/* 置W5100的CS為高電平 */
	GPIO_SetBits(GPIOA, W5100_CS);


	/* 設置地址為0x02 */
	GPIO_ResetBits(GPIOA, W5100_A0);
	GPIO_SetBits(GPIOA, W5100_A1);

	/* 輸出地址值 */
	i=GPIO_ReadOutputData(GPIOB);
	i &= 0x00ff;
	i = i | (addr<<8);
	GPIO_Write(GPIOB, i);

	/* 置W5100的CS為低電平 */
	GPIO_ResetBits(GPIOA, W5100_CS);
	GPIO_ResetBits(GPIOA, W5100_WR);
	/*寫入地址低8位 */
	GPIO_SetBits(GPIOA, W5100_WR);
	/* 置W5100的CS為高電平 */
	GPIO_SetBits(GPIOA, W5100_CS);
	
	/* 設置地址為0x11 */
	GPIO_SetBits(GPIOA, W5100_A0);
}

/*****************************************************************
程序名:Read_W5100
輸入: 地址
輸出: 無
返回: 讀取的數據
說明:從W5100指定的地址讀取一個字節
*****************************************************************/
unsigned char Read_W5100(void)
{
	unsigned short i;

	GPIO_InitTypeDef  GPIO_InitStructure;

	/* 設置數據端口為輸入狀態 */
	GPIO_InitStructure.GPIO_Pin  = W5100_DATA;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
	GPIO_Init(GPIOB, &GPIO_InitStructure);

	/* 置W5100的CS為低電平 */
	GPIO_ResetBits(GPIOA, W5100_CS);
	/* 讀取數據 */
	GPIO_ResetBits(GPIOA, W5100_RD);
	GPIO_SetBits(GPIOA, W5100_RD);
	i=GPIO_ReadInputData(GPIOB);
	/* 置W5100的CS為高電平 */
	GPIO_SetBits(GPIOA, W5100_CS);

	/* 設置為輸出狀態 */
	GPIO_InitStructure.GPIO_Pin  = W5100_DATA;
	GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_Init(GPIOB, &GPIO_InitStructure);

	i >>= 8;
	return i;
}

/*****************************************************************
程序名:Write_W5100
輸入: 地址,字節數據
輸出: 無
返回: 無
說明:將一個字節寫入W5100指定的地址
*****************************************************************/
void Write_W5100(unsigned short dat)
{
	unsigned short i;

	/* 輸出數據到端口 */
	i=GPIO_ReadOutputData(GPIOB);
	i &= 0x00ff;
	i = i | (dat<<8);
	GPIO_Write(GPIOB, i);

	/* 置W5100的CS為低電平 */
	GPIO_ResetBits(GPIOA, W5100_CS);
	/* 寫命令 */
	GPIO_ResetBits(GPIOA, W5100_WR);
	GPIO_SetBits(GPIOA, W5100_WR);
	/* 置W5100的CS為高電平 */
	GPIO_SetBits(GPIOA, W5100_CS);
}

/*------------------------------------------------------------------------------
						W5100初始化函數
在使用W5100之前,對W5100初始化
------------------------------------------------------------------------------*/
void W5100_Init(void)
{
	unsigned short i;

	/* 地址為0x00 */
	GPIO_ResetBits(GPIOA, W5100_A0|W5100_A1);

	/* Set W5100 Indirect Bus, address increase */
	i=GPIO_ReadOutputData(GPIOB);
	i &= 0x00ff;
	i |= 0x0300;				
	GPIO_Write(GPIOB, i);

	/* 選中 W5100 */
	GPIO_ResetBits(GPIOA, W5100_CS);
	GPIO_ResetBits(GPIOA, W5100_WR);
	/* 寫入數據 */
	GPIO_SetBits(GPIOA,W5100_WR);
	GPIO_SetBits(GPIOA, W5100_CS);

	Delay(100);						/*延時100ms,自己定義該函數*/

	/*設置網關(Gateway)的IP地址,4字節 */
	/*使用網關可以使通信突破子網的局限,通過網關可以訪問到其它子網或進入Internet*/
	Write_W5100_Address(W5100_GAR);
	for(i=0;i<4;i++)
		Write_W5100(Gateway_IP[i]);			/*Gateway_IP為4字節unsigned char數組,自己定義*/

	/*設置子網掩碼(MASK)值,4字節。子網掩碼用于子網運算*/
	Write_W5100_Address(W5100_SUBR);
	for(i=0;i<4;i++)
		Write_W5100(Sub_Mask[i]);			/*SUB_MASK為4字節unsigned char數組,自己定義*/

	/*設置物理地址,6字節,用于唯一標識網絡設備的物理地址值
	該地址值需要到IEEE申請,按照OUI的規定,前3個字節為廠商代碼,后三個字節為產品序號
	如果自己定義物理地址,注意第一個字節必須為偶數*/
	Write_W5100_Address(W5100_SHAR);
	for(i=0;i<6;i++)
		Write_W5100(Phy_Addr[i]);			/*PHY_ADDR6字節unsigned char數組,自己定義*/

	/*設置本機的IP地址,4個字節
	注意,網關IP必須與本機IP屬于同一個子網,否則本機將無法找到網關*/
	Write_W5100_Address(W5100_SIPR);
	for(i=0;i<4;i++)
		Write_W5100(IP_Addr[i]);			/*IP_ADDR為4字節unsigned char數組,自己定義*/

	/*設置發送緩沖區和接收緩沖區的大小,參考W5100數據手冊*/
	Write_W5100_Address(W5100_RMSR);
	Write_W5100(0x55);			/*Socket Rx memory size=2k*/
	Write_W5100_Address(W5100_TMSR);
	Write_W5100(0x55);		/*Socket Tx mempry size=2k*/

	/* 設置重試時間,默認為2000(200ms) */
	Write_W5100_Address(W5100_RTR);
	Write_W5100(0x07);
	Write_W5100(0xd0);

	/* 設置重試次數,默認為8次 */
	Write_W5100_Address(W5100_RCR);
	Write_W5100(8);

	/* 啟動中斷,參考W5100數據手冊確定自己需要的中斷類型
	IMR_CONFLICT是IP地址沖突異常中斷
	IMR_UNREACH是UDP通信時,地址無法到達的異常中斷
	其它是Socket事件中斷,根據需要添加 */
	Write_W5100_Address(W5100_IMR);
	Write_W5100(IMR_CONFLICT|IMR_UNREACH|IMR_S0_INT|IMR_S1_INT|IMR_S2_INT|IMR_S3_INT);
}
/****************************************************************************
                            Detect Gateway
input:  	None
Output: 	None
Return: 	if fail to detect gateway, return FALSE
		if detect the gateway, return TRUE
****************************************************************************/
unsigned char Detect_Gateway(void)
{
	unsigned char i;

	Write_W5100_Address(W5100_S0_MR);
	Write_W5100(S_MR_TCP);					/*設置socket0為TCP模式 */

	Write_W5100_Address(W5100_S0_CR);
	Write_W5100(S_CR_OPEN);					/*打開socket0*/

	Write_W5100_Address(W5100_S0_SSR);
	if(Read_W5100()!=S_SSR_INIT)
	{
		Write_W5100_Address(W5100_S0_CR);
		Write_W5100(S_CR_CLOSE);			/*打開不成功,關閉Socket,然后返回 */
		return FALSE;
	}

	/*檢查網關及獲取網關的物理地址 */
	Write_W5100_Address(W5100_S0_DIPR);
	for(i=0;i<4;i++)
		Write_W5100(IP_Addr[i]+1);		/*向目的地址寄存器寫入與本機IP不同的IP值 */

	Write_W5100_Address(W5100_S0_CR);
	Write_W5100(S_CR_CONNECT);			/*打開socket0的TCP連接 */

	Delay(20);						/* 延時20ms */

	Write_W5100_Address(W5100_S0_DHAR);
	i=Read_W5100();			/*讀取目的主機的物理地址,該地址就是網關地址*/

	Write_W5100_Address(W5100_S0_CR);
	Write_W5100(S_CR_CLOSE);			/*關閉socket0*/

	if(i==0xff)
	{
		/**********沒有找到網關服務器,或沒有與網關服務器成功連接***********/
		/**********              自己添加處理代碼                ***********/
		return FALSE;
	}
	return TRUE;
}

/******************************************************************************
                           Socket處理, 其它3個Socket的處理可參照此程序
*****************************************************************************

						Socket初始化
如果成功則返回true, 否則返回false
-----------------------------------------------------------------------------*/
void Socket_Init(SOCKET s)
{
	unsigned int i;

	/*設置分片長度,參考W5100數據手冊,該值可以不修改*/
	Write_W5100_Address(W5100_S0_MSS+s*0x100);
	Write_W5100(0x05);		/*最大分片字節數=1460*/
	Write_W5100(0xb4);

	/* Set Socket Port number */
	switch(s)
	{
		case 0:
			Write_W5100_Address(W5100_S0_PORT);
			Write_W5100(S0_Port[0]);			/* Set Local Socket Port number */
			Write_W5100(S0_Port[1]);

			Write_W5100_Address(W5100_S0_DPORT);
			Write_W5100(S0_DPort[0]);	/* Set Destination port number */
			Write_W5100(S0_DPort[1]);
			
			Write_W5100_Address(W5100_S0_DIPR);
			for(i=0;i<4;i++)
				Write_W5100(S0_DIP[i]);	/* Set Destination IP Address */
			break;
		case 1:
			Write_W5100_Address(W5100_S1_PORT);
			Write_W5100(S1_Port[0]);	/* Set Local Socket Port number */
			Write_W5100(S1_Port[1]);
			
			Write_W5100_Address(W5100_S1_DPORT);
			Write_W5100(S1_DPort[0]);	/* Set Destination port number */
			Write_W5100(S1_DPort[1]);

			Write_W5100_Address(W5100_S1_DIPR);
			for(i=0;i<4;i++)
				Write_W5100(S1_DIP[i]);	/* Set Destination IP Address */
			break;
		case 2:
			Write_W5100_Address(W5100_S2_PORT);
			Write_W5100(S2_Port[0]);	/* Set Local Socket Port number */
			Write_W5100(S2_Port[1]);

			Write_W5100_Address(W5100_S2_DPORT);
			Write_W5100(S2_DPort[0]);	/* Set Destination port number */
			Write_W5100(S2_DPort[1]);

			Write_W5100_Address(W5100_S2_DIPR);
			for(i=0;i<4;i++)
				Write_W5100(S2_DIP[i]);	/* Set Destination IP Address */
			break;
		case 3:
			Write_W5100_Address(W5100_S3_PORT);
			Write_W5100(S3_Port[0]);	/* Set Local Socket Port number */
			Write_W5100(S3_Port[1]);

			Write_W5100_Address(W5100_S3_DPORT);
			Write_W5100(S3_DPort[0]);	/* Set Destination port number */
			Write_W5100(S3_DPort[1]);

			Write_W5100_Address(W5100_S3_DIPR);
			for(i=0;i<4;i++)
				Write_W5100(S3_DIP[i]);	/* Set Destination IP Address */
			break;
		default:
			break;
	}
}
/*-----------------------------------------------------------------------------
                           設置Socket為客戶端與遠程服務器連接
當本機Socket工作在客戶端模式時,引用該程序,與遠程服務器建立連接
如果設置成功則返回true,否則返回false

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品视频一区 二区 三区| 欧美一级电影网站| 欧美久久久久久久久中文字幕| 91精品国产入口| 亚洲欧洲国产专区| 裸体歌舞表演一区二区| 95精品视频在线| 久久精品一区蜜桃臀影院| 五月天久久比比资源色| 色综合久久天天| 久久午夜老司机| 奇米一区二区三区| 欧美日精品一区视频| 成人欧美一区二区三区白人| 国产精品一区久久久久| 欧美精品一区二区三区一线天视频| 亚洲一区自拍偷拍| av不卡在线观看| 国产精品丝袜91| 成人深夜视频在线观看| 久久久影视传媒| 91美女福利视频| 成人欧美一区二区三区白人 | 99久久久无码国产精品| 久久综合九色综合欧美亚洲| 蜜臀久久99精品久久久久久9| 欧美日韩免费高清一区色橹橹| 国产精品久久久久桃色tv| 国产电影一区在线| 国产天堂亚洲国产碰碰| 国产激情偷乱视频一区二区三区| 日韩精品一区二区三区视频在线观看| 午夜婷婷国产麻豆精品| 欧美影院一区二区| 亚洲va欧美va国产va天堂影院| 欧美亚洲国产一区二区三区va| 成人免费在线播放视频| 91搞黄在线观看| 亚洲va韩国va欧美va| 欧美日韩免费一区二区三区视频| 亚洲成av人片一区二区梦乃 | 欧美丰满少妇xxxxx高潮对白| 亚洲大片精品永久免费| 欧美一级xxx| 狠狠狠色丁香婷婷综合激情| 久久久久久综合| 成人av网站免费观看| 亚洲天堂2014| 欧美日韩夫妻久久| 九九热在线视频观看这里只有精品| 精品国精品自拍自在线| 国产91综合网| 一区二区三区中文在线观看| 欧美高清hd18日本| 久久精品久久精品| 日本一区二区久久| 欧美在线看片a免费观看| 久久精品国产一区二区三区免费看 | 久久国产剧场电影| 日本一区二区动态图| 欧美在线一区二区| 国产在线观看免费一区| 亚洲欧洲日韩在线| 欧美肥妇毛茸茸| 成人av资源站| 五月婷婷激情综合网| 久久久亚洲精品石原莉奈| 91一区二区在线| 麻豆精品精品国产自在97香蕉 | 国产在线播放一区| 夜夜嗨av一区二区三区中文字幕| 精品久久久久99| 在线免费亚洲电影| 国产麻豆成人传媒免费观看| 一区二区三区在线看| 久久久精品国产免大香伊| 欧美无乱码久久久免费午夜一区| 国产一区二区三区日韩| 夜夜精品浪潮av一区二区三区| 久久亚洲精精品中文字幕早川悠里| 色拍拍在线精品视频8848| 久久精品999| 亚洲成人av福利| 中文字幕在线观看不卡视频| 在线成人免费视频| 在线观看视频一区| av中文字幕一区| 国产一区二区日韩精品| 视频一区在线播放| 亚洲综合网站在线观看| 国产精品高潮久久久久无| 日韩免费在线观看| 欧美日韩一区二区在线视频| 99精品久久免费看蜜臀剧情介绍| 一区二区高清免费观看影视大全 | 久久精品水蜜桃av综合天堂| 欧美三级电影一区| 成人免费高清在线| 国内外成人在线| 欧美aa在线视频| 天堂一区二区在线| 一区二区三区欧美久久| 国产精品久久久久9999吃药| 久久久综合激的五月天| 欧美草草影院在线视频| 欧美精品一区二区三区蜜桃| 欧美三级韩国三级日本一级| 色婷婷久久综合| 成人视屏免费看| 国产1区2区3区精品美女| 国内精品伊人久久久久av一坑| 日本不卡一区二区三区| 亚洲成人在线网站| 午夜精品123| 亚洲成a人v欧美综合天堂| 麻豆精品视频在线观看免费 | 丰满岳乱妇一区二区三区| 久久国产尿小便嘘嘘尿| 免费久久99精品国产| 亚洲第一主播视频| 肉肉av福利一精品导航| 日韩电影一二三区| 日本中文字幕一区二区视频| 人禽交欧美网站| 精品无人码麻豆乱码1区2区| 国产一区二区三区在线观看精品| 久久99国产精品成人| 国产精品综合久久| 成人av资源站| 在线观看国产91| 欧美精品精品一区| 亚洲精品在线免费观看视频| 26uuuu精品一区二区| 国产精品视频在线看| 亚洲精品成人天堂一二三| 亚洲大片免费看| 激情综合色综合久久| 成人亚洲一区二区一| 欧洲视频一区二区| 日韩欧美一级二级三级久久久| 久久久久久夜精品精品免费| ●精品国产综合乱码久久久久| 一区二区久久久久| 亚洲久草在线视频| 日韩精品一二区| 狠狠色丁香久久婷婷综合丁香| 丰满亚洲少妇av| 欧美日韩精品免费观看视频| www激情久久| 一区二区三区免费看视频| 奇米色777欧美一区二区| 成人高清视频在线| 日本一区二区视频在线观看| 亚洲乱码国产乱码精品精小说 | 91久久精品网| 日韩精品一区二区三区在线观看 | 成人午夜电影久久影院| 欧洲av在线精品| 久久久久久久久免费| 亚洲男人天堂av网| 国产不卡高清在线观看视频| av网站一区二区三区| 欧美男人的天堂一二区| 国产日韩欧美综合一区| 亚洲午夜久久久久久久久电影网 | 亚洲视频精选在线| 轻轻草成人在线| 色视频一区二区| 国产欧美一二三区| 免费久久99精品国产| 91福利在线导航| 国产欧美日韩在线| 日韩中文字幕91| 在线精品视频小说1| 日本一区二区三区高清不卡| 蜜桃久久久久久| 欧美三级电影精品| 亚洲免费在线观看视频| 成人影视亚洲图片在线| 久久亚洲精精品中文字幕早川悠里| 亚洲国产日韩综合久久精品| 91在线高清观看| 欧美国产精品久久| 国产精品自在欧美一区| 日韩美女视频在线| 日本欧美一区二区| 91麻豆精品国产综合久久久久久| 亚洲自拍欧美精品| 色综合中文字幕| 亚洲人成人一区二区在线观看| 国产夫妻精品视频| 久久九九影视网| 国产精品一区二区x88av| 久久综合九色综合97婷婷| 青青草国产成人av片免费| 欧美国产日韩a欧美在线观看| 国产麻豆视频一区| 久久久久亚洲蜜桃| 国产二区国产一区在线观看| 久久久不卡网国产精品一区|