那曲檬骨新材料有限公司

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

關于MPSoC的中斷處理介紹

YCqV_FPGA_EETre ? 來源:賽靈思中文社區(qū)論壇 ? 作者:付漢杰 ? 2021-05-07 15:34 ? 次閱讀

目錄1. MPSoC的中斷處理介紹

2. 擴展PL中斷

3. 擴展AXI Intc中斷

3.1. AXI Intc PL連接

3.2. AXI Intc Device Tree

3.3. AXI Intc外設的Device Tree

4. 擴展MIO中斷

4.1. GPIO中斷控制器

4.2. 外設使用GPIO中斷控制器5. 檢查Linux中斷信息

01

MPSoC的中斷處理介紹

MPSoC是帶ARM處理器FPGA(PL)的SoC,包含4核A53及其常用外部模塊(PS)。A53(PS)使用Arm GIC-400,屬于GICv2架構。如果想了解GIC-400的具體細節(jié),請參考文檔APU GIC: CoreLink GIC-400 Generic Interrupt Controller, DDI 0471B, r0p1。

MPSoC的A53(PS)的中斷細節(jié),在Xilinx的UG1085的Table 13‐1: System Interrupts部分做了詳細介紹。

需要注意的是,UG1085的Table 13‐1描述的是芯片的內部連線,是硬件中斷號,和Linux Kernel使用的軟件中斷號(邏輯中斷號)有區(qū)別。有的SOC只有一個中斷控制器,有的SOC有多個串聯(lián)/并聯(lián)的中斷控制器。Linux Kernel為了各種處理復雜的中斷控制器設計,并給中斷提供統(tǒng)一的API,在內部使用統(tǒng)一編址的的軟件中斷號。同時,GIC的Linux Kernel驅動內部有一個表,用于轉換硬件中斷號和軟件中斷號。這樣的好處是,即使不同SoC系統(tǒng)里有不同的中斷控制器結構,驅動程序也可以忽略這些細節(jié),使用統(tǒng)一的API,比如platform_get_irq,從Device Tree里獲取中斷號,并向Linux Kernel注冊驅動程序的中斷處理程序。另外,設備的Device Tree里的中斷號是局部的,在它所屬的中斷控制器里保持唯一即可。Linux Kernel使用的軟件中斷號,是整個Linux Kernel系統(tǒng)的,需要在Linux Kernel范圍內保持唯一。

更多信息可以參考Linux Kernel代碼,以及Linux kernel的中斷子系統(tǒng)之(二):IRQ Domain介紹。

MPSoC的Device Tree的軟件中斷號,比UG1085的Table 13‐1提供的硬件中斷號小32。這是因為A53內部的中斷號0-31是私有中斷。

以GEM0為例,UG1085的Table 13‐1提供的硬件中斷號是89,Device Tree里的設備號是0x39(57),驅動程序里使用platform_get_irq(pdev, 0)獲取軟件中斷號。

VCU TRD 2020.2基于zcu106_llp2_xv20的PetaLinux工程里的GEM0的中斷信息:

ethernet@ff0b0000 {

compatible = “cdns,zynqmp-gemcdns,gem”;

interrupt-parent = 《0x04》;

interrupts = 《0x00 0x39 0x04 0x00 0x39 0x04》;

};

UG1085的Table 13‐1里GEM0的硬件中斷號

UG1085的Table 35‐6: PS-PL Interrupts Summary,使用的是Device Tree里的軟件中斷號。

需要更多信息,可以參考MPSoC Device tree interrupt number for PL-PS interrupt, Zynq-7000 mapping irq number into device tree value。

02

擴展PL中斷

在FPGA(PL)部分,可以的擴展很多外部設備,比如串口、I2CCan等。A53(PS)為PL的外部設備預留了16個中斷,相關描述如下。

PS-PL Interrupts

The interrupts from the processing system I/O peripherals (IOP) are routed to the PL. In the

other direction, the PL can asynchronously assert 16 interrupts to the PS. These interrupts

