在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

第十章 W55MH32中斷應用概覽

W55MH32 ? 來源:W55MH32 ? 作者:W55MH32 ? 2025-05-22 17:07 ? 次閱讀

單芯片解決方案,開啟全新體驗——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的無限可能。

wKgZPGgbOfaANhwzACodXd3sVzg463.png

第十章 W55MH32中斷應用概覽

本章參考資料《W55MH32-參考手冊》、《 Cortex-M3內核編程手冊》-4.3 章節:NVIC和4.4章節:SCB—4.4.5的AIRCR。

W55MH32中斷非常強大,每個外設都可以產生中斷,所以中斷的講解放在哪一個外設里面去講都不合適,這里單獨抽出一章來做一個總結性的介紹,這樣在其他章節涉及到中斷部分的知識我們就不用費很大的篇幅去講解,只要示意性帶過即可。

1 異常類型

W55MH32在內核水平上搭載了一個異常響應系統, 支持為數眾多的系統異常和外部中斷。 其中系統異常有8個(如果把Reset和HardFault也算上的話就是10個), 外部中斷有60個。除了個別異常的優先級被定死外,其它異常的優先級都是可編程的。 有關具體的系統異常和外部中斷可在標準庫文件w55mh32.h這個頭文件查詢到,在IRQn_Type這個結構體里面包含了W55MH32系列全部的異常聲明。

W55MH32系統異常清單

編號 優先級 優先級類型 名稱 說明 地址
- - - 保留(實際存的是 MSP 地址) 0X0000 0000
-3 - 固定 Reset 復位 0X0000 0004
-2 - 固定 NMI 不可屏蔽中斷。RCC 時鐘安全系統 (CSS) 連接到 NMI 向量 0X0000 0008
-1 - 固定 HardFault 所有類型的錯誤 0X0000 000C
0 - 可編程 MemManage 存儲器管理 0X0000 0010
1 - 可編程 BusFault 預取指失敗,存儲器訪問失敗 0X0000 0014
2 - 可編程 UsageFault 未定義的指令或非法狀態 0X0000 0018
- - - 保留 0X0000 001C-0X0000 002B
3 - 可編程 SVCall 通過 SWI 指令調用的系統服務 0X0000 002C
4 - 可編程 Debug Monitor 調試監控器 0X0000 0030
- - - 保留 0X0000 0034
5 - 可編程 PendSV 可掛起的系統服務 0X0000 0038
6 - 可編程 SysTick 系統嘀嗒定時器 0X0000 003C

W55MH32外部中斷清單

編號 優先級 優先級類型 名稱 說明 地址
0 7 可編程 WWDG 窗口看門狗中斷 0X0000 0040
1 8 可編程 PVD 連到 EXTI電源電壓檢測 (PVD) 中斷 0X0000 0044
2 9 可編程 TAMPER 侵入檢測中斷 0X0000 0048
57 64 可編程 DMA2 通道 2 DMA2 通道 2 中斷 0X0000 0124
58 65 可編程 DMA2 通道 3 DMA2 通道 3z 中斷 0X0000 0128
59 66 可編程 DMA2 通道 4_5 DMA2 通道 4 和通道 5 中斷 0X0000 012C

2 NVIC簡介

在講如何配置中斷優先級之前,我們需要先了解下NVIC。NVIC是嵌套向量中斷控制器,控制著整個芯片中斷相關的功能,它跟內核緊密耦合,是內核里面的一個外設。但是各個芯片廠商在設計芯片的時候會對Cortex-M3內核里面的NVIC進行裁剪,把不需要的部分去掉,所以說W55MH32的NVIC是Cortex-M 3的NVIC的一個子集。

2.1 NVIC寄存器簡介

在固件庫中,NVIC的結構體定義可謂是頗有遠慮,給每個寄存器都預留了很多位,恐怕為的是日后擴展功能。 不過W55MH32可用不了這么多,只是用了部分而已,具體使用了多少可參考《 Cortex-M3 內核編程手冊》-4.3.11:NVIC寄存器映射。

