国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

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

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

3天內不再提示

關于MPSoC的中斷處理介紹

YCqV_FPGA_EETre ? 來源:賽靈思中文社區論壇 ? 作者:付漢杰 ? 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的具體細節,請參考文檔APU GIC: CoreLink GIC-400 Generic Interrupt Controller, DDI 0471B, r0p1。

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

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

更多信息可以參考Linux Kernel代碼,以及Linux kernel的中斷子系統之(二):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開始計數),對應的硬件中斷號是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文件里,提供了系統的中斷信息。使用命令“cat /proc/interrupts”,可以顯示軟件中斷號、中斷在各CPU發生的次數、中斷所屬中斷控制器名稱、硬件中斷號,驅動程序名稱。

讀“/proc/interrupts”的內容時,會調用kernelirqProc.c中的函數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創建一個以irq編號為名字的子目錄。每個子目錄最重要的文件是smp_affinity。通過更改smp_affinity的值,可以更改處理中斷的CPU。比如下面缺省情況下,讀出來中斷59的smp_affinity是f,對應2進制1111,表示四個處理器都能處理中斷59。后來執行命令“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 調節。

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

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

責任編輯:haq

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

    關注

    114

    文章

    17787

    瀏覽量

    193079
  • soc
    soc
    +關注

    關注

    40

    文章

    4576

    瀏覽量

    229107

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

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

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    RK806中斷處理流程深度解析:從架構到調試實戰

    RK806 作為瑞芯微主流 PMIC(電源管理芯片),其中斷機制是實現“電源鍵響應、電壓異常保護、休眠喚醒、 watchdog 超時處理” 等核心功能的基礎。Linux 驅動基于regmap_irq框架設計,屏蔽了底層寄存器操作細節,但調試時若不理解
    的頭像 發表于 02-05 13:46 ?913次閱讀
    RK806<b class='flag-5'>中斷</b><b class='flag-5'>處理</b>流程深度解析:從架構到調試實戰

    關于MT6901的直線DEMO介紹

    關于MT6901的直線DEMO介紹
    的頭像 發表于 01-30 10:54 ?397次閱讀
    <b class='flag-5'>關于</b>MT6901的直線DEMO<b class='flag-5'>介紹</b>

    新品上市!AMD Zynq UltraScale+MPSoC EG異構多處理開發平臺

    。AMDZynqUltraScale+MPSoCEG系列是AMD推出的高性能多處理器系統芯片(MPSoC),主要面向需要強大處理能力和靈活硬件加速的復雜應用。集成了高性能
    的頭像 發表于 01-12 08:18 ?1024次閱讀
    新品上市!AMD Zynq UltraScale+<b class='flag-5'>MPSoC</b> EG異構多<b class='flag-5'>處理</b>開發平臺

    RISC-V怎么實現核間中斷?核心本地中斷控制器(CLINT)深度解析

    于每個核心 / 硬件線程(hart)的中斷控制器,專門處理「核心本地、非共享」的中斷類型,區別于處理外設共享中斷的 PLIC(Platfor
    的頭像 發表于 12-13 14:06 ?2428次閱讀
    RISC-V怎么實現核間<b class='flag-5'>中斷</b>?核心本地<b class='flag-5'>中斷</b>控制器(CLINT)深度解析

    關于NFC鎳鋅鐵氧體片的介紹

    關于NFC鎳鋅鐵氧體片的介紹
    的頭像 發表于 12-04 10:52 ?405次閱讀
    <b class='flag-5'>關于</b>NFC鎳鋅鐵氧體片的<b class='flag-5'>介紹</b>

    串口空閑中斷與串口超時中斷介紹

    。 特點 依賴總線物理狀態,而非時間。 常用于檢測不定長數據幀的結束,無需依賴特定結束符。 應用場景 Modbus通信:不定長數據包的接收。 DMA接收:配合DMA自動搬運數據,空閑中斷通知CPU處理
    發表于 11-21 08:31

    RVMCU課堂「12」: 手把手教你玩轉RVSTAR—外部中斷

    [size=14.6667px]NucleiStudio IDE 202102版 硬件需求 RV-STAR開發板 中斷知識介紹 外部中斷處理
    發表于 10-31 07:39

    RVMCU課堂「10」: 手把手教你玩轉RVSTAR—處理器內部中斷

    10-64bit 軟件平臺 Nuclei Studio IDE 202102版 硬件需求 RV-STAR開發板 中斷配置函數和中斷處理函數介紹 RV-STAR
    發表于 10-31 06:12

    關于系統鏈接腳本的介紹

    一、隊伍介紹 本篇為蜂鳥E203系列分享第四篇,本篇介紹的內容是系統鏈接腳本。 二、如何實現不同的下載模式? 實現三種不同的程序運行方式,可通過makefile的命令行指定不同的鏈接腳本,從而實現
    發表于 10-30 08:26

    關于蜂鳥E203內核中斷硬件實現中斷嵌套的設計

    開發板:MCU200T 中斷機制即處理器核在執行程序指令流的過程中突然被別的請求打斷而中止執行當前程序,轉而處理別的事情,處理完重新回到之前程序終端的位置繼續執行。
    發表于 10-23 07:07

    瑞薩RA系列MCU的中斷過程介紹

    中斷來臨的時候會最先經過IRQ寄存器,IRQ寄存器檢測到中斷的時候,會向中央處理嵌套向量中斷控制器NVIC發送中斷信號,當NVIC檢測到
    的頭像 發表于 09-23 09:45 ?1268次閱讀
    瑞薩RA系列MCU的<b class='flag-5'>中斷</b>過程<b class='flag-5'>介紹</b>

    基于AD9613與Xilinx MPSoC平臺的高速AD/DA案例分享

    本文主要介紹基于Xilinx UltraScale+MPSoC XCZU7EV的高速AD采集與高速DA輸出案例
    的頭像 發表于 06-03 14:22 ?894次閱讀
    基于AD9613與Xilinx <b class='flag-5'>MPSoC</b>平臺的高速AD/DA案例分享

    第六章 外部中斷

    本章介紹W55MH32的IO口作為外部中斷輸入的使用。先闡述了NVIC(嵌套向量中斷控制器) 的結構、寄存器、優先級及相關函數,再說明EXTI(外部中斷和事件控制器)的功能。框圖及I
    的頭像 發表于 05-26 16:27 ?1491次閱讀
    第六章 外部<b class='flag-5'>中斷</b>

    嵌入式學習-飛凌嵌入式ElfBoard ELF 1板卡-Linux系統中斷之Linux中斷介紹

    一、Linux系統中使用中斷的一般步驟(一)中斷請求(IRQ Request):驅動程序使用request_irq()函數向內核請求分配中斷資源,并注冊中斷
    發表于 03-28 10:44

    飛凌嵌入式ElfBoard ELF 1板卡-Linux系統中斷之Linux中斷介紹

    一、Linux系統中使用中斷的一般步驟(一)中斷請求(IRQ Request):驅動程序使用request_irq()函數向內核請求分配中斷資源,并注冊中斷
    發表于 03-27 10:28