are assigned a priority level routed to interrupt controllers which aggregate and route them

to appropriate processor. Additionally, FIQ/IRQ interrupts are available which are routed

directly to the private peripheral interrupt unit of the interrupt controller. Table 35-6

summarizes the interrupts.

PL到A53(PS)的外部設備預留了16個中斷,在Table 13‐1有如下表述。

VCU TRD 2020.2設計里,使用了很多PL中斷。以Video Phy為例,在工程zcu106_llp2_xv20里,它連接到了PL中斷的第3位(從0開始計數(shù)),對應的硬件中斷號是124,減去32后是92(0x5c)。

在以zcu106_llp2_xv20為硬件工程編譯的PetaLinux工程里,Video Phy的中斷信息如下,確實是0x5c。

vid_phy_controller@a0130000 {

compatible = “xlnx,vid-phy-controller-2.2xlnx,vid-phy-controller-2.1”;

interrupt-names = “irq”;

interrupt-parent = 《0x04》;

interrupts = 《0x00 0x5c 0x04》;

};

03

擴展AXI Intc中斷

有時候,PL-PS的中斷還不夠用。這時可以使用Xilinx的axi_intc(AXI Interrupt controller)做擴展。Xilinx Wiki網站上的文章Cascade Interrupt Controller support in DTG有詳細描述。

總結起來,有下面三步。

3.1. AXI Intc PL連接

在PL設計里添加axi_intc(AXI Interrupt controller),把axi_intc的中斷輸出連接到GIC的PL中斷輸入,把其它外設的中斷輸出連接到axi_intc的中斷輸入。

3.2. AXI Intc Device Tree

然后在Device Tree里,聲明axi_intc的輸出在GIC的中斷號。

axi_interrupt-controller {

interrupt-parent = “gic”

interrupts = 《 0 89 1》;

}

3.3. AXI Intc外設的Device Tree

外設的Device Tree里,需要聲明interrupt-parent是axi_intc,并聲明它在axi_intc內部的中斷號。interrupt-parent后面的字符串,是Device Tree里axi_intc里的標號。如果有多個axi_intc,每個axi_intc的標號(Label)不一樣。每個外設的Device Tree里,需要指定自己對應的axi_intc的標號(Label)。

axi_gpio {

interrupt-parent = “axi_intc”;

interrupts = 《0 1》;

}

axi_intc的文檔,也可以參考 Xilinx Interrupt Controller 。

04

擴展MIO中斷

下面整合之前的文章,通過MIO接入外設中斷。

Zynq-7000和MPSoC有很多MIO管腳。如果外設有中斷,也可以通過MIO連接中斷。這時候,MIO作為GPIO控制器,加載GPIO驅動。下面的描述中,GPIO就是MIO對應的GPIO設備。

4.1. GPIO中斷控制器

按下列模式,在GPIO的設備樹里聲明為中斷控制器

&gpio0 {

#interrupt-cells = 《2》;

interrupt-controller;

};

GPIO的中斷說明,在Linux的文件

Documentation/devicetree/bindings/gpio/gpio-zynq.txt里。主要內容如下:

- interrupt-controller : Marks the device node as an interrupt controller.

- #interrupt-cells : Should be 2. The first cell is the GPIO number.

The second cell bits[3:0] is used to specify trigger type and level flags:

1 = low-to-high edge triggered.

2 = high-to-low edge triggered.

4 = active high level-sensitive.

8 = active low level-sensitive.

4.2. 外設使用GPIO中斷控制器

外設的設備樹里,添加下列行,聲明gpio0為自己的中斷控制器,并聲明對應的MIO引腳和中斷內心。

touchscreen@0 {

interrupt-parent = 《&gpio0》;

interrupts = 《52 2》; /* MIO 52, falling edge */

};

05

檢查Linux中斷信息