代碼清單:中斷-1 NVIC結構體定義,來自固件庫頭文件:core_cm3.h

typedef struct {
    __IO uint32_t ISER[8];       // 中斷使能寄存器
    uint32_t RESERVED0[24];
    __IO uint32_t ICER[8];       // 中斷清除寄存器
    uint32_t RSERVED1[24];
    __IO uint32_t ISPR[8];       // 中斷使能懸起寄存器
    uint32_t RESERVED2[24];
    __IO uint32_t ICPR[8];       // 中斷清除懸起寄存器
    uint32_t RESERVED3[24];
    __IO uint32_t IABR[8];       // 中斷有效位寄存器
    uint32_t RESERVED4[56];
    __IO uint8_t  IP[240];       // 中斷優先級寄存器(8Bit wide)
    uint32_t RESERVED5[644];
    __O  uint32_t STIR;          // 軟件觸發中斷寄存器
}  NVIC_Type;

在配置中斷的時候我們一般只用ISER、ICER和IP這三個寄存器,ISER用來使能中斷,ICER用來失能中斷,IP用來設置中斷優先級。

2.2 NVIC 中斷配置固件庫

固件庫文件core_cm3.h的最后,還提供了NVIC的一些函數,這些函數遵循CMSIS規則,只要是Cortex-M3 的處理器都可以使用,具體如下:

NVIC 庫函數 描述
void NVIC_EnableIRQ(IRQn_Type IRQn) 使能中斷
void NVIC_DisableIRQ(IRQn_Type IRQn) 失能中斷
void NVIC_SetPendingIRQ(IRQn_Type IRQn) 設置中斷懸起位
void NVIC_ClearPendingIRQ(IRQn_Type IRQn) 清除中斷懸起位
uint32_t NVIC_GetPendingIRQ(IRQn_Type IRQn) 獲取懸起中斷編號
void NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) 設置中斷優先級
uint32_t NVIC_GetPriority(IRQn_Type IRQn) 獲取中斷優先級
void NVIC_SystemReset(void) 系統復位

這些庫函數我們在編程的時候用的都比較少,甚至基本都不用。在配置中斷的時候我們還有更簡潔的方法,請看中斷編程小節。

3 優先級的定義

3.1 優先級定義

在NVIC 有一個專門的寄存器:中斷優先級寄存器NVIC_IPRx,用來配置外部中斷的優先級,IPR寬度為8bit, 原則上每個外部中斷可配置的優先級為0~255,數值越小,優先級越高。但是絕大多數CM3芯片都會精簡設計, 以致實際上支持的優先級數減少,在W55MH32中,只使用了高4bit,如下所示:

bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
用于表達優先級 未使用,讀回為 0

用于表達優先級的這4bit,又被分組成搶占優先級和子優先級。如果有多個中斷同時響應,搶占優先級高的就會搶占搶占優先級低的優先得到執行, 如果搶占優先級相同,就比較子優先級。如果搶占優先級和子優先級都相同的話,就比較他們的硬件中斷編號,編號越小,優先級越高。

3.2 優先級分組

優先級的分組由內核外設SCB的應用程序中斷及復位控制寄存器AIRCR的PRIGROUP[10:8]位決定,W55MH32分為了5組,具體如下:主優先級=搶占優先級

PRIGROUP[2:0] 中斷優先級值 PRI_N [7:4](二進制點) 主優先級位 子優先級位 主優先級 子優先級
0b 011 0b xxxx [7:4] None 16 None
0b 100 0b xxx.y [7:5] [4] 8 2
0b 101 0b xx.yy [7:6] [5:4] 4 4
0b 110 0b x.yyy [7] [6:4] 2 9
0b 111 0b .yyyy None [7:4] None 16

設置優先級分組可調用庫函數NVIC_PriorityGroupConfig()實現,有關NVIC中斷相關的庫函數都在庫文件misc.c和misc.h中。

代碼清單:中斷-2 中斷優先級分組庫函數NVIC_PriorityGroupConfig()

/**
* 配置中斷優先級分組:搶占優先級和子優先級
* 形參如下:
* @arg NVIC_PriorityGroup_0: 0bit for搶占優先級
*                            4 bits for 子優先級
* @arg NVIC_PriorityGroup_1: 1 bit for搶占優先級
*                            3 bits for 子優先級
* @arg NVIC_PriorityGroup_2: 2 bit for搶占優先級
*                            2 bits for 子優先級
* @arg NVIC_PriorityGroup_3: 3 bit for搶占優先級
*                            1 bits for 子優先級
* @arg NVIC_PriorityGroup_4: 4 bit for搶占優先級
*                            0 bits for 子優先級
* @注意 如果優先級分組為0,則搶占優先級就不存在,優先級就全部由子優先級控制
*/
void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup)
{
    // 設置優先級分組
    SCB->AIRCR = AIRCR_VECTKEY_MASK | NVIC_PriorityGroup;
}

優先級分組 主優先級 子優先級 描述
NVIC_PriorityGroup_0 0 0-15 主 - 0bit,子 - 4bit
NVIC_PriorityGroup_1 0-1 0-7 主 - 1bit,子 - 3bit
NVIC_PriorityGroup_2 0-3 0-3 主 - 2bit,子 - 2bit
NVIC_PriorityGroup_3 0-7 0-1 主 - 3bit,子 - 1bit
NVIC_PriorityGroup_4 0-15 0 主 - 4bit,子 - 0bit

4 中斷編程

在配置每個中斷的時候一般有3個編程要點:

1.使能外設某個中斷,這個具體由每個外設的相關中斷使能位控制。比如串口有發送完成中斷,接收完成中斷,這兩個中斷都由串口控制寄存器的相關中斷使能位控制。

2.初始化NVIC_InitTypeDef結構體,配置中斷優先級分組,設置搶占優先級和子優先級, 使能中斷請求。NVIC_InitTypeDef結構體在固件庫頭文件misc.h中定義。

代碼清單:中斷-3 NVIC初始化結構體

typedef struct {
    uint8_t NVIC_IRQChannel;                    // 中斷源
    uint8_t NVIC_IRQChannelPreemptionPriority;  // 搶占優先級
    uint8_t NVIC_IRQChannelSubPriority;         // 子優先級
    FunctionalState NVIC_IRQChannelCmd;         // 中斷使能或者失能
} NVIC_InitTypeDef;

有關NVIC初始化結構體的成員我們一一解釋下:

(1).NVIC_IROChannel:用來設置中斷源,不同的中斷中斷源不一樣,且不可寫錯,即使寫錯了程序也不會報錯,只會導致不響應中斷。 具體的成員配置可參考w55mh32x.h頭文件里面的IRQn_Type結構體定義,這個結構體包含了所有的中斷源。

代碼清單:中斷-4 IRQn_Type中斷源結構體

typedef enum IRQn {
    //Cortex-M3 處理器異常編號
    NonMaskableInt_IRQn      = -14,
    MemoryManagement_IRQn    = -12,
    BusFault_IRQn            = -11,
    UsageFault_IRQn          = -10,
    SVCall_IRQn              = -5,
    DebugMonitor_IRQn        = -4,
    PendSV_IRQn              = -2,
    SysTick_IRQn             = -1,
    /W55MH32 外部中斷編號
    WWDG_IRQn                = 0,
    PVD_IRQn                 = 1,
    TAMP_STAMP_IRQn          = 2,

    // 限于篇幅,中間部分代碼省略,具體的可查看庫文件W55MH32.h

    DMA2_Channel2_IRQn       = 57,
    DMA2_Channel3_IRQn       = 58,
    DMA2_Channel4_5_IRQn     = 59
} IRQn_Type;

(2).NVIC_IRQChannelPreemptionPriority:搶占優先級,具體的值要根據優先級分組來確定, 具體參考表格 優先級分組真值表 優先級分組真值表 。

(3). NVIC_IRQChannelSubPriority:子優先級,具體的值要根據優先級分組來確定, 具體參考表格 優先級分組真值表 優先級分組真值表 。

