AXI GPIO(AXI General-Purpose Input/Output)設計提供了一個通用的輸入/輸出接口,該接口連接到一個AXI4-Lite接口。AXI GPIO可以被配置為單通道或雙通道設備,每個通道的位寬可以獨立配置。
端口(即GPIO引腳)可以通過啟用或禁用三態緩沖器來動態配置為輸入或輸出。這些通道還可以配置為當它們的任何一個輸入發生轉變時生成中斷。
1? 功能
AXI GPIO IP核的頂層框圖(如下圖所示)通常包含幾個關鍵模塊,這些模塊協同工作以實現其通用輸入/輸出功能。
以下是根據通常的AXI GPIO設計對頂層框圖的簡要描述:
AXI4-Lite接口
AXI4-Lite是AXI協議的一個子集,特別適用于需要簡單、輕量級通信的場景。在這個設計中,AXI4-Lite接口模塊作為一個從設備(slave)實現,提供32位的數據通道,允許主設備(如處理器或控制器)通過AXI4-Lite協議訪問GPIO通道寄存器。這些寄存器用于控制GPIO通道的配置、輸入/輸出狀態等。
中斷控制
負責從GPIO通道獲取中斷狀態,并在滿足條件時向主機生成中斷信號。當中斷使能選項在Vivado集成設計環境(IDE)中設置時,中斷控制模塊將被啟用。這樣,當GPIO通道的輸入發生變化時,中斷控制模塊可以檢測到這種變化,并生成一個中斷信號通知主機。主機可以響應這個中斷信號,執行相應的中斷處理程序。
GPIO 核
GPIO核包含用于讀寫AXI GPIO通道寄存器的寄存器和多路復用器。這些寄存器用于存儲GPIO通道的配置信息、輸入/輸出狀態等。多路復用器用于在讀取或寫入操作時選擇正確的寄存器。此外,GPIO核還包括必要的邏輯來識別當通道輸入發生變化時的中斷事件。
上圖中的三態緩沖器(3-state buffers)并不是GPIO核的一部分。這些三態緩沖器是在使用Vivado設計套件生成輸出產品時自動添加到頂層設計包裝文件中的。它們用于控制GPIO引腳的輸入/輸出狀態,并提供與外部電路的接口。
2 配置
(1)打開一個工程或生成一個新的工程;
(2)如下圖所示,找到AXI GPIO IP核;
(3)?雙擊IP,或從工具欄或右鍵菜單中選擇“Customize IP”命令,打開該IP核的配置頁。
GPIO
All Inputs
- 功能:將所有GPIO通道位設置為輸入模式。當選中此選項時,所有相關的GPIO引腳都將被配置為接收外部信號,而不是發送信號。
- 默認狀態:此選項是未選中的(unchecked),意味著GPIO通道位不會默認被配置為輸入模式。
All Outputs
- 功能:將所有GPIO通道位設置為輸出模式。當選中此選項時,所有相關的GPIO引腳都將被配置為發送信號到外部設備,而不是接收信號。
- 默認狀態:此選項是未選中的(unchecked),意味著GPIO通道位不會默認被配置為輸出模式。
GPIO Width
- 功能:定義了GPIO通道的位寬,決定了GPIO IP核可以管理的GPIO引腳數量。例如,如果GPIO Width設置為8,那么GPIO IP核就可以控制8個GPIO引腳。
- 默認狀態:其值可以從1到32,默認值是32。
Default Output Value
- 功能:設置此通道所有啟用位的默認值。當GPIO引腳被配置為輸出模式時,這個值決定了它們在上電或復位后的初始狀態。例如,如果Default Output Value設置為0xFF(8位模式),那么所有GPIO引腳在上電后都將輸出高電平。
- 默認狀態:此參數設置為0x0(即所有位都是0)。
Default Tri State Value
- 功能:配置了GPIO通道每個位的輸入或輸出模式。這里的“Tri State”可能指的是GPIO引腳的初始狀態或默認模式,其中“0”代表輸出模式,“1”代表輸入模式。但具體實現可能因不同的IP核而異。
- 默認狀態:這個字段的值為0xFFFFFFFF,將所有GPIO位配置為輸入模式。
Enable Dual Channel
- 功能:啟用第二個GPIO通道(GPIO2),當此參數被啟用時,GPIO2選項被激活,并配置Channel-2 (GPIO2)寄存器。允許使用同一個AXI GPIO IP核來控制兩個獨立的GPIO通道。這在需要管理大量GPIO引腳時特別有用。
- 默認狀態:此參數是未選中的,將AXI GPIO配置為單通道模式。
GPIO2
僅在“Enable Dual Channel”被選中時激活。此參數組中的所有字段都與GPIO選項組相似。
當啟用雙通道模式時,可以為第二個GPIO通道(GPIO2)配置與第一個通道相同的參數,如GPIO Width、Default Output Value等。
Enable Interrupt
啟用了GPIO模塊中的中斷控制邏輯和中斷寄存器。默認情況下,此選項是未選中的,即中斷未被啟用。
當希望GPIO引腳能夠產生中斷信號以通知處理器或控制器外部事件時,需要啟用此選項。一旦啟用,可以配置GPIO引腳在特定條件下產生中斷,例如輸入電平變化或超時等。
3 編程序列
當啟用中斷時的輸入端口
(1)配置端口為輸入
? ? ? ? ?將GPIOx_TRI寄存器中對應的位寫入1,以將端口配置為輸入模式。
(2)啟用通道中斷
? ? ? ? 通過設置IP中斷使能寄存器中對應的位來啟用該通道的中斷,同時,也需要通過設置全局中斷寄存器(通常是某個處理器或微控制器的寄存器)的第31位為1來啟用全局中斷。
(3)接收并處理中斷
? ? ? ?① 當接收到中斷時,讀取GPIOx_DATA寄存器中對應的位,以獲取輸入值。
? ? ? ②清除IP中斷狀態寄存器中對應的中斷狀態位,通過將對應位寫入1來實現。這通常是中斷服務程序(ISR)的一部分。
當未啟用中斷時的輸入端口
(1)配置端口為輸入
? ? ? ?將GPIOx_TRI寄存器中對應的位寫入1,以將端口配置為輸入模式。
(2)讀取輸入值
? ? ? ?直接讀取GPIOx_DATA寄存器中對應的位,以獲取輸入值。
輸出端口
(1)配置端口為輸出
? ? ? ?將GPIOx_TRI寄存器中對應的位寫入0,以將端口配置為輸出模式。
(2)寫入輸出值
? ? ? ?將要輸出的值寫入GPIOx_DATA寄存器中對應的位。這會將該值輸出到對應的GPIO引腳上。
注意事項
- 確保在嘗試訪問GPIOx_TRI或GPIOx_DATA寄存器之前,AXI GPIO IP核已經正確配置并初始化。
- 當配置GPIO端口時,請確保不要同時將其配置為輸入和輸出,這可能會導致未定義的行為。
- 當啟用中斷時,請確保系統(例如處理器或微控制器)可以正確地處理這些中斷,并有一個有效的中斷服務程序來清除中斷狀態位并處理中斷事件。