Linux在/proc/interrupts文件里,提供了系統(tǒng)的中斷信息。使用命令“cat /proc/interrupts”,可以顯示軟件中斷號、中斷在各CPU發(fā)生的次數(shù)、中斷所屬中斷控制器名稱、硬件中斷號,驅動程序名稱。

讀“/proc/interrupts”的內容時,會調用kernelirqProc.c中的函數(shù)int show_interrupts(struct seq_file *p, void *v)。

下面是一個例子。

root@zcu106_vcu_llp2_nv16:~# cat /proc/interrupts

CPU0 CPU1 CPU2 CPU3

3: 18945 9421 13324 23628 GICv2 30 Level arch_timer

6: 0 0 0 0 GICv2 67 Level zynqmp_ipi

12: 0 0 0 0 GICv2 155 Level axi-pmon, axi-pmon

13: 0 0 0 0 GICv2 156 Level zynqmp-dma

14: 0 0 0 0 GICv2 157 Level zynqmp-dma

15: 0 0 0 0 GICv2 158 Level zynqmp-dma

16: 0 0 0 0 GICv2 159 Level zynqmp-dma

17: 0 0 0 0 GICv2 160 Level zynqmp-dma

18: 0 0 0 0 GICv2 161 Level zynqmp-dma

19: 0 0 0 0 GICv2 162 Level zynqmp-dma

20: 0 0 0 0 GICv2 163 Level zynqmp-dma

21: 0 0 0 0 GICv2 164 Level Mali_GP_MMU, Mali_GP, Mali_PP0_MMU, Mali_PP0, Mali_PP1_MMU, Mali_PP1

22: 0 0 0 0 GICv2 109 Level zynqmp-dma

23: 0 0 0 0 GICv2 110 Level zynqmp-dma

24: 0 0 0 0 GICv2 111 Level zynqmp-dma

25: 0 0 0 0 GICv2 112 Level zynqmp-dma

26: 0 0 0 0 GICv2 113 Level zynqmp-dma

27: 0 0 0 0 GICv2 114 Level zynqmp-dma

28: 0 0 0 0 GICv2 115 Level zynqmp-dma

29: 0 0 0 0 GICv2 116 Level zynqmp-dma

31: 144 0 0 0 GICv2 95 Level eth0, eth0

33: 121 0 0 0 GICv2 49 Level cdns-i2c

34: 140 0 0 0 GICv2 50 Level cdns-i2c

35: 0 0 0 0 GICv2 42 Level ff960000.memory-controller

36: 0 0 0 0 GICv2 57 Level axi-pmon, axi-pmon

37: 43 0 0 0 GICv2 47 Level ff0f0000.spi

38: 0 0 0 0 GICv2 58 Level ffa60000.rtc

39: 0 0 0 0 GICv2 59 Level ffa60000.rtc

40: 0 0 0 0 GICv2 165 Level ahci-ceva[fd0c0000.ahci]

41: 232 0 0 0 GICv2 81 Level mmc0

42: 133 0 0 0 GICv2 53 Level xuartps

44: 0 0 0 0 GICv2 84 Edge ff150000.watchdog

45: 0 0 0 0 GICv2 88 Level ams-irq

46: 12 0 0 0 GICv2 154 Level fd4c0000.dma

47: 0 0 0 0 GICv2 151 Level fd4a0000.zynqmp-display

48: 0 0 0 0 GICv2 122 Level xilinx_framebuffer

49: 0 0 0 0 GICv2 141 Level xilinx_framebuffer

50: 0 0 0 0 GICv2 142 Level xilinx_framebuffer

51: 0 0 0 0 GICv2 143 Level xilinx_framebuffer

52: 0 0 0 0 GICv2 123 Level xilinx-hdmi-rx

53: 0 0 0 0 GICv2 121 Level xilinx_framebuffer

54: 1 0 0 42423 GICv2 125 Level xilinx-hdmitxss

55: 0 0 0 42426 GICv2 127 Level xlnx-mixer

56: 81 0 0 0 GICv2 126 Level a00d0000.i2c

