前面的文章中介紹過(guò),MSI本質(zhì)上是一種Memory Write,和PCIe總線中的Message概念半毛錢(qián)關(guān)系都沒(méi)有。并且,MSI的Data Payload也是固定的,始終為1DW。
由于MSI也是從PCI總線繼承而來(lái)的,因此MSI相關(guān)的寄存器也存在于配置空間中的PCI兼容部分(前256個(gè)字節(jié))。如下圖所示,MSI有四種類(lèi)型:
其中Capability ID的值是只讀的,05h表示支持MSI功能。
Next Capability Pointer也是只讀的,其用于查找下一個(gè)MSI的位置,00h則表示到達(dá)Linked List的最后了。
Message Control Register用于確定MSI的格式與支持的功能等信息,如下圖所示:
具體描述如下:
Message Address Register:32-bit最低兩位固定為0,使得該地址是DW對(duì)齊的。
當(dāng)Mask Bits將相關(guān)的中斷向量(Interrupt Vector)屏蔽后,該MSI將不會(huì)被發(fā)送。軟件可以通過(guò)這種方式來(lái)使能或者禁止某些MSI的發(fā)送。如果相關(guān)中斷向量沒(méi)有被屏蔽,則如果發(fā)生了相關(guān)中斷請(qǐng)求,這時(shí)Pending Bits中的相應(yīng)bit則會(huì)被置位。一旦中斷信息被發(fā)出,則該bit會(huì)立即被清零。
注:可能有的人會(huì)有疑惑了(無(wú)論是Mindshare的書(shū),還是PCI的Spec都沒(méi)有明確解釋?zhuān)?,因?yàn)镸ask Bits和Pending Bits都只有32位,而8位的中斷向量號(hào)最多可以表示256個(gè)!顯然,32位最多只能對(duì)應(yīng)32個(gè)中斷向量號(hào),無(wú)法支持256個(gè)的。實(shí)際上,一般的系統(tǒng)不會(huì)支持256個(gè)中斷向量號(hào)的,32個(gè)就已經(jīng)足夠用了,所以并不用擔(dān)心這個(gè)問(wèn)題。
PCIe設(shè)備會(huì)根據(jù)配置空間中的MSI請(qǐng)求信息,來(lái)創(chuàng)建Memory Write TLP,來(lái)講MSI信息發(fā)送出去。作為一種特殊的TLP,傳遞MSI的TLP需要遵循以下規(guī)則:
· No Snoop和Relaxed Ordering bits的值必須為0
· TLP長(zhǎng)度值必須為01h
· First BE必須為1111b
· Last BE必須為0000b
· 地址是直接從配置空間中的響應(yīng)位置復(fù)制過(guò)來(lái)的
如下圖所示:
-
寄存器
+關(guān)注
關(guān)注
31文章
5250瀏覽量
119196 -
PCIe
+關(guān)注
關(guān)注
15文章
1165瀏覽量
81972
原文標(biāo)題:【博文連載】PCIe掃盲——中斷機(jī)制介紹(MSI)
文章出處:【微信號(hào):ChinaAET,微信公眾號(hào):電子技術(shù)應(yīng)用ChinaAET】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論