91在线观看视频-91在线观看视频-91在线观看免费视频-91在线观看免费-欧美第二页-欧美第1页

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

第二十七章 W55MH32?Interrupt示例

W55MH32 ? 來源:W55MH32 ? 作者:W55MH32 ? 2025-07-24 16:14 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

單芯片解決方案,開啟全新體驗——W55MH32 高性能以太網單片機

W55MH32是WIZnet重磅推出的高性能以太網單片機,它為用戶帶來前所未有的集成化體驗。這顆芯片將強大的組件集于一身,具體來說,一顆W55MH32內置高性能Arm? Cortex-M3核心,其主頻最高可達216MHz;配備1024KB FLASH與96KB SRAM,滿足存儲與數據處理需求;集成TOE引擎,包含WIZnet全硬件TCP/IP協議棧、內置MAC以及PHY,擁有獨立的32KB以太網收發緩存,可供8個獨立硬件socket使用。如此配置,真正實現了All-in-One解決方案,為開發者提供極大便利。

在封裝規格上,W55MH32 提供了兩種選擇:QFN100和QFN68。

W55MH32L采用QFN100封裝版本,尺寸為12x12mm,其資源豐富,專為各種復雜工控場景設計。它擁有66個GPIO、3個ADC、12通道DMA、17個定時器、2個I2C、5個串口、2個SPI接口(其中1個帶I2S接口復用)、1個CAN、1個USB2.0以及1個SDIO接口。如此豐富的外設資源,能夠輕松應對工業控制中多樣化的連接需求,無論是與各類傳感器、執行器的通信,還是對復雜工業協議的支持,都能游刃有余,成為復雜工控領域的理想選擇。同系列還有QFN68封裝的W55MH32Q版本,該版本體積更小,僅為8x8mm,成本低,適合集成度高的網關模組等場景,軟件使用方法一致。更多信息和資料請進入http://www.w5500.com/網站或者私信獲取。

此外,本W55MH32支持硬件加密算法單元,WIZnet還推出TOE+SSL應用,涵蓋TCP SSL、HTTP SSL以及 MQTT SSL等,為網絡通信安全再添保障。

為助力開發者快速上手與深入開發,基于W55MH32L這顆芯片,WIZnet精心打造了配套開發板。開發板集成WIZ-Link芯片,借助一根USB C口數據線,就能輕松實現調試、下載以及串口打印日志等功能。開發板將所有外設全部引出,拓展功能也大幅提升,便于開發者全面評估芯片性能。

若您想獲取芯片和開發板的更多詳細信息,包括產品特性、技術參數以及價格等,歡迎訪問官方網頁:http://www.w5500.com/,我們期待與您共同探索W55MH32的無限可能。

wKgZO2iBiBmAe3DyAACpGc5mWX8613.png

第二十七章 W55MH32Interrupt示例

本篇文章,我們將詳細介紹如何在W55MH32芯片上面使用TOE中斷功能,并通過實戰例程,為大家講解如何通過中斷進行回環數據測試。

該例程用到的其他網絡協議,請參考相關章節。有關W55MH32的初始化過程,請參考Network Install章節,這里將不再贅述。

1 TOE中斷簡介

在TOE中斷模式下,可以設置多種中斷事件,例如網絡建立連接、數據接收、數據發送完成等。當某個事件發生時,通過PD9通知給處理器,處理可以立即響應中斷,并進行相應的處理。這種方式可以提高系統的響應速度和效率,減少處理器在輪詢狀態下的資源浪費。

2中斷特點

實時性:在中斷事件發生后,處理器會暫停當前正在執行的任務,立刻響應中斷,當存在多個中斷處理時,處理器會基于優先級進行對應處理。

提高系統效率:如果沒有中斷機制,處理器需要不斷輪詢寄存器狀態,以檢查是否需要進行處理,這會占用大量的處理器資源,而中斷方式可以讓處理器專注運行主程序,需要處理時再去處理相應的任務,提高了系統資源的利用率。

