單芯片解決方案,開啟全新體驗——W55MH32 高性能以太網(wǎng)單片機(jī)
W55MH32是WIZnet重磅推出的高性能以太網(wǎng)單片機(jī),它為用戶帶來前所未有的集成化體驗。這顆芯片將強大的組件集于一身,具體來說,一顆W55MH32內(nèi)置高性能Arm? Cortex-M3核心,其主頻最高可達(dá)216MHz;配備1024KB FLASH與96KB SRAM,滿足存儲與數(shù)據(jù)處理需求;集成TOE引擎,包含WIZnet全硬件TCP/IP協(xié)議棧、內(nèi)置MAC以及PHY,擁有獨立的32KB以太網(wǎng)收發(fā)緩存,可供8個獨立硬件socket使用。如此配置,真正實現(xiàn)了All-in-One解決方案,為開發(fā)者提供極大便利。
在封裝規(guī)格上,W55MH32 提供了兩種選擇:QFN100和QFN68。
W55MH32L采用QFN100封裝版本,尺寸為12x12mm,其資源豐富,專為各種復(fù)雜工控場景設(shè)計。它擁有66個GPIO、3個ADC、12通道DMA、17個定時器、2個I2C、5個串口、2個SPI接口(其中1個帶I2S接口復(fù)用)、1個CAN、1個USB2.0以及1個SDIO接口。如此豐富的外設(shè)資源,能夠輕松應(yīng)對工業(yè)控制中多樣化的連接需求,無論是與各類傳感器、執(zhí)行器的通信,還是對復(fù)雜工業(yè)協(xié)議的支持,都能游刃有余,成為復(fù)雜工控領(lǐng)域的理想選擇。同系列還有QFN68封裝的W55MH32Q版本,該版本體積更小,僅為8x8mm,成本低,適合集成度高的網(wǎng)關(guān)模組等場景,軟件使用方法一致。更多信息和資料請進(jìn)入http://www.w5500.com/網(wǎng)站或者私信獲取。
此外,本W(wǎng)55MH32支持硬件加密算法單元,WIZnet還推出TOE+SSL應(yīng)用,涵蓋TCP SSL、HTTP SSL以及 MQTT SSL等,為網(wǎng)絡(luò)通信安全再添保障。
為助力開發(fā)者快速上手與深入開發(fā),基于W55MH32L這顆芯片,WIZnet精心打造了配套開發(fā)板。開發(fā)板集成WIZ-Link芯片,借助一根USB C口數(shù)據(jù)線,就能輕松實現(xiàn)調(diào)試、下載以及串口打印日志等功能。開發(fā)板將所有外設(shè)全部引出,拓展功能也大幅提升,便于開發(fā)者全面評估芯片性能。
若您想獲取芯片和開發(fā)板的更多詳細(xì)信息,包括產(chǎn)品特性、技術(shù)參數(shù)以及價格等,歡迎訪問官方網(wǎng)頁:http://www.w5500.com/,我們期待與您共同探索W55MH32的無限可能。
第二十七章 W55MH32Interrupt示例
本篇文章,我們將詳細(xì)介紹如何在W55MH32芯片上面使用TOE中斷功能,并通過實戰(zhàn)例程,為大家講解如何通過中斷進(jìn)行回環(huán)數(shù)據(jù)測試。
該例程用到的其他網(wǎng)絡(luò)協(xié)議,請參考相關(guān)章節(jié)。有關(guān)W55MH32的初始化過程,請參考Network Install章節(jié),這里將不再贅述。
1 TOE中斷簡介
在TOE中斷模式下,可以設(shè)置多種中斷事件,例如網(wǎng)絡(luò)建立連接、數(shù)據(jù)接收、數(shù)據(jù)發(fā)送完成等。當(dāng)某個事件發(fā)生時,通過PD9通知給處理器,處理可以立即響應(yīng)中斷,并進(jìn)行相應(yīng)的處理。這種方式可以提高系統(tǒng)的響應(yīng)速度和效率,減少處理器在輪詢狀態(tài)下的資源浪費。
2中斷特點
實時性:在中斷事件發(fā)生后,處理器會暫停當(dāng)前正在執(zhí)行的任務(wù),立刻響應(yīng)中斷,當(dāng)存在多個中斷處理時,處理器會基于優(yōu)先級進(jìn)行對應(yīng)處理。
提高系統(tǒng)效率:如果沒有中斷機(jī)制,處理器需要不斷輪詢寄存器狀態(tài),以檢查是否需要進(jìn)行處理,這會占用大量的處理器資源,而中斷方式可以讓處理器專注運行主程序,需要處理時再去處理相應(yīng)的任務(wù),提高了系統(tǒng)資源的利用率。
事件驅(qū)動:中斷是由事件驅(qū)動的,這些事件可以是外部的(如外部設(shè)備的操作、信號變化等),也可以是內(nèi)部的(如定時器溢出、計算結(jié)果異常等)
中斷服務(wù)程序:每個中斷源通常都有對應(yīng)的中斷服務(wù)程序,它們是專門為處理該中斷事件而編寫的一段獨立的程序代碼。
3 TOE中斷應(yīng)用場景
網(wǎng)絡(luò)喚醒: 啟用魔術(shù)包中斷后,當(dāng)W55MH32接收到魔術(shù)包時會觸發(fā)中斷,進(jìn)而通知設(shè)備執(zhí)行喚醒操作。
網(wǎng)絡(luò)配置: 啟用Socket接收中斷后,W55MH32在接收到數(shù)據(jù)時觸發(fā)中斷,系統(tǒng)在中斷觸發(fā)后才進(jìn)行消息讀取配置,無需持續(xù)輪詢,從而節(jié)省系統(tǒng)資源。
錯誤處理:當(dāng)遇到錯誤時(例如IP地址沖突,網(wǎng)絡(luò)不可達(dá)),W55MH32可以立即進(jìn)行處理,提高系統(tǒng)的穩(wěn)定性。
4 TOE中斷源
IP沖突:在收到ARP請求時,發(fā)現(xiàn)發(fā)送方IP與本地IP重復(fù)時觸發(fā)中斷。
目標(biāo)不可抵達(dá):在接收到ICMP(目的端口不可達(dá))包后觸發(fā)中斷。
PPPoE連接關(guān)閉:在PPPoE模式下,PPPoE連接斷開時觸發(fā)中斷。
Magic Packet:當(dāng)網(wǎng)絡(luò)喚醒模式啟用并通過UDP接收到Magic Packet網(wǎng)絡(luò)喚醒包時觸發(fā)中斷。
以下為Socket中斷:
發(fā)送完成:成功發(fā)送數(shù)據(jù)給對方時觸發(fā)中斷。
超時:當(dāng)ARP超時或者TCP超時時觸發(fā)中斷。
接收到數(shù)據(jù):接收到對方數(shù)據(jù)時觸發(fā)中斷。
關(guān)閉連接:接收到對方的FIN或 FIN/ACK包時觸發(fā)中斷。
建立連接:成功與對方建立連接時觸發(fā)中斷。
5使用中斷接收數(shù)據(jù)的流程
初始化中斷引腳;
開啟對應(yīng)Socket的中斷功能,相關(guān)寄存器及描述如下:
開啟Socket RECV中斷功能,相關(guān)寄存器及描述如下:
編寫中斷處理函數(shù),在接收到數(shù)據(jù)時進(jìn)行處理。
6實現(xiàn)過程
接下來,我們看看如何在W55MH32上實現(xiàn)中斷回環(huán)數(shù)據(jù)測試。
注意:測試實例需要PC端和W55MH32處于同一網(wǎng)段。
步驟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成功觸發(fā)中斷后,會調(diào)用wizchip_ISR()函數(shù),在這里會記錄中斷標(biāo)志位并清空中斷標(biāo)志。
步驟3:開啟中斷功能
1. setSIMR(0x01);// enable socket0 interrupt 2. setSn_IMR(SOCKET_ID,0x0f);//enable all interrupt functions of socket 0. 3.
步驟4:主循環(huán)中運行TCP回環(huán)服務(wù)器
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. }
進(jìn)入函數(shù)后,首先檢查Socket狀態(tài)。如果Socket處于關(guān)閉狀態(tài),則啟動一個TCP服務(wù)器。接著,根據(jù)記錄的中斷標(biāo)志位判斷是否觸發(fā)了中斷,并根據(jù)中斷類型進(jìn)行相應(yīng)的處理。
7運行結(jié)果
燒錄例程運行后,首先可以看到進(jìn)行了PHY鏈路檢測,然后打印了設(shè)置的網(wǎng)絡(luò)地址信息,接著是TCP中斷回環(huán)測試,W55MH32接收到Socket數(shù)據(jù)后觸發(fā)中斷并進(jìn)行回傳。如下圖所示:
8總結(jié)
本文講解了如何在 W55MH32芯片上使用 TOE中斷功能并進(jìn)行回環(huán)數(shù)據(jù)測試,通過實戰(zhàn)例程展示了從初始化中斷引腳、處理中斷、開啟中斷功能到在主循環(huán)中運行 TCP回環(huán)服務(wù)器的完整過程。文章詳細(xì)介紹了 TOE中斷的概念、特點、應(yīng)用場景、中斷源以及使用中斷接收數(shù)據(jù)的流程,幫助讀者理解其在提升系統(tǒng)響應(yīng)速度和資源利用率方面的實際應(yīng)用價值。
下一篇文章將講解在 W55MH32 芯片上實現(xiàn)以太網(wǎng)測速功能,解析其核心原理及在網(wǎng)絡(luò)性能評估中的應(yīng)用,同時通過實戰(zhàn)例程講解如何借助 Jperf工具進(jìn)行測速,敬請期待!
WIZnet是一家無晶圓廠半導(dǎo)體公司,成立于 1998年。產(chǎn)品包括互聯(lián)網(wǎng)處理器 iMCU?,它采用 TOE(TCP/IP卸載引擎)技術(shù),基于獨特的專利全硬連線 TCP/IP。iMCU?面向各種應(yīng)用中的嵌入式互聯(lián)網(wǎng)設(shè)備。
WIZnet在全球擁有 70多家分銷商,在香港、韓國、美國設(shè)有辦事處,提供技術(shù)支持和產(chǎn)品營銷。
香港辦事處管理的區(qū)域包括:澳大利亞、印度、土耳其、亞洲(韓國和日本除外)。
SF
-
單片機(jī)
+關(guān)注
關(guān)注
6068文章
45011瀏覽量
651188 -
Interrupt
+關(guān)注
關(guān)注
0文章
9瀏覽量
14668
發(fā)布評論請先 登錄
第三十章 W55MH32 HTTP_Server&NetBIOS示例

第二十九章 W55MH32 Modbus_TCP_Server示例

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

第二十五章 W55MH32 TCP_Server_Multi_Socket示例

第二十三章 W55MH32 MQTT_OneNET示例

第二十二章 W55MH32 MQTT&Aliyun示例

第二十一章 W55MH32 PHY配置示例

第十七章 W55MH32 ARP示例

第十五章 W55MH32 SNMP示例

第十章 W55MH32 SNTP示例

第九章 W55MH32 HTTP Server示例

第五章 W55MH32 UDP示例

第二章 W55MH32 DHCP示例

第二十七章 電源管理——實現(xiàn)低功耗

共赴之約 | 第二十七屆中國北京國際科技產(chǎn)業(yè)博覽會圓滿落幕

評論