W5500中斷暫存器的理解

2021-09-29 15:22:28 字數 2618 閱讀 4539

w5500中斷部分,w5500中文手冊v1.0 寫的不夠清楚,該文是本人結合中英文手冊及自己理解,整理出有關中斷部分的理解,如有不對的請指正。

一:引腳 intn 為中斷輸出(interrupt output)

低電平:w5500的中斷生效。

高電平:無中斷或者處於中斷生效等待中

2.1  ir (連線中斷暫存器) [r/w] [0x0015] [0x00] 

該暫存器主要指示網路連線錯誤或喚醒引起當的中斷。

某位為1 且 該位中斷沒有被遮蔽就能夠引發中斷,intn引腳將會被拉低。中斷處理完成後,能夠由主機寫為『1』清除該位中斷. ir 為『0×00』時,intn引腳將會被拉高。

2.2  imr (連線中斷遮蔽暫存器) [r/w][0x0016][0x00]

中斷遮蔽暫存器(imr)是用來遮蔽中ir中斷的,某位寫『1』。則開啟中斷。寫『0』,關閉中斷。

每乙個中斷遮蔽位相應中斷暫存器(ir)中的乙個位. 假設imr某位寫0,即使ir中相應位為1了。也不會引發中斷。intn引腳不會被拉低。

2.3 sir ( socket 中斷暫存器) [r/w] [0x0017] [0x00] 

sir就是指示哪個socket發生的中斷的。

假設某個socket發生的中斷。該暫存器的相應位將被置為1 ,直到被主機置『1』清除。

假設sn_ir不等於『0×00』, 就會引發中斷,intn引腳將被拉低。

2.4  simr (socket 中斷遮蔽暫存器) [r/w] [0x0018] [0x00]

simr暫存器來遮蔽中sir中斷的,某位寫『1』,則開啟中斷。寫『0』。關閉中斷。

每乙個中斷遮蔽位相應中斷暫存器(sir)中的乙個位. 假設simr某位寫0,即使ir中相應位為『1』了,也不會引發中斷,intn引腳不會被拉低。

2.5 sn_ir (socket n 中斷暫存器) [r] [0x0002] [0x00]

sn_ir 暫存器用於提供給socket n 中斷型別資訊,如建立(establishment)、終止(termination)、接收資料(receiving data)和超時(timeout)。

當觸發乙個中斷即sn_imr的相應位是』1′的時候,sn_ir的相應位也將會變成『1』。

假設想把sn_ir位清零的話。主機應該將該位置『1』

這裡的[r],而不是[r/w] 表示不能由主機寫『1』讓w5500產生中斷。僅僅能由主機設定『1』 。清除某一位中斷。

2.6 sn_imr (socket n 中斷遮蔽暫存器) [r/w] [0x002c] [0xff]

sn_imr 負責遮蔽socket n的中斷。某位寫『1』。則開啟中斷;寫『0』。屏閉中斷。

每一位都相應了sn_ir暫存器的相應位。socket n的中斷觸發而且sn_imr的相應位為『1』時,sn_ir的相應位變為『1』。

假設sn_imr和sn_ir的相應位均為『1』且sir 暫存器的相應為『1』,intn 引腳便會拉低並使主機產生中斷。

2.7  intlevel (低電平中斷定時器暫存器) [r/w] [0x0013 – 0x0014] [0x0000]

該暫存器用於設定中斷生效等待的時間(iawt)。當下乙個中斷觸發。中斷引腳將會在intlevel時間後。拉低中斷引腳(intn)。

如果某一時段 先後發生2個中斷 ,socket 0 和scoket1

a.  當socket 0的超時中斷被觸發。 sir[0]& s0_ir[3]設定為『1』,指出是第0個socket發生了超時中斷。

接著 intn 引腳才被拉低,告知主機發生了中斷。

b.  當socket 1的連線中斷在前乙個中斷未處理完畢之前被觸發,則intn 引腳仍然為低,s1_ir[0] & sir[1]位設定為『1』。

c.  假設主機處理完中斷。然後清理s0_ir[3]位及sir[0],儘管此時s1_ir[0] & sir[1]仍然保持為『1』,intn引腳仍將被拉高。

d.  即使s1_ir[0] &  sir[1]位被設定為『1』,可是在 intlevel 期間,intn不能被拉低。

僅僅有過了intlevel時間。intn才幹被拉低。

三:中斷方式設計程式

通過以上介紹。可知幾個暫存器之間有例如以下關係:

a:3個中斷暫存器 ir,sir ,sn_ir,它們相應的3個中斷遮蔽暫存器imr。simr,sn_imr(也能夠覺得是中斷使能暫存器)。僅僅有使能相應位中斷,該位為『1』時才幹引發中斷。拉低intn。

b:一次中斷處理結束,清除相應狀態位後。都會拉高intn。假設還有別的中斷狀態暫存器為『1』,就等待一定時間再拉低intn。這個時間是由intlevel暫存器來設定的。對於主機來說來一次中斷,僅僅能處理乙個事件。

c :ir暫存器與網路連線狀態有關的暫存器。跟sir,sn_ir 沒有直接關係。而sir 和sn_ir 是同一時候出現的,sir 指出是第n個socket 發生了中斷事件,sn_ir指出了socket n 發生了什麼型別中斷事件,如收到資料 超時等。

因此假設主機採用中斷方式,檢測到intn才幹被拉低了。進入中斷服務函式能夠採用先推斷是不是ir中斷。不是再讀取sir狀態,找到觸發中斷的那個socket n,接著讀取對應的sn_ir 進行處理。每次處理完,須要主機對應暫存器的對應位清除。

wiznet官方中文站點:

wiznet官方中文部落格:

wiznet makerspace博物館:

S3C2440中斷暫存器

s3c2440的中斷暫存器 1.中斷分兩大類 內部中斷和外部中斷。2.外部中斷。24個外部中斷占用gpf0 gpf7 eint0 eint7 gpg0 gpg15 eint8 eint23 用這些腳做中斷輸入,則必須配置引腳為中斷,並且不要上拉。具體參考datesheet資料手冊。暫存器 extin...

S3C2440中斷暫存器有關

1.中斷分兩大類 內部中斷和外部中斷。2.外部中斷。24個外部中斷占用gpf0 gpf7 eint0 eint7 gpg0 gpg15 eint8 eint23 用這些腳做中斷輸入,則必須配置引腳為中斷,並且不要上拉。具體參考datesheet資料手冊。暫存器 extint0 extint2 三個暫...

S3C2440的中斷暫存器

s3c2440的中斷暫存器 1.中斷分兩大類 內部中斷和外部中斷。2.外部中斷。24個外部中斷占用gpf0 gpf7 eint0 eint7 gpg0 gpg15 eint8 eint23 用這些腳做中斷輸入,則必須配置引腳為中斷,並且不要上拉。具體參考datesheet資料手冊。暫存器 extin...