事件驅動:中斷是由事件驅動的,這些事件可以是外部的(如外部設備的操作、信號變化等),也可以是內部的(如定時器溢出、計算結果異常等)

中斷服務程序:每個中斷源通常都有對應的中斷服務程序,它們是專門為處理該中斷事件而編寫的一段獨立的程序代碼

3 TOE中斷應用場景

網絡喚醒: 啟用魔術包中斷后,當W55MH32接收到魔術包時會觸發中斷,進而通知設備執行喚醒操作。

網絡配置: 啟用Socket接收中斷后,W55MH32在接收到數據時觸發中斷,系統在中斷觸發后才進行消息讀取配置,無需持續輪詢,從而節省系統資源。

錯誤處理:當遇到錯誤時(例如IP地址沖突,網絡不可達),W55MH32可以立即進行處理,提高系統的穩定性。

4 TOE中斷源

IP沖突:在收到ARP請求時,發現發送方IP與本地IP重復時觸發中斷。

目標不可抵達:在接收到ICMP(目的端口不可達)包后觸發中斷。

PPPoE連接關閉:在PPPoE模式下,PPPoE連接斷開時觸發中斷。

Magic Packet:當網絡喚醒模式啟用并通過UDP接收到Magic Packet網絡喚醒包時觸發中斷。

以下為Socket中斷:

發送完成:成功發送數據給對方時觸發中斷。

超時:當ARP超時或者TCP超時時觸發中斷。

接收到數據:接收到對方數據時觸發中斷。

關閉連接:接收到對方的FIN或 FIN/ACK包時觸發中斷。

建立連接:成功與對方建立連接時觸發中斷。

5使用中斷接收數據的流程

初始化中斷引腳;

開啟對應Socket的中斷功能,相關寄存器及描述如下:

wKgZO2iB6zGAdKIEAABWRVcs99o075.png

開啟Socket RECV中斷功能,相關寄存器及描述如下:

wKgZPGiB6zGALxSHAABzQlfmJfY004.png

編寫中斷處理函數,在接收到數據時進行處理。

6實現過程

接下來,我們看看如何在W55MH32上實現中斷回環數據測試。

注意:測試實例需要PC端和W55MH32處于同一網段。

步驟1:初始化中斷引腳

 1. void wizchip_int_init(void)
 2. {
 3.     GPIO_InitTypeDef GPIO_InitStructure;
 4.     NVIC_InitTypeDef NVIC_InitStructure;
 5.     EXTI_InitTypeDef EXTI_InitStructure;
 6.  
 7.     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD| RCC_APB2Periph_AFIO, ENABLE);
 8.  
 9.     GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_8;
10.     GPIO_InitStructure.GPIO_Speed= GPIO_Speed_50MHz;
11.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
12.     GPIO_Init(GPIOD,&GPIO_InitStructure);
13.  
14.  
15.     GPIO_EXTILineConfig(GPIO_PortSourceGPIOD, GPIO_PinSource8);
16.  
17.     NVIC_InitStructure.NVIC_IRQChannel                  = EXTI9_5_IRQn;
18.     NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority =2;
19.     NVIC_InitStructure.NVIC_IRQChannelSubPriority       =3;
20.     NVIC_InitStructure.NVIC_IRQChannelCmd               = ENABLE;
21.     NVIC_Init(&NVIC_InitStructure);
22.  
23.  
24.     EXTI_InitStructure.EXTI_Line   = EXTI_Line8;
25.     EXTI_InitStructure.EXTI_Mode   = EXTI_Mode_Interrupt;
26.     EXTI_InitStructure.EXTI_Trigger= EXTI_Trigger_Falling;
27.     EXTI_InitStructure.EXTI_LineCmd= ENABLE;
28.     EXTI_Init(&EXTI_InitStructure);
29. }
30.  

步驟2:中斷處理

 1. void EXTI9_5_IRQHandler(void)
 2. {
 3.     if(EXTI_GetITStatus(EXTI_Line8)== SET)
 4.     {
 5.         if(GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_8)== RESET)
 6.         {
 7.             wizchip_ISR();
 8.         }
 9.     }
