AXI-GPIO 按鍵 LED


官方文檔,PG144

可以學如何從block design   IP  ?中看PG144文檔。

 

 

邏輯IP,即在ZYNQ FPGA里面能實現的IP。AXI GPIO,提供了通用的輸入輸出接口到AXI接口。它是一個軟核的IP,被設計來連接AXI4-LITE接口。

 

PROCESS SYSTEM(PS) 的 I/O PERIPHERALS  (外設) 的 GPIO接口 是硬核

而 (IP) AXI-GPIO是一個軟核的GPIO

硬核:芯片里面有這樣的電路

軟核:芯片里邊實際上是沒有這樣的電路,是通過FPGA的邏輯去搭出來的,這樣實現具有一定功能的電路成為軟核

 

 

 

 

軟核GPIO與PS部分有接口,為AXI接口

 

 

 

 

 

 

 

 

本次用一下GP接口

通過調用AXI-GPIO核,使用中斷機制,實現底板上PL端按鍵控制核心板上PS端LED;

 

 

 

 

 

存儲器映射:讀操作寫操作,執行操作的同時都給一個對應的地址。存儲器每一個存儲空間都有一個地址。

 

 

 

 

 

 

 

 

通過使能或關閉使能 三態緩沖器來對輸入,輸出進行動態配置(3-state buffer可以決定I/O是作為輸出還是作為輸入)。

每一個通道可以通過配置來產生中斷,如果AXI GPIO IP核的輸入引腳的電平狀態發生改變,就可以產生一個中斷信號,不管是從高電平變成低電平,還是低電平變成高電平(0到1,或者1到0 稱為一個轉換)

 

 

 

 

GPIO_T:當GPIO要控制LED時,為輸出,其為0.當GPIO要控制KEY時,為輸入,其為1.

 

 

 當引腳的信號發生改變,就會產生中斷(如果有勾選使用的話)

 

 

 

 復位:低電平有效

s_axi_*:  *表示一組信號

中斷:高電平有效,電平敏感類型信號

 

 

 

 

  GIER全局中斷(總開關),IP_IER(子開關),都打開才能進行中斷。中斷狀態寄存器,可以讀取中斷,也可以清除中斷

 

 

 

 

 

 

使用中斷的話,對於輸入部分

 1.賦值為1設為輸入

2.打開中斷

3.讀取數據,然后清除中斷狀態寄存器,才能方便下次去檢測中斷的產生。

 

 不使用中斷的話,對於輸入部分

1.設為輸入

2.直接讀取數據

 

 

 對於輸出

1.設為輸出

2.王寄存器里寫數據

 

 

 

 

 

 

 DEFAULT OUTPUT VALUE:作為輸出時的值

DEFAULT TRI STATE VALUE :可看到默認的時候是全部設置為輸入了

 

在輸入模式下可以使用中斷

 

 

 

PS7_0_AXI_PERIPH不需要添加,會自動幫我們添加 。管理並指揮所連接的AXI接口之間的通信,可以實現一對多,多對1,多對多的AXI接口連接。

本次之中只有一個AXI IP,比較簡單。如果有多個,就需要 PS7_0_AXI_PERIPH 來指揮連接,幫助我們主器件跟多個IP進行仲裁,管理。

 

 

 

 

 

 

 

 

 

從PL到PS的中斷

 

 

 

完成頂層文件自動幫我們添加3態緩沖器。

 

 

 

 

這是我們在PL里面使用FPGA資源所實現的軟核GPIO

 

 可以點開DOCUMENT在官方看一系列例子

 

 

 

有PS說明是PS端的GPIO

 

這個才是AXI GPIO所需要的頭文件

 

 

 

 每個外設都有自己的終端號,AXI GPIO的中斷是來自PL的中斷,是PL到PS的中斷

 

 

 包含了PS到PL的中斷,也包含PL到PS的中斷

 

 

 

 

 

 

 

 從PL到PS的共有16位中斷,本次只用了1個,即中斷號61   IRQ_F2P  F:FPGA  P:PS

 

 

 

 

 

 

 

 

 

 直接調用頭文件里的初始化函數,指針類型所以&。也可以核PS GPIO一樣分別調用

 

 

 

 打開AXI_GPIO IP的中斷之后搬到后面去了

 使用最高位為輸入的話是 0X8000_0000; 用的最低位 所以0X0000_0001  1表示輸入

打開通道的中斷使能信號,2部分:包括通道中斷使能信號,全局中斷使能信號

打開通道中信號對應的使能信號  MASK=0000_0001  1表示打開

 

 

 

 此處需要 &AXI_GPIO,為什么結合下面的想吧。

 

 

 

設置中斷的優先級核觸發類型給指定的中斷源

 

打開AXI_GPIO IP的中斷使能 在之前需要加 &,此處不用。因為此處參數是通過函數傳遞進來的,傳遞進來的時候就已經是一個指針類型的變量,相當於一個子函數的變量。二下面圖中不需要&是因為這邊是一個全局變量,含義不一樣了

 

 

 

 

 

 按一下打印兩次中斷信息,led松開就滅

因為按下的時候電平由高變低,松開由低變高,有兩次變化的情況。所以檢測到兩次中斷

 

 

 

 當檢測到中斷的時候,需要把對應的數據讀出來,從而判斷與AXI GPIO相連的信號的電平狀態。

在代碼中我們並沒有去讀這個數據

 

 

 

進行修改。按鍵按下,這個值為0

 

 

 

 

 

 

 再進行修改

第一次LED賦值為0之后,並沒有把這個0寫到PS 端的 GPIO上,所以導致第一次按下按鍵的時候它的值沒有改變。為了解決這個問題,先把LED的值先寫到 PS GPIO里。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM