STM32網絡之中斷

以前的推文已經將STM32網絡的三大件講完了編程

圖片

①PHY接口,《STM32網絡電路設計網絡

②MAC控制器,《STM32網絡之MAC控制器app

③DMA控制器,《STM32網絡之DMA控制器spa

本文將聚焦STM32網絡的中斷系統,簡單聊一下中斷系統和用法。設計

0一、簡介

網絡中斷向量:一個用於正常的網絡操做,另外一個當它映射到EXIT線路19的時候,用於以太網喚醒事件(帶有喚醒幀或魔術數據包檢測)blog

 

第一個網絡中斷保留爲MAC和DMA產生的中斷,正如在MAC中斷和DMA中斷部分。教程

第二個中斷保留爲喚醒事件時PMT產生的中斷。喚醒事件對EXIT線路19的映射是形成STM32F20X和STM32F21X退出低功耗模式,而且產生中斷。接口

 

當映射到EXIT線路19的以太網喚醒事件發生和,MACPMT中斷使能而且有一個上升沿的EXIT線路19中斷也被使能,他們都能喚醒中斷。事件

 

可以使用看門狗定時器(請參見ETH_DMARSWTR 寄存器)靈活控制RS 位(ETH_DMASR寄存器)。當此看門狗定時器使用非零值編程時,看門狗定時器激活,只要RXDMA完成發送一個接收的數據幀到系統存儲,在沒有觸發接收狀態,由於它不是使能的在相應的接收描述符(RDES1[31])(也就是:未在相應接收描述符(RDES1[31])使能接收狀態)。當定時器按照編程值運行時,RS位被置1而且中斷髮生,若是ETH_DMAIER寄存器中相應位使能。看門狗定時失效在運行前,當數據幀被髮送到內存,而且RS置1,由於定時器被使能爲描述符。圖片

 

注意:

讀取PMT 控制和狀態寄存器會自動將接收的喚醒幀和接收的魔術數據包PMT 中斷標誌清零。可是,因爲用於這些標誌的寄存器位於 CLK_RX域,所以在固件能發現此更新前可能有顯著的延遲。當 RX 時鐘很慢(在10 Mbit 模式)和當AHB 總線爲高頻時,該延遲會特別長。

因爲從PMT 到CPU 的中斷請求基於CLK_RX 域中的相同寄存器,因此即便在讀取PMT_CSR 以後,CPU也可能錯誤地第二次調用中斷例程。所以,可能須要固件輪詢接收的喚醒幀和接收的魔術數據包位,並僅在發現它們都爲‘0’時退出中斷服務程序。

 

0二、代碼

STM32的網絡中斷,其實準確來講應該是網絡專用的DMA的中斷,網絡中的數據包符合1518規則,也就是說是1460字節,MAC接收的數據包是2K字節,網絡上每個數據包MAC接收完都會產生中斷。

官方代碼是這樣的

圖片

明顯是使用查詢的方式,沒有使用到中斷。

中斷的使用方式以下:

配置網絡中斷

圖片

註釋掉官方提供的查詢部分的代碼。

圖片

咱們使用中斷形式以後,代碼是

圖片

這樣的代碼,咱們在接收小於一個DMA描述符數據大小的數據沒有問題,很流暢。

DMA描述符部份內容請看《STM32網絡之DMA控制器》。

在接收大量數據的時候就會出現錯誤,接收的會緩慢,接收的過多會死機

解決辦法是:

把if修改爲while

圖片

這樣就把整個數據包接收完以後再跳出中斷,這樣就解決了這個問題。

 

點擊查看本文所在的專輯,STM32F207教程

相關文章
相關標籤/搜索