10.     EXTI_ClearITPendingBit(EXTI_Line8);
11. }
12.  
13.  
14. /**
15.  * @brief Determine the interrupt type and store the value in I STATUS
16.  * @param none
17.  * @returnnone
18.  */
19. void wizchip_ISR(void)
20. {
21.     uint8_t SIR_val=0;
22.     uint8_t tmp, sn;
23.     SIR_val= getSIR();
24.     if(SIR_val!=0xff)
25.     {
26.         setSIMR(0x00);
27.         for(sn=0; sn< _WIZCHIP_SOCK_NUM_; sn++)
28.         {
29.             tmp?=?0;
30.             if?(SIR_val?& IR_SOCK(sn))
31.             {
32.                 tmp?          = getSn_IR(sn);
33.                 I_STATUS[sn]?|= tmp;
34.                 tmp?         &=?0x0f;
35.                 setSn_IR(sn, tmp);
36.             }
37.         }
38.         setSIMR(0xff);
39.     }
40. }
41.  

在TOE成功觸發中斷后,會調用wizchip_ISR()函數,在這里會記錄中斷標志位并清空中斷標志。

步驟3:開啟中斷功能

1.     setSIMR(0x01);// enable socket0 interrupt
2.     setSn_IMR(SOCKET_ID,0x0f);//enable all interrupt functions of socket 0.
3.  

步驟4:主循環中運行TCP回環服務器

1. void loopback_tcps_interrupt(uint8_t sn,uint8_t*buf,uint16_t port)
 2. {
 3.     uint16_t len=0;
 4.     uint8_t destip[4];
 5.     uint16_t destport;
 6.  
 7.     if(I_STATUS[sn]== SOCK_CLOSED)
 8.     {
 9.         if(!ch_status[sn])
10.         {
11. #ifdef INTERRUPT_DEBUG
12.             printf("%d:TCP server startrn", sn);
13. #endif
14.             ch_status[sn]= ready_status;
15.  
16.             if(socket(sn,Sn_MR_TCP, port,0x00)!= sn)
17.             {
18.                 ch_status[sn]= closed_status;
19.             }
20.             else
21.             {
22. #ifdef INTERRUPT_DEBUG
23.                 printf("%d:Socket openedrn", sn);
24. #endif
25.                 listen(sn);
26. #ifdef INTERRUPT_DEBUG
27.                 printf("%d:Listen, TCP server loopback, port [%d]rn", sn, port);
28. #endif
29.             }
30.         }
31.     }
32.     if(I_STATUS[sn]&Sn_IR_CON)
33.     {
34.         getSn_DIPR(sn, destip);
35.         destport= getSn_DPORT(sn);
36. #ifdef INTERRUPT_DEBUG
37.         printf("%d:Connected - %d.%d.%d.%d : %drn", sn, destip[0], destip[1], destip[2], destip[3], destport);
38.  
39. #endif
40.         ch_status[sn] = connected_status;
41.         I_STATUS[sn] &=~(Sn_IR_CON);
42.     }
43.  
44.     if(I_STATUS[sn]&Sn_IR_DISCON)
45.     {
46.         printf("%d:Socket disconnectedrn", sn);
47.         if((getSn_RX_RSR(sn))>0)
48.         {
49.             if(len> ETHERNET_BUF_MAX_SIZE)
50.             {
51.                 len= ETHERNET_BUF_MAX_SIZE;
52.             }
53.             recv(sn, buf, len);
54.             buf[len]=0x00;
55.             printf("%d:recv data:%srn", sn, buf);
56.             I_STATUS[sn]&=~(Sn_IR_RECV);
57.             send(sn, buf, len);
58.         }
59.         disconnect(sn);
60.         ch_status[sn] = closed_status;
61.         I_STATUS[sn] &=~(Sn_IR_DISCON);
62.     }
63.  
64.     if(I_STATUS[sn]&Sn_IR_RECV)
65.     {
66.         setIMR(0x00);
67.         I_STATUS[sn]&=~(Sn_IR_RECV);
68.         setIMR(0xff);
69.         if((len= getSn_RX_RSR(sn))>0)
70.         {
71.             if(len> ETHERNET_BUF_MAX_SIZE)
72.             {
73.                 len= ETHERNET_BUF_MAX_SIZE;
74.             }
75.             len     = recv(sn, buf, len);
76.             buf[len]=0x00;
77.             printf("%d:recv data:%srn", sn, buf);
78.             send(sn, buf, len);
79.         }
80.     }
81.  
82.     if(I_STATUS[sn]&Sn_IR_SENDOK)
83.     {
84.         I_STATUS[sn]&=~(Sn_IR_SENDOK);
85.     }
86. }