57: 0 0 0 0 GICv2 139 Edge a00d1000.sync_ip

58: 4 0 0 0 GICv2 128 Level a0200000.al5e, a0220000.al5d

59: 16 0 0 0 GICv2 124 Level xilinx-vphy

60: 0 0 0 0 GICv2 97 Level xhci-hcd:usb1

IPI0: 2763 1869 2597 1312 Rescheduling interrupts

IPI1: 21 26 19 36 Function call interrupts

IPI2: 0 0 0 0 CPU stop interrupts

IPI3: 0 0 0 0 CPU stop (for crash dump) interrupts

IPI4: 0 0 0 0 Timer broadcast interrupts

IPI5: 0 0 0 0 IRQ work interrupts

IPI6: 0 0 0 0 CPU wake-up interrupts

從上面打印信息,也可以看到硬件中斷號、軟件中斷號(邏輯中斷號)不一樣。

目錄/proc/irq下面會為每個rq創(chuàng)建一個以irq編號為名字的子目錄。每個子目錄最重要的文件是smp_affinity。通過更改smp_affinity的值,可以更改處理中斷的CPU。比如下面缺省情況下,讀出來中斷59的smp_affinity是f,對應2進制1111,表示四個處理器都能處理中斷59。后來執(zhí)行命令“echo 2 》 /proc/irq/59/smp_affinity”,把其改為2,就只有CPU-1能處理中斷59。

root@zcu106_vcu_llp2_nv16:~# ls /proc/irq/48 -l

total 0

-r--r--r-- 1 root root 0 Apr 28 06:54 affinity_hint

-r--r--r-- 1 root root 0 Apr 28 06:54 effective_affinity

-r--r--r-- 1 root root 0 Apr 28 06:54 effective_affinity_list

-r--r--r-- 1 root root 0 Apr 28 06:54 node

-rw-r--r-- 1 root root 0 Apr 28 06:25 smp_affinity

-rw-r--r-- 1 root root 0 Apr 28 06:54 smp_affinity_list

-r--r--r-- 1 root root 0 Apr 28 06:54 spurious

dr-xr-xr-x 2 root root 0 Apr 28 06:54 xilinx_framebuffer

root@zcu106_vcu_llp2_nv16:~# ls /proc/irq/59 -l

total 0

-r--r--r-- 1 root root 0 Apr 28 06:54 affinity_hint

-r--r--r-- 1 root root 0 Apr 28 06:54 effective_affinity

-r--r--r-- 1 root root 0 Apr 28 06:54 effective_affinity_list

-r--r--r-- 1 root root 0 Apr 28 06:54 node

-rw-r--r-- 1 root root 0 Apr 28 06:54 smp_affinity

-rw-r--r-- 1 root root 0 Apr 28 06:54 smp_affinity_list

-r--r--r-- 1 root root 0 Apr 28 06:54 spurious

dr-xr-xr-x 2 root root 0 Apr 28 06:54 xilinx-vphy

root@zcu106_vcu_llp2_nv16:~# cat /proc/irq/59/smp_affinity

f

root@zcu106_vcu_llp2_nv16:~# echo 2 》 /proc/irq/59/smp_affinity

root@zcu106_vcu_llp2_nv16:~# cat /proc/irq/59/smp_affinity

2

root@zcu106_vcu_llp2_nv16:~# echo 4 》 /proc/irq/59/smp_affinity

root@zcu106_vcu_llp2_nv16:~# cat /proc/irq/59/smp_affinity

4

Linux的中斷信息,可以參考問 Linux 中斷和smp_affinity, Linux 中斷和 IRQ 調節(jié)。

原文標題:【工程師分享】擴展MPSoC中斷

文章出處:【微信公眾號:FPGA開發(fā)圈】歡迎添加關注!文章轉載請注明出處。

責任編輯:haq

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 控制器
    +關注

    關注

    112

    文章

    16445

    瀏覽量

    179451
  • soc
    soc
    +關注

    關注

    38

    文章

    4204

    瀏覽量

    219093

