日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

w5100的使用

發布時間:2023/12/29 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 w5100的使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2010年11月23日 星期二 12:13
前幾天從淘寶買了個w5100模塊,學習了一下。這個芯片真的不錯,集成了硬件tcp/ip協議棧。操作很簡單,主要是通過spi接口(當然也支持并口總線操作)配置網絡的相關ip 掩碼 物理地址 之類的值。

???? 參數配置好后,就是讀寫通訊的內容,w5100有個中斷引腳來指示通訊的完成,我們通過在中斷到來之后讀取狀態值,就會知道是那個端口的中斷,以此來進行相關數據解析。

???? w5100初始化程序:

?? Write_W5100(W5100_MODE,MODE_RST);?? /*軟復位W5100*/

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

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

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

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

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

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

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

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

/* 啟動中斷,參考W5100數據手冊確定自己需要的中斷類型
IMR_CONFLICT是IP地址沖突異常中斷
IMR_UNREACH是UDP通信時,地址無法到達的異常中斷
其它是Socket事件中斷,根據需要添加 */
Write_W5100(W5100_IMR,(IMR_CONFLICT|IMR_UNREACH|IMR_S0_INT|IMR_S1_INT|IMR_S2_INT|IMR_S3_INT));

主程序:

do
{
?? /* 設置W5100端口 */
?? W5100_Socket_Set();
??????????????? Socket_Listen(0);
?? /* 處理W5100中斷 */
?? if(W5100_Interrupt)
??? W5100_Interrupt_Process();

?? /* 如果Socket0接收到數據 */
?? if((S0_Data & S_RECEIVE) == S_RECEIVE)
?? {?? GPIO_SetBits(GPIOB, LED_DRIVE);
??? S0_Data&=~S_RECEIVE;
??? Process_Socket_Data(0);
?? }

?? /* 如果Socket1接收到數據 */
?? if((S1_Data & S_RECEIVE) == S_RECEIVE)
?? {????? GPIO_SetBits(GPIOB, LED_DRIVE);
??? S1_Data&=~S_RECEIVE;
??? Process_Socket_Data(1);
?? }

?? /* 如果Socket2接收到數據 */
?? if((S2_Data & S_RECEIVE) == S_RECEIVE)
?? {??? GPIO_SetBits(GPIOB, LED_DRIVE);
??? S2_Data&=~S_RECEIVE;
??? Process_Socket_Data(2);
?? }

?? /* 如果Socket3接收到數據 */
?? if((S3_Data & S_RECEIVE) == S_RECEIVE)
?? {????? GPIO_SetBits(GPIOB, LED_DRIVE);
??? S3_Data&=~S_RECEIVE;
??? Process_Socket_Data(3);
?? }

}while(1);

上圖

總結

以上是生活随笔為你收集整理的w5100的使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。