進入函數后,首先檢查Socket狀態。如果Socket處于關閉狀態,則啟動一個TCP服務器。接著,根據記錄的中斷標志位判斷是否觸發了中斷,并根據中斷類型進行相應的處理。

7運行結果

燒錄例程運行后,首先可以看到進行了PHY鏈路檢測,然后打印了設置的網絡地址信息,接著是TCP中斷回環測試,W55MH32接收到Socket數據后觸發中斷并進行回傳。如下圖所示:

wKgZPGiB6zGAHo6AAAB7YlOo3d8508.png

8總結

本文講解了如何在 W55MH32芯片上使用 TOE中斷功能并進行回環數據測試,通過實戰例程展示了從初始化中斷引腳、處理中斷、開啟中斷功能到在主循環中運行 TCP回環服務器的完整過程。文章詳細介紹了 TOE中斷的概念、特點、應用場景、中斷源以及使用中斷接收數據的流程,幫助讀者理解其在提升系統響應速度和資源利用率方面的實際應用價值。

下一篇文章將講解在 W55MH32 芯片上實現以太網測速功能,解析其核心原理及在網絡性能評估中的應用,同時通過實戰例程講解如何借助 Jperf工具進行測速,敬請期待!

WIZnet是一家無晶圓廠半導體公司,成立于 1998年。產品包括互聯網處理器 iMCU?,它采用 TOE(TCP/IP卸載引擎)技術,基于獨特的專利全硬連線 TCP/IP。iMCU?面向各種應用中的嵌入式互聯網設備。

WIZnet在全球擁有 70多家分銷商,在香港、韓國、美國設有辦事處,提供技術支持和產品營銷。

香港辦事處管理的區域包括:澳大利亞、印度、土耳其、亞洲(韓國和日本除外)。