(4).NVIC_IRQChannelCmd:中斷使能(ENABLE)或者失能(DISABLE)。 操作的是NVIC_ISER和NVIC_ICER這兩個寄存器。

3.編寫中斷服務函數

在啟動文件startup_w55mh32_hd.s中我們預先為每個中斷都寫了一個中斷服務函數,只是這些中斷函數都是為空,為的只是初始化中斷向量表。 實際的中斷服務函數都需要我們重新編寫,為了方便管理我們把中斷服務函數統一寫在w55mh32_it.c這個庫文件中。

關于中斷服務函數的函數名必須跟啟動文件里面預先設置的一樣,如果寫錯,系統就在中斷向量表中找不到中斷服務函數的入口, 直接跳轉到啟動文件里面預先寫好的空函數,并且在里面無限循環,實現不了中斷。

5 補充說明

后續其他例程的某個外設配置過程的自定義函數如NVIC_Configuration()分別執行了 NVIC_PriorityGroupConfig() 配置中斷優先級分組,NVIC_Init(&NVIC_InitStructure) 配置結構體賦值的將要設置的中斷向量和其優先級, 注意這里的 NVIC_PriorityGroupConfig是整個程序中只需要設置一次 。

當設置好了中斷優先級分組,其他各種外設對應的中斷向量的中斷優先級既是基于目前設置分組來解讀, 假設配置為NVIC_PriorityGroup_0或者NVIC_PriorityGroup_4,那么給多個外設分別填充NVIC_InitStructure的子優先級或主優先級是無效的,所以說如果工程里面有用到許多的外設中斷,那么在確定了想用哪一種優先級分組后再給每個外設對應的中斷向量配置優先級。

在其他例程中很多將NVIC_PriorityGroupConfig寫在了每個外設自己的中斷配置函數里面,有些可能多個外設配置函數下重復了NVIC_PriorityGroupConfig()這句, 這里提醒用戶后續編寫自己程序時只需要調用一次即可,若重復調用相當于對中斷相關寄存器重復賦值多次取最后一次賦值,并且從代碼布局邏輯來說,NVIC_PriorityGroupConfig適合放在main()函數中。

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

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

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

