作者:Mculover666
在實(shí)際玩Zynq中斷之前,先扯一扯中斷這個(gè)神奇的東西~
實(shí)時(shí)性是一個(gè)嵌入式系統(tǒng)很重要的性能,實(shí)時(shí)性體現(xiàn)在一個(gè)系統(tǒng)對(duì)外部事件的響應(yīng)能力和處理能力上,而CPU對(duì)一個(gè)事件的響應(yīng)及處理主要依托于 —— 中斷。
通俗的來(lái)說(shuō),中斷的一個(gè)基本過(guò)程就是:當(dāng)一個(gè)事件發(fā)生時(shí)(比如按鍵按下),產(chǎn)生一個(gè)可以發(fā)送到CPU的中斷信號(hào)(上升沿或下降沿?zé)o所謂,是個(gè)信號(hào)就行),當(dāng)CPU接收到這個(gè)中斷信號(hào)后,對(duì)這個(gè)中斷信號(hào)所表示的事件進(jìn)行處理(跳轉(zhuǎn)去執(zhí)行中斷服務(wù)程序,對(duì)按鍵按下這個(gè)事件進(jìn)行處理)。
對(duì)這個(gè)基本過(guò)程抽象出來(lái)一個(gè)中斷系統(tǒng)模型如圖所示:
在上圖中只是一個(gè)中斷信號(hào),那么當(dāng)這個(gè)系統(tǒng)中存在很多中斷信號(hào)時(shí),群龍無(wú)首,整個(gè)系統(tǒng)就會(huì)亂套,CPU會(huì)像一只無(wú)頭蒼蠅一樣到處去執(zhí)行中斷服務(wù)程序,結(jié)果可想而知,最后CPU肯定什么也干不了~
為了解決這個(gè)問(wèn)題,需要派一個(gè)領(lǐng)導(dǎo)去管理這些各種各樣的中斷,這個(gè)管理者就是 —— 中斷管理單元!所以,它只有一個(gè)功能 —— 管理這些中斷信號(hào)!比如使能與失能 —— 讓哪個(gè)中斷信號(hào)通過(guò)或者讓哪些信號(hào)不通過(guò);“優(yōu)先級(jí)” —— 誰(shuí)先通過(guò)誰(shuí)后通過(guò),改進(jìn)模型如下圖:
這樣一來(lái),CPU永遠(yuǎn)只能接收到一個(gè)中斷信號(hào),所以CPU可以很舒服的去做他該做的事情了~
總結(jié)一下中斷的編程思路:
配置外設(shè)可以產(chǎn)生中斷信號(hào)
配置中斷管理單元,使能信號(hào)通過(guò),( 配置信號(hào)優(yōu)先級(jí) )
配置中斷服務(wù)程序 ,確保CPU接收到中斷信號(hào)可以及時(shí)處理
接下來(lái)依托這個(gè)抽象的中斷模型玩一玩Zynq的中斷,具體化這個(gè)模型~
1.實(shí)驗(yàn)?zāi)康?br /> 探索Zynq中PL->PS的中斷,按下按鍵產(chǎn)生一個(gè)中斷,這個(gè)中斷被通用中斷管理單元所處理,然后傳遞給Zynq PS,將變量值遞增然后將值顯示在led上。
2.實(shí)驗(yàn)步驟
2.1.新建基于Pynq-Z2的工程
2.2.創(chuàng)建硬件塊設(shè)計(jì)
2.2.1.添加所用ip并自動(dòng)連線
添加兩個(gè)AXI_GPIOip核,一個(gè)連接板載4個(gè)按鈕,一個(gè)連接板載4個(gè)led
2.2.2.配置AXI_GPIO使能中斷
這里因?yàn)?個(gè)按鍵是連接在axi_gpio_0上的,所以雙擊axi_gpio_0 ip核進(jìn)行配置,如圖,選擇使能中斷:
可以看到與未配置中斷的axi_gpio_1有區(qū)別:
2.2.2.配置Zynq PS系統(tǒng)接收中斷請(qǐng)求
在配置之前需要對(duì)Zynq中的中斷信號(hào)有個(gè)大致的了解,其中PS和PL之間的中斷信號(hào)如表所示:
根據(jù)上圖,雙擊zynq ip核進(jìn)行配置,因?yàn)檫@里需要接收的按鍵中斷是從PL端到PS端的,首先選中Fabric Interrupts中斷組織,然后選中IRQ_F2P[15:0],使能16-bit的PL->PS共享中斷端口,以便于來(lái)自PL端的中斷可以連接到PS的中斷控制器上:
2.2.3.連接AXI_GPIO的中斷請(qǐng)求和PS的中斷端口
手動(dòng)進(jìn)行連線:
2.3.驗(yàn)證設(shè)計(jì),創(chuàng)建HDL文件,生成Bitstream,導(dǎo)出硬件設(shè)計(jì)文件
至此,中斷信號(hào)的硬件數(shù)據(jù)通路構(gòu)建完成,接下來(lái)是軟件中配置中斷管理單元和中斷服務(wù)程序。
2.4.過(guò)渡到SDK上的軟件設(shè)計(jì)
2.4.1.Launch SDK
2.4.2.新建一個(gè)空的應(yīng)用工程
2.4.3.導(dǎo)入已有C文件
因?yàn)樵趯?shí)際項(xiàng)目中需要分工協(xié)作,所以這里選擇導(dǎo)入隨書附帶的C文件:
2.4.4.配置運(yùn)行設(shè)置,板級(jí)驗(yàn)證
運(yùn)行即可觀察到現(xiàn)象。
2.添加定時(shí)器中斷
2.1.實(shí)驗(yàn)?zāi)康?br />
在已有一個(gè)按鍵中斷的基礎(chǔ)上,添加一個(gè)定時(shí)器中斷,掌握添加多個(gè)中斷到PS的方法。
2.2.實(shí)驗(yàn)步驟
2.2.1.添加AXI Timer IP核并自動(dòng)連線
添加時(shí)搜索"timer",選擇AXI Timer添加,然后點(diǎn)擊自動(dòng)連線,結(jié)果如圖:
2.2.2.連接AXI Timer的中斷到PS端
因?yàn)镻S端的共享中斷接口已經(jīng)連接了一個(gè)AXI GPIO中斷,所以如果要繼續(xù)連接一個(gè)中斷信號(hào),要通過(guò)一個(gè)另外的ip核 —— Concat,在添加ip核時(shí)搜索添加,如圖所示,將之前AXI GPIO 到ps的中斷斷開,然后將concat的dout信號(hào)連至PS端的IRQ_F2P[0:0],然后將AXI GPIO的中斷信號(hào)連接至In0,將定時(shí)器的中斷信號(hào)連接至In1,這樣就完成了多個(gè)中斷信號(hào)的共享。
生成Bitstream,導(dǎo)出硬件文件
編輯:hfy
-
嵌入式系統(tǒng)
+關(guān)注
關(guān)注
41文章
3531瀏覽量
128980 -
cpu
+關(guān)注
關(guān)注
68文章
10769瀏覽量
210426 -
Zynq
+關(guān)注
關(guān)注
9文章
604瀏覽量
47072
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論