SF

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 單片機
    +關注

    關注

    6068

    文章

    45032

    瀏覽量

    651915
  • Interrupt
    +關注

    關注

    0

    文章

    9

    瀏覽量

    14672
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    第三十 W55MH32 HTTP_Server&amp;NetBIOS示例

    本文講解了如何在 W55MH32?芯片上實現 HTTP_Server?與 NetBIOS?功能,并通過 NetBIOS?訪問 HTTP?服務器網頁內容,通過實戰例程展示了在主循環中并行處理 HTTP?與 NetBIOS?相關事務的過程。
    的頭像 發表于 07-24 16:21 ?191次閱讀
    第三十<b class='flag-5'>章</b> <b class='flag-5'>W55MH32</b> HTTP_Server&amp;NetBIOS<b class='flag-5'>示例</b>

    第二十九章 W55MH32 Modbus_TCP_Server示例

    本文講解了如何在 W55MH32?芯片上實現 Modbus TCP?協議的服務器模式,通過實戰例程展示了從初始化 LED?相關函數、主循環調用處理函數到解析處理接收到的報文的完整過程。文章詳細介紹了
    的頭像 發表于 07-24 16:18 ?119次閱讀
    <b class='flag-5'>第二十</b>九章 <b class='flag-5'>W55MH32</b> Modbus_TCP_Server<b class='flag-5'>示例</b>

    第二十六章 W55MH32?上位機搜索和配置示例

    本文講解了如何在 W55MH32?芯片上實現上位機搜索和配置功能,通過實戰例程展示了使用開源上位機配置工具 SmartConfigTool?搜索局域網中的 W55MH32?并進行網絡地址配置的過程
    的頭像 發表于 07-24 16:13 ?144次閱讀
    <b class='flag-5'>第二十</b>六章 <b class='flag-5'>W55MH32</b>?上位機搜索和配置<b class='flag-5'>示例</b>

    第二十五章 W55MH32 TCP_Server_Multi_Socket示例

    本文講解了如何在 W55MH32?芯片上使用 8?個 socket?實現 TCP?服務器模式,讓多個客戶端連接進行數據回環測試,通過實戰例程展示了從初始化 socket?到監聽端口、處理客戶端連接
    的頭像 發表于 07-24 16:10 ?139次閱讀
    <b class='flag-5'>第二十五章</b> <b class='flag-5'>W55MH32</b> TCP_Server_Multi_Socket<b class='flag-5'>示例</b>

    第二十三章 W55MH32 MQTT_OneNET示例

    本文講解了如何在 W55MH32?芯片上實現 MQTT?協議并連接 OneNET?平臺,通過實戰例程展示了從準備工作、連接配置到消息訂閱、發布及接收處理的完整過程。文章詳細介紹了 MQTT?協議
    的頭像 發表于 07-24 14:59 ?170次閱讀
    <b class='flag-5'>第二十</b>三章 <b class='flag-5'>W55MH32</b> MQTT_OneNET<b class='flag-5'>示例</b>

    第二十二章 W55MH32 MQTT&amp;Aliyun示例

    本文講解了如何在 W55MH32?芯片上實現 MQTT?協議并連接阿里云平臺,通過實戰例程展示了從準備工作、連接配置到消息訂閱、發布及接收處理的完整過程。文章詳細介紹了 MQTT?協議的概念、特點
    的頭像 發表于 07-24 14:17 ?207次閱讀
    <b class='flag-5'>第二十二章</b> <b class='flag-5'>W55MH32</b> MQTT&amp;Aliyun<b class='flag-5'>示例</b>

    第二十一章 W55MH32 PHY配置示例

    本文講解了如何在 W55MH32?芯片上設置不同的 PHY?模式,通過實戰例程展示了根據不同傳輸場景,將 PHY?模式在 100Mbps?全雙工、10Mbps?半雙工和掉電模式之間切換以降
    的頭像 發表于 07-24 13:44 ?180次閱讀
    <b class='flag-5'>第二十</b>一章 <b class='flag-5'>W55MH32</b> PHY配置<b class='flag-5'>示例</b>

    十七章 W55MH32 ARP示例

    文講解了如何在 W55MH32?芯片上通過 MAC RAW?模式實現 ARP?協議,將 IP?地址解析為 MAC?地址,通過實戰例程展示了從發送 ARP?請求到接收并處理響應的完整過程。文章詳細介紹
    的頭像 發表于 07-24 11:49 ?195次閱讀
    第<b class='flag-5'>十七章</b> <b class='flag-5'>W55MH32</b> ARP<b class='flag-5'>示例</b>

    第十五 W55MH32 SNMP示例

    本文講解了如何在 W55MH32?芯片上實現 SNMP?功能,通過實戰例程展示了使用 MIB Browser?管理 W55MH32?的具體過程,涵蓋在 MIB Browser?中創建分支、添加葉子
    的頭像 發表于 07-24 10:43 ?199次閱讀
    第十五<b class='flag-5'>章</b> <b class='flag-5'>W55MH32</b> SNMP<b class='flag-5'>示例</b>

    第十 W55MH32 SNTP示例

    本文講解了如何在W55MH32芯片上實現SNTP授時功能,通過實例詳細展示了從SNTP服務器同步時間的實現流程,包括時間請求、響應解析和本地時間校準等核心步驟。文章還對SNTP的應用場景進行了分析,幫助讀者理解其在時間同步中的實際應用價值。
    的頭像 發表于 07-24 09:43 ?297次閱讀
    第十<b class='flag-5'>章</b> <b class='flag-5'>W55MH32</b> SNTP<b class='flag-5'>示例</b>

    第九 W55MH32 HTTP Server示例

    本文介紹了在 W55MH32?芯片上實現 HTTP Server?功能,并通過瀏覽器修改其網絡地址信息的方法。闡述了 HTTP?協議的概念、特點、應用場景、工作流程、請求方法、響應內容,以及 Web?頁面構成和交互方式。展示了在W55MH32上實現的過程。
    的頭像 發表于 07-24 09:35 ?155次閱讀
    第九<b class='flag-5'>章</b> <b class='flag-5'>W55MH32</b> HTTP Server<b class='flag-5'>示例</b>

    第五 W55MH32 UDP示例

    本文介紹了在 W55MH32?芯片上實現 UDP?通信及數據回環測試的方法。闡述了 UDP?協議的概念、特點、應用場景、報文傳輸流程和報文結構,展示了實現過程,借助網絡調試工具完成測試。
    的頭像 發表于 07-24 09:13 ?122次閱讀
    第五<b class='flag-5'>章</b> <b class='flag-5'>W55MH32</b> UDP<b class='flag-5'>示例</b>

    第二章 W55MH32 DHCP示例

    本文介紹 DHCP?協議,包括其在 IP?網絡自動分配參數的功能、便捷配置等特點、工作原理、報文格式和應用場景。通過 W55MH32?實戰例程展示動態獲取網絡地址信息過程,含注冊定時器中斷、啟用模式和獲取信息等步驟,燒錄后可完成檢測與信息打印,PC?端能 PING?通設備。
    的頭像 發表于 07-24 09:02 ?184次閱讀
    <b class='flag-5'>第二章</b> <b class='flag-5'>W55MH32</b> DHCP<b class='flag-5'>示例</b>

    第二十七章 電源管理——實現低功耗

    本文介紹了W55MH32電源管理功能,含電源監控器(POR、PDR、PVD)、電源系統劃分,有四種功耗模式,還提及相關庫函數及低功耗實驗。
    的頭像 發表于 06-20 14:07 ?922次閱讀
    <b class='flag-5'>第二十七章</b> 電源管理——實現低功耗

    共赴之約 | 第二十七屆中國北京國際科技產業博覽會圓滿落幕

    作為第二十七屆北京科博會的參展方,芯佰微有幸與800余家全球科技同仁共赴「科技引領創享未來」之約!文章來源:北京貿促5月11日下午,第二十七屆中國北京國際科技產業博覽會圓滿落幕。本屆北京科博會主題
    的頭像 發表于 05-12 13:36 ?1619次閱讀
    共赴之約 | <b class='flag-5'>第二十七</b>屆中國北京國際科技產業博覽會圓滿落幕
    主站蜘蛛池模板: 神马三级我不卡 | 国模私拍大尺度视频在线播放 | 青青热久久国产久精品秒播 | 亚洲成a人v在线观看 | 国产1024一区二区你懂的 | 久草毛片 | 三级国产在线观看 | 国产成人精品日本亚洲网站 | 天天色成人网 | 在线观看视频播放 | 欧美综合一区二区三区 | 成人精品视频在线观看播放 | 伊人黄色网| 色香蕉色香蕉在线视频 | a级男女性高爱潮高清试 | 一二三区乱码一区二区三区码 | 欧美午夜剧场 | 日本黄色激情视频 | 国产乱子伦一区二区三区 | 人人看人人做人人爱精品 | 欧美高清一级 | 中文天堂在线最新版在线www | 在线观看视频免费入口 | 亚洲午夜久久影院 | 特黄特色大片免费播放路01 | 在线看黄的网站 | 激情六月婷婷 | 免费看18污黄 | 手机看片91 | 欧美色欧美亚洲高清在线观看 | 精品亚洲成a人片在线观看 精品亚洲大全 | 色拍拍拍| 天天操狠狠操 | 性free中国美女hd | 亚洲天堂婷婷 | 亚洲伦理一区二区 | 久久久久久国产精品免费免费 | 天堂网视频 | 手机国产看片 | 久久www免费人成高清 | 国产免费一区二区三区在线 |