讓Linux 接收來自 PL 的自定義中斷信號

2020-12-06 電子產品世界

硬體連接

本文引用地址:http://www.eepw.com.cn/article/201807/383831.htm

MPSoC 可以接收兩組來自 PL 的中斷信號。在 Vivado 中,可以通過 PS-PL Configuration -> General -> Interrupts -> PL to PS -> IRQ0/IRQ1 打開。

對應的硬體中斷號分別是

PL PS Group 0: 121-128

PL PS Group 1: 136-143

這兩組中斷信號既可以與 IPI 中的 IP 的中斷信號相連接,也可以和 Verilog 中的邏輯相連接。如果有多個中斷源要連接到一組信號中,可以使用concat將多個信號組合成一組信號,然後連接到 IRQ。

如果要從 Verilog 引入中斷信號,需要在 IPI 中按右鍵選擇 Create Port。Port Type 選擇為 Interrupt。

軟硬體的橋梁: device tree

硬體信息怎樣傳送給軟體系統?

Linux 的答案是 Device Tree。

以下是 Device Tree Generator 為上圖中的 AXI UARTLite 自動創建的 device tree。

axi_uartlite_0: serial@a0000000 {

clocks = misc_clk_0>;

compatible = xlnx,xps-uartlite-1.00.a;

current-speed = 115200>;

device_type = serial;

interrupt-parent = gic>;

interrupts = 0 89 1>;

port-number = 1>;

reg = 0x0 0xa0000000 0x0 0x10000>;

xlnx,baudrate = 0x2580>;

xlnx,data-bits = 0x8>;

xlnx,odd-parity = 0x0>;

xlnx,s-axi-aclk-freq-hz-d = 99.999;

xlnx,use-parity = 0x0>;

};

創建 Device Tree

Device tree 是純文本文件,後綴是 .dts 或 .dtsi。當然可以手工從頭開始寫(似乎沒人這麼做),Xilinx 也提供了工具來幫助自動生成。

一種方法是使用 PetaLinux,其實這也是 petalinux-build 中的一個步驟。當在一個 PetaLinux 工程中導入 HDF 後,運行 petalinux-build它會自動調用 Device Tree Generator (DTG),為你的工程產生 device tree。用戶可以在自動生成的文件的基礎上進一步修改,修改的時候注意文件都上會寫哪些文件重新生成時會被覆蓋,哪些不會。

