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