審核編輯 黃宇

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

    關注

    459

    文章

    52076

    瀏覽量

    435186
  • 封裝
    +關注

    關注

    128

    文章

    8442

    瀏覽量

    144660
  • WIZnet
    +關注

    關注

    3

    文章

    21

    瀏覽量

    42362
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    【PDF】C++ GUI Programming with Qt 4 中文版(第一第十章)目錄版

    C++ GUI Programming with Qt 4 中文版(第一第十章)目錄版附件:
    發表于 02-28 15:46

    自己編的信號與系統(西安電子科大版)第十章課后答案...

    分享 一下 自己編寫的信號與系統(西安電子科大版)的第十章課后習題的Matlab程序。
    發表于 11-21 13:06

    【ALIENTEK 戰艦STM32開發板】STM32開發指南--第十章 外部中斷...

      第十章 外部中斷實驗  這一,我們將向大家介紹如何使用STM32的外部輸入中斷。在前面幾章的學習,我們掌握了STM32的IO口最基本
    發表于 01-25 10:23

    《從算法設計到硬線邏輯的實現》第十章練習6-在Verilog H...

    在做夏宇聞教材《從算法設計到硬線邏輯的實現》第十章練習6-在Verilog HDL中使用函數按原文編譯總是出錯,將[3:0]的3改為大于3的值就沒錯了,如[4:0].為什么呢?
    發表于 11-06 14:14

    理解流水線編程——四位全加器(夏老師書第十章)代碼

    第十章 如何編寫和驗證簡單的純組合邏輯模塊關于這一,我唯一想總結一下的就是流水線的設計,書上沒有范例,上網上搜索了一下,關于4位全加器的流水線設計大部分都不正確,后來終于找到了一個和我理解一樣的人
    發表于 01-14 21:21

    明德揚視頻分享點撥FPGA課程--第十章 ?GVIM的使用

    第十章GVIM的使用1. GVIM使用2http://yunpan.cn/cjZTiDA9pY56x訪問密碼 c359
    發表于 11-10 08:59

    《測控電路》習題完整參考答案(第十章

    《測控電路》習題完整參考答案(第十章).pdf
    發表于 05-07 11:43

    淺析中斷時間和內存管理

    慕課電子科技大學.嵌入式系統.第十章.中斷時間和內存管理.內存管理0 目錄10 中斷時間和內存管理10.3 內存管理10.3.1課堂重點10.3.2測試與作業11 下一0 目錄10
    發表于 12-17 07:37

    CH32V103基礎教程31-ADC-單通道中斷讀取方式

    本章主要在第十章ADC的基礎上進行ADC單通道中斷讀取,在中斷服務函數讀取ADC值。 1、ADC簡介及相關函數介紹ADC的規則組和注入組轉換結束時能產生
    發表于 04-21 16:03

    MATLAB 7.0從入門到精通_第三

    強大的工具Matlab7入門到精通第一第十章
    發表于 12-01 16:03 ?0次下載

    HCIE復習資料第十章 特性

    HCIE復習資料第十章 特性,HCIE全套復習資料
    發表于 05-10 17:22 ?0次下載

    《測控電路》習題完整參考答案(第十章

    《測控電路》習題完整參考答案(第十章
    發表于 02-14 17:01 ?0次下載

    WIZnet高性能以太網單片機W55MH32重磅發布!

    WIZnet高性能以太網單片機W55MH32重磅發布!本文詳細解析了W55MH32芯片的高性能網絡處理能力與硬件資源,以及兩款開發板(L/Q-EVB)。芯片憑借TOE引擎、豐富外設及加密單元,為物
    的頭像 發表于 05-07 16:17 ?151次閱讀
    WIZnet高性能以太網單片機<b class='flag-5'>W55MH32</b>重磅發布!

    即刻啟程,踏上W55MH32高性能以太網單片機學習之路!

    即刻啟程,踏上W55MH32高性能以太網單片機學習之路!即刻開啟W55MH32學習之旅!本教系列程配套官方手冊與W55MH32L開發板,從外設功能框圖解析到代碼實操,助你掌握高性能以太網單片機的架構和核心原理,輕松駕馭多接口及以
    的頭像 發表于 05-07 18:51 ?97次閱讀
    即刻啟程,踏上<b class='flag-5'>W55MH32</b>高性能以太網單片機學習之路!

    第十二章 SysTick——系統定時器

    本章介紹了W55MH32的SysTick系統定時器,它是24位遞減計數器,含4個寄存器,可配置定時、中斷,用于產生時基 等。
    的頭像 發表于 05-22 17:16 ?110次閱讀
    <b class='flag-5'>第十二章</b> SysTick——系統定時器
    主站蜘蛛池模板: 欧美无限看| 国产欧美久久久精品影院 | 成人欧美一区二区三区小说 | 人人福利 | 国产精品久久精品福利网站 | 99香蕉精品视频在线观看 | 国产又色 | 91在线免费视频 | 国产精品主播在线 | 久草色在线 | 狠狠操影院| 成人免费午间影院在线观看 | 久久天天躁综合夜夜黑人鲁色 | 国产美女免费 | 女同在线视频 | 天天色影| 午夜视频在线免费观看 | aa视频在线观看 | 欧美性色黄大片四虎影视 | 91福利社在线观看 | 欧美午夜性春猛交bbb | 亚洲成人网在线观看 | 亚洲视频www| 欧美精品国产第一区二区 | 视频免费观看网址 | 久热国产在线 | 一区二区免费在线观看 | 在线播放91灌醉迷j高跟美女 | 9299yy看片淫黄大片在线 | 久久久精品久久久久久久久久久 | 欧美日韩国产一区 | 岛国三级在线看 | 成人性欧美丨区二区三区 | 欧美ccc| 特级一级毛片视频免费观看 | 欧美午夜性刺激在线观看免费 | 狠狠干视频网 | 午夜性视频 | 国产女人和拘做受视频免费 | 猛操网| 国产女人水多白浆 |