原文標題:【工程師分享】擴展MPSoC中斷

文章出處:【微信號:FPGA-EETrend,微信公眾號:FPGA開發(fā)圈】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    串口中斷是內部中斷還是外部中斷,串口中斷是怎么觸發(fā)的

    串口中斷通常被視為外部中斷。雖然串口控制器(如USART、UART等)可能集成在微控制器或處理器的內部,但從中斷的角度來看,串口中斷是由
    的頭像 發(fā)表于 01-29 15:03 ?118次閱讀

    Zynq UltraScale+ MPSoC數(shù)據(jù)手冊

    電子發(fā)燒友網站提供《Zynq UltraScale+ MPSoC數(shù)據(jù)手冊.pdf》資料免費下載
    發(fā)表于 12-30 14:37 ?2次下載

    OMAP5912多媒體處理中斷參考指南

    電子發(fā)燒友網站提供《OMAP5912多媒體處理中斷參考指南.pdf》資料免費下載
    發(fā)表于 12-17 16:25 ?0次下載
    OMAP5912多媒體<b class='flag-5'>處理</b>器<b class='flag-5'>中斷</b>參考指南

    關于中斷知識學習總結筆記

    關于中斷知識學習總結筆記》 一、中斷的核心概念 中斷是計算機運行過程中的一種重要機制,它能夠使計算機在執(zhí)行主程序時,暫停當前任務去響應特定的事件或請求,
    發(fā)表于 11-23 11:23

    AMD/Xilinx Zynq? UltraScale+ ? MPSoC ZCU102 評估套件

    Zynq UltraScale+ MPSoC 器件,具有四核 Arm? Cortex-A53、雙核 Cortex-R5 實時處理器和基于 AMD/Xilinx 16nm FinFET+ 可編程邏輯
    的頭像 發(fā)表于 11-20 15:32 ?547次閱讀
    AMD/Xilinx Zynq? UltraScale+ ? <b class='flag-5'>MPSoC</b> ZCU102 評估套件

    基于PYNQ和機器學習探索MPSOC筆記

    新版本中,不僅僅介紹MPSOC的體系結構和應用場景,更是結合當前應用最廣的PYNQ框架和機器學習應用進行分析。作為一本不可多得的免費電子英文書籍,本書既是使用Zynq MPSoC的開發(fā)人員的實用指南
    的頭像 發(fā)表于 11-16 11:32 ?391次閱讀
    基于PYNQ和機器學習探索<b class='flag-5'>MPSOC</b>筆記

    在米爾電子MPSOC實現(xiàn)12G SDI視頻采集H.265壓縮SGMII萬兆以太網推流

    4K UHD音視頻廣播領域的優(yōu)勢 1.高性能與低功耗的結合:Zynq UltraScale+ MPSoC采用了16nm FinFET工藝,集成了多核處理器和可編程邏輯,能夠在提高性能的同時降低功耗,這對
    發(fā)表于 11-01 16:56

    單片機有哪些中斷類型

    單片機中斷是指在單片機執(zhí)行程序的過程中,當外部設備或內部條件發(fā)生某個特定事件時,能夠暫停當前正在執(zhí)行的程序,轉而去執(zhí)行一個特定的服務程序(稱為中斷服務程序或中斷處理程序),
    的頭像 發(fā)表于 10-17 18:12 ?912次閱讀

    在米爾電子MPSOC實現(xiàn)12G SDI視頻采集H.265壓縮SGMII萬兆以太網推流

    協(xié)議。 3.MPSoC與VCU架構在4K UHD音視頻廣播領域的優(yōu)勢 高性能與低功耗的結合 :Zynq UltraScale+ MPSoC采用了16nm FinFET工藝,集成了多核處理器和可編程邏輯
    發(fā)表于 10-14 17:42

    ARM處理器的異常中斷響應過程

    ARM處理器的異常中斷響應是嵌入式系統(tǒng)設計中一個至關重要的環(huán)節(jié),它確保了系統(tǒng)在面對內部或外部事件時能夠穩(wěn)定、可靠地運行。
    的頭像 發(fā)表于 09-10 11:18 ?1142次閱讀

    freertos中斷優(yōu)先級在哪設置

    FreeRTOS是一個流行的實時操作系統(tǒng),它廣泛應用于嵌入式系統(tǒng)開發(fā)。在FreeRTOS中,中斷優(yōu)先級是一個重要的概念,因為它決定了中斷處理的順序和響應時間。 1. 理解中斷優(yōu)先級 在
    的頭像 發(fā)表于 09-02 14:17 ?777次閱讀

    【GD32 MCU 入門教程】GD32 MCU 常見外設介紹(4)EXTI 中斷介紹

    EXTI(中斷/事件控制器)包含多個相互獨立的邊沿檢測電路并且能夠向處理器內核產生中斷請求或喚醒事件。 EXTI 有三種觸發(fā)類型:上升沿觸發(fā)、下降沿觸發(fā)和任意沿觸發(fā)。 EXTI中的每一個邊沿檢測電路都可以獨立配置和屏蔽。
    的頭像 發(fā)表于 08-13 11:20 ?562次閱讀
    【GD32 MCU 入門教程】GD32 MCU 常見外設<b class='flag-5'>介紹</b>(4)EXTI <b class='flag-5'>中斷</b><b class='flag-5'>介紹</b>

    can總線中斷狀態(tài)什么意思呢?

    過程中的中斷處理機制。以下是關于CAN總線中斷狀態(tài)的詳細介紹。 CAN總線概述 1.1 CAN總線定義 CAN總線是一種基于時間分割的多主通
    的頭像 發(fā)表于 06-16 10:21 ?1908次閱讀

    RISC-V的中斷處理 中斷操作三個步驟

    中斷操作三個步驟: 1、中斷初始化 2、trap處理 3、用戶中斷處理
    的頭像 發(fā)表于 05-20 16:38 ?1380次閱讀

    如何停止或取消單片機的中斷處理

    處理器中的NVIC能夠處理多個可屏蔽中斷通道和可編程優(yōu)先級,中斷輸入請求可以是電平觸發(fā),也可以是最小的一個時鐘周期的脈沖信號。
    發(fā)表于 04-15 11:05 ?1522次閱讀
    如何停止或取消單片機的<b class='flag-5'>中斷</b><b class='flag-5'>處理</b>?
    百家乐官网赌博代理荐| 百家乐半圆桌| 累积式百家乐的玩法技巧和规则| 必博备用网址| 百家乐官网可以作假吗| 百家乐官网直揽经验| 网上百家乐真的假| 眉山市| 百家乐官网筹码防伪套装| 大发888 客服| 七胜百家乐官网娱乐城总统网上娱乐城大都会娱乐城赌场 | 百家乐官网怎么推算| 百家乐官网如何赚洗码| 太阳城札记| 百家乐官网天下第一庄| 百家乐官网技巧玩法技巧| 大发888游戏下载中心| 百家乐官网吹| 威尼斯人娱乐场网站| 百家乐官网投注网站是多少| 电脑打百家乐怎么赢| 足球走地| 玩百家乐官网怎么能赢呢| 德州扑克3d豪华版| 百家乐官网博弈之赢者理论| 京城娱乐城开户| 自己做生意怎样才能带来财运| 新利娱乐| 百家乐的必赢方法| 长泰县| 怎样玩百家乐才能| 网络百家乐官网投注| 澳门百家乐游戏玩法| 澳门百家乐官网娱乐网| 大发888代充| 女神百家乐官网的玩法技巧和规则 | 金百家乐的玩法技巧和规则| 百家乐官网技巧-百家乐官网开户指定代理网址 | 澳门百家乐官网技巧皇冠网| 女优百家乐的玩法技巧和规则| 现金百家乐官网破解|