C6678 MSI中斷配置

2021-08-31 06:55:01 字數 1992 閱讀 6572

在pcie中斷中,一共存在4種中斷分別為:msi中斷、legacy中斷、錯誤中斷和電源管理及重啟事件中斷。比較常用的是msi中斷和legacy中斷。當c6678當做ep端時,只能產生msi和legacy中斷中的一種。當c6678作為rc端時,msi和legacy中斷都能處理。

如圖 1所示,c6678支援32個msi中斷,每四個中斷組成乙個中斷事件號。需要注意的是核0只能支援4號中斷事件號。以此類推,核1只能支援5號中斷,核7只能支援11號中斷。由此可知,常用的核0只能支援中斷vector0、8、16和24,且這四個中斷vector共享乙個4號中斷事件號。

圖 1 pcie中斷事件

具體配置過程如下:

(1)配置msi_en=1(暫存器msi_cap中bit16),使能msi中斷。

(2)配置mult_msg_en=0x5(暫存器msi_cap[22:20],見圖 2)。

圖 2 mult_msg_en的配置

(3)配置mult_msg_cap=0x5(暫存器msi_cap[19:17],見圖 3)。

圖 3 mult_msg_cap的配置

(4)配置intx_dis=1(暫存器status_command中bit10),關閉legacy中斷。

(5)配置mem_sp=1(暫存器status_command中bit1),使能裝置響應儲存器訪問。

(6)配置bus_ms=1(暫存器status_command中bit2),使能匯流排控制權。

(7) 配置msin_irq_status暫存器(n=0~7)。這裡舉例配置核0能響應的中斷vector0、8、16和24。配置msi0_irq_status=0xf(見圖 4),清除原本暫存器中的值。

圖 4 msi0_irq_status的配置

(8)配置msi0_irq_enable_set暫存器(n=0~7)。這裡舉例配置核0能響應的中斷vector0、8、16和24。配置msi0_irq_enable_set=0xf(見圖 5),使能中斷vector0、8、16和24。

圖 5 msi0_irq_enable_set的配置

(9)配置irq_eoi暫存器(見圖 6),在其寫入中斷事件號來表明該中斷事件的結束。核0能響應的中斷事件號為4,故配置irq_eoi=0x4。

圖 6 irq_eoi的配置

c6678中存在暫存器msi_irq(見圖 7),該暫存器由外部裝置寫入。當外部寫入的值為0x0時,表示該裝置接收到中斷vector0。以此類推,當外部寫入的值為0x1f,表示該裝置接收到中斷vector31。

圖 7 msi_irq暫存器配置

接收到msi中斷後,應該清除中斷vector n和清除中斷事件號。

(1)配置msin_irq_status暫存器(n=0~7)。這裡假定核0響應了中斷vector0,進入了4號中斷事件號。此時應配置msi0_irq_status=0x1(見圖 4),清除中斷vector0。

(2)配置irq_eoi暫存器(見圖 6)。這裡假定核0響應了中斷vector0,進入了4號中斷事件號,故配置irq_eoi=0x4,手動結束4號中斷事件。

C6678的中斷控制器

c6678 的中斷控制器 分兩層,一層是每個core內部的中斷控制器,這個叫interruptcontroller,簡寫intc 一層是整個晶元的,屬於晶元級的,在每個core的外面,這個叫chip level interrupt controller,縮寫cic。分兩層其實兩層功能也不同,這個不用...

C6678的中斷控制器

c6678的中斷控制器 分兩層,一層是每個core內部的中斷控制器,這個叫interruptcontroller,簡寫intc 一層是整個晶元的,屬於晶元級的,在每個core的外面,這個叫chip level interrupt controller,縮寫cic。分兩層其實兩層功能也不同,這個不用細...

TMS320C6678上電配置和FPGA復位DSP

1.dsp上電復位配置什麼?dsp的大 小端,自啟動 boot 模式,pcie模式,網路協處理器時鐘選擇需要在上電復位的時候選擇,怎麼選擇?依靠上電時候鎖定dsp device configuration pins 裝置配置管腳 的邏輯電平。配置管腳的邏輯電平怎麼設定?一般採用兩種方式 合理的板載設...