另一種生成 device tree 的方法是使用 SDK。SDK 可以把 DTG 加載為 BSP Generator,用來生成 device tree. DTG 的下載地址是 [ https://github.com/Xilinx/device-tree-xlnx ]。下載到本地後,在 SDK 的 Xilinx Tools -> Repositories 中添加解壓後的目錄。在 SDK 中新建一個 BSP, BSP 類型選擇 device_tree

Note: 如果是SDx工具,加載DTG的方法是 Window -> Preference -> Xilinx SDK -> Repositories

Interrupt 屬性的定義

Device tree 中和中斷相關的屬性有兩條,interrupts和interrupt-parents。

interrupt-parents指向了中斷控制器。在 MPSoC 中有多個外設都有中斷控制器屬性,分別是 GIC, GPIO, PCIe。

interrupts 後的參數指定了中斷號和中斷屬性。

Device tree bindings interrupts.txt 中定義了 interrupts 後參數的意義。需要注意的是,在中斷控制器的屬性中有#interrupt-cells的定義,表示interrupts參數需要幾個32位的字符。常見的情況是1到3。1個Cell的情況只填寫中斷號。2個Cell的情況填寫中斷號和觸發條件,GPIO Controller就是這種情況。

ARM GIC 使用的是 3 個 Cell:

第一個 cell 是 0 的話表示中斷類型:0 for SPI interrupts, 1 for PPI interrupts。PL 到 PS 的中斷屬於 SPI,所以填寫 0。

第二個 Cell 表示中斷號

第三個 Cell 表示中斷觸發方式。

ARM GIC v3 中斷 Cell 說明,來自 arm,gic-v3.txt

The 1st cell is the interrupt type; 0 for SPI interrupts, 1 for PPI

interrupts. Other values are reserved for future use.

The 2nd cell contains the interrupt number for the interrupt type.

SPI interrupts are in the range [0-987]. PPI interrupts are in the

range [0-15].

The 3rd cell is the flags, encoded as follows:

bits[3:0] trigger type and level flags.

1 = edge triggered

4 = level triggered

中斷號的確定

Device tree 中 interrupts 的中斷號請填寫硬體硬體中斷號 - 32

中斷的驅動程序

PetaLinux 中自帶了中斷服務程序的例子。

用命令 petalinux-create -t modules -n mymodule就可以創建出例子程序。

其中與註冊 IRQ 中斷號相關的語句為:

/* Get IRQ for the device */

r_irq = platform_get_resource(pdev, IORESOURCE_IRQ, 0);

if (!r_irq) {

dev_info(dev, no IRQ foundn);

dev_info(dev, mymodule at 0x%08x mapped to 0x%08xn,

(unsigned int __force)lp->mem_start,

(unsigned int __force)lp->base_addr);

return 0;

}

lp->irq = r_irq->start;

rc = request_irq(lp->irq, mymodule_irq, 0, DRIVER_NAME, lp);

if (rc) {

dev_err(dev, testmodule: Could not allocate interrupt %d.n,

lp->irq);

goto error3;

}

注意上面的程序是通過讀取 dts 獲取中斷的信息,然後讓作業系統分配一個虛擬中斷號。以前註冊中斷號是通過手工在 C 代碼中填入中斷號,現在這種方法不可行了,請使用虛擬中斷號的方法。

相關焦點

  • 從RTOS到Linux的應用移植
    在具體的應用移植過程中,還應考慮在Linux系統下解決上層應用實時響應底層硬體中斷,應用層與內核層的異步通信、數據交換,以及多進程、多線程的設計等問題。本節內容主要解決應用層與內核層的信號通知、數據交換這兩個關鍵問題。2.3.1  異步信號通知機制  RTOS是對外來事件在限定時間內能作出反應的系統。在RTOS中,時間是一種重要的系統資源,對外部事件的響應和任務的執行都必須在限定的時間內完成。在多機系統中,還必須在限定的時間內完成消息的發送和接收。
  • Qt基於QGraphicsObject自定義圖元
    但是這樣的圖元會存在一個缺點,那就是不能使用Qt的信號/槽機制,也不能使用Qt屬性系統,因為QGraphicsItem並不繼承於QObject。缺少信號/槽這樣好用的機制會使得自定義圖元與其他對象交互變得很不方便,不能使用屬性系統也會讓類失去更多的擴展性。總之不從QObject派生類會給類的使用帶來很多的不利。好在Qt已經考慮到了這些問題,QGraphicsObject應運而生。
  • 基於嵌入式Linux的語音識別系統硬軟體設計
    設計中參考了ICRoute發布的LD3320數據手冊,圖中LD3320的P0、P1、P2引腳通過SPI接口與嵌入式處理器相接,控制信號WRB、CSB、RSTB以及中斷返回信號引腳INTB與處理器S3C2440直接相連,如圖3所示。
  • 基於Linux系統的多種串行總線統一接口的實現
    SPI總線的工作過程是:首先,主機發起通信,通過片選信號激活從設備;然後,主機在串行時鐘SCK信號的同步下,將地址、命令、數據信息從串行數據輸出信號(相對主機而言)SI送出;而從設備則在SCK信號的同步下接收主機發送來的數據,並作出相應反應,最後將結果從數據輸入信號(相對主機而言)SO送出。
  • t01信號中斷處理方法 信號中斷怎麼辦
    t01信號中斷處理方法:  1、首先需要檢查一下機頂盒的接頭是否出現鬆動或掉落的現象。  2、檢查完畢後,按遙控器的F1鍵,選擇第一項「安裝與信號檢測」。  3、電視調出信號檢測畫面後,上房頂到檢查小鍋,先檢查接頭是否掉落,高頻頭的前蓋是否破損。  4、若排已除了接頭、饋線、高頻頭存在問題的原因,最後再查看一下是否是因為鍋的方向改變了。  5、調出信號質量調節,重新調整鍋的方向。
  • 英國科學家接收到神秘信號,強度很高,可能來自外星種族?
    文/濤聲依舊英國科學家接收到神秘信號,強度很高,可能來自外星種族?地外生命是否真的存在呢?提及射電望遠鏡,大家一定都不陌生,射電望遠鏡是用來接收來自宇宙信號的一種手段,從射電望遠鏡研發出來之後到現在,已經有很多的信號被人類給接收到了,但是這些信號不是無法分析,就是無意義的信號,讓很多科學家非常地失望,不過最近科學家又通過望遠鏡接收到了一個信號,而這次接受的信號跟以往的有些不一樣。
  • 從串口驅動到Linux驅動模型,想轉Linux的必會!
    實際上還有一根信號地線,共5根線。其DB9連接器引腳定義。由於接收器採用高輸入阻抗和發送驅動器比RS232更強的驅動能力,故允許在相同傳輸線上連接多個接收節點,最多可接10個節點。即一個主設備(Master),其餘為從設備(Slave),從設備之間不能通信,所以RS-422支持點對多的雙向通信。接收器輸入阻抗為4k,故發端最大負載能力是10×4k+100Ω(終接電阻)。
  • Linux系統監控工具atop
    #tslpu表示 sleeping uninterruptible 狀態線程數#zombie表示殭屍進程數clones 表示在監控周期(默認10s)內 clone() 系統調用次數linux中進程有兩種 sleep 狀態:interruptible sleep: 進程接收系統信號,可以被系統信號中斷uninterruptible sleep: 進程不接收系統信號,不可被系統信號中斷,包括kill -9 (SIGKILL 信號)。
  • 基於AT89S52單片機的超聲波信號發射與接收電路設計
    本設計的整體框圖如圖所示,主要由超聲波發射,超聲波接收與信號轉換,按鍵顯示電路與溫度傳感器電路組成。超聲波測距是通過不斷檢測超聲波發射後遇到障礙物所反射的回波,從而測出發射和接收回波的時間差T,然後求出距離S=CT/2,式中的C 為超聲波波速。在常溫下,空氣中的聲速約為340m/s。
  • 信號」?人類接收到來自比鄰星神秘信號,特殊頻率源於某種技術
    信號」?人類接收到來自比鄰星神秘信號,特殊頻率源於某種技術  olivia chan • 2020-12-21 11:26:14 來源:前瞻網 E2829G0
  • 代表人類離開太陽系的旅行者號,人類為什麼能接收到它的信號?
    眾所周知,旅行者號離我們很遠很遠,距離超過200億公裡,那它是怎麼能發出這麼強的信號讓我們接收呢?而在它上市20多年後,它又怎麼能有這樣的能力呢?其實我們可以把問題反過來想,而不是問旅行者如何能發出足夠強的信號,而是問地球如何能接收到如此微弱的信號
  • 實戰經驗吐血推薦:怎樣在Linux環境下輕鬆實現基於I2C總線的EEPROM...
    發送和接收單元使用相同的時鐘信號,如果I2C為主設備。那麼時鐘信號由I2C的波特率發生器產生;如果I2C為從設備,時鐘信號則由外部提供。  SDA和SCL為雙向的,通過外部+3.3 V上拉電阻連接至正向電壓。當總線處於空閒狀態時,SDA和SCL都應是高電平,I2C通常的配置模式如圖1所示。
  • 假如你也有一口天線,你也許能接收到來自嫦娥5號的信號
    最近在某社交網站趴著看外國愛好者,大佬用自製設備接收嫦娥測控信號。這個頻率在 8GHz左右,也就是 X 波段。大佬們表示信號質量非常不錯。發射當天位於美國的 Brad Young 就觀測到了火箭和嫦娥。據說這些數據對演算嫦娥的 TLE 軌道數據,以便愛好者進行無線電觀測,提供很多幫助。
  • 天文學家再次接收到神秘信號,這次來自比鄰星,地球位置或暴露?
    1977年8月16日位於俄亥俄州立大學的大耳朵射電望遠鏡捕獲到一段信號,整個信號持續時間長達72秒,相對於宇宙背景噪音來說非常穩定。舉一個簡單的例子,就像是在一個嘈雜人聲鼎沸的小市場中響起了一首優美的歌聲那樣。記錄這段信號的科學家傑瑞·艾曼感覺到非常不可思議,因此就在這段信號的旁邊寫上了「Wow!」
  • 哈佛專家稱:三月初接收到信號來自超級文明!一證據窺見真相!
    本月初加拿大射電望遠鏡接收到了16個快速射電暴(FRB)的信號,其實這並不是一條特別引人注意的新聞,畢竟地球上的射電望遠鏡每天都能接收到來自深空的無線電信號,其中每年都不乏FRB信號!但前段時間哈佛大學天文系主任阿維·勒布稱呼,這個信號不能排除來自超級文明的可能,比如可能是他們來往恆星際間旅行的一種方式!什麼是快速射電暴?
  • 美國大規模電話信號中斷 什麼情況?!
    來源:海外網作者:李萌 ▲全美各大城市出現信號中斷現象。(圖片為Down Detector網站截圖,該網站主要用於追蹤通訊服務的運行情況。)當地時間15日,美國出現大規模電話信號中斷的問題,三大主要電話運營商都受到影響。由於時機敏感,話題很快在推特上引發熱議。據今日俄羅斯報導,當地時間15日晚間開始,全美陸陸續續有用戶表示,電話出現信號中斷的問題。受到影響的運營商包括T-Mobile、AT&;T、Verizon,還有一些較小規模的運營商。
  • 談信號發射設立與信號接收設立
    談信號發射設立與信號接收設立:人說話,是發射信號,怎麼說?是設立信號。人耳朵,是接收信號,怎麼識別信號?人腦信號庫存事先設立好。比如,人從小學很多東西,其實就是在設立「發射信號與接收信號」,以便與人信號交流。那我們的手機呢?手機發射設立信號與設立接收信號。電腦下棋呢?設立接收信號,發出設立信號。手機掃二維碼呢?
  • 電桿「腰斬」電視電話信號中斷(組圖)
    編輯:耿寧   重載電桿攔腰被「斬」電視電話信號中斷本報記者 陳若夢 攝  每日甘肅網—蘭州晨報訊 (記者 康淵) 12月23日凌晨5時許,城關區火車站東路的蘭州客運中心門口,隨著「砰」的一聲巨響,馬路邊一根承載著數十根電纜的木製電桿被攔腰折斷,架設在馬路上空的網通、鐵通、聯通等六家單位的數十根電纜跌落在馬路中央,部分被「斬」斷,造成附近兩千餘戶居民的電話及電視信號中斷。
  • 數字溫度傳感器DS1621在Linux下的IIC接口驅動設計
    IIC總線採用一主多從的運行機制,在同一時間只能有一臺設備作為主設備,總線的運行由主設備控制,主設備控制數據的傳送起始信號、發出時鐘信號、從機地址信號、數據信號,由接收數據方在傳送結束時發出應答信號,每個IIC總線上的設備都有一個唯一的地址,和主設備進行通信。