moerjielovecookie

Sawen_Blog

一个普通工科牲的博客网站
x
github
follow
email

ZYNQ中的GPIO

GPIO 原理#

GPIO 透過 MIO 提供 54 路介面,其中 16 路位於 bank 500,剩餘位於 bank 501。還透過 EMIO 介面提供從 PL 來的 64 路輸入和 128 路輸出。GPIO 控制和狀態寄存器內存映射在基址 $0xE000_A000$。
500
ZYNQ 的 GPIO 引腳分為 4 個 bank,共有 118 個 GPIO。

118GPIO=32MIObank0+22MIObank1+32EMIObank2+32EMIObank3118個GPIO=32個MIO(bank0)+22個MIO(bank1)+32個EMIO(bank2)+32個EMIO(bank3)

GPIO 內部結構#

|450
從圖中可以看到 GPIO 有三個功能:輸入、輸出、中斷。
其中 MIO 7 和 9 只能做輸出。
一組寄存器只能控制一個 GPIO bank 的所有引腳。

器件引腳的 GPIO 控制#

輸入 / 輸出寄存器#

寄存器名稱说明
DATA_ROGPIO 引腳的值存儲在此寄存器中,無論 GPIO 被配置為輸入或輸出,都可以通過讀此寄存器得到 GPIO 引腳的值。
因為是只讀寄存器(對軟體來說),軟體向此寄存器的寫入操作將被忽略。
DATA輸出數據寄存器,當 GPIO 被配置為輸出才起作用,此寄存器中的值就是輸出到引腳的值。
向此寄存器寫入就是在設置 GPIO 的輸出值,
讀此寄存器將返回 GPIO 前一時刻的輸出值,而不是現在的值。
MASK_DATA_LSWMask Data Least Significant Words,輸出數據低 16 位掩碼寄存器,此寄存器只有低 16 位有效,
對應位為 1 表示 DATA 寄存器低 16 位中對應位的值可以更改,
若不為 1,則表示 DATA 寄存器低 16 位中對應位保持原值
MASK_DATA_MSWMask Data Most Significant Words,輸出數據高 16 位掩碼寄存器,
功能同 MASK_DATA_LSW,只是它對應 DATA 寄存器高 16 位
DIRMDirection Memory,方向寄存器,默認為 0 表示輸入,設為 1 表示輸出
注意,即使 DIRM 為 1,軟體也可以像輸入一樣去讀此引腳的電平
OENOutput Enable,輸出使能寄存器,
僅當 DIRM 為 0 時有效,為 1 表示輸出使能,
為 0 表示輸出不使能,此時對應引腳上的值為三態值

中斷控制寄存器#

寄存器名稱说明
INT_TYPEInterrupt Type 中斷類型寄存器,
控制 GPIO 中斷是電平觸發還是邊緣觸發
INT_POLARITYInterrupt Polarity 中斷極性寄存器
控制 GPIO 中斷是低電平 / 下降沿有效,還是高電平 / 上升沿有效
INT_ANYInterrupt Any,雙邊沿寄存器,
僅當 INT_TYPE 為邊沿觸發時,此寄存器才有效,控制是否雙沿均可觸發中斷
INT_STATInterrupt State,中斷狀態寄存器,
此寄存器的值會被與之相連的 INT State D 觸發器讀取
D 觸發器存儲中斷狀態,軟體通過讀此 D 觸發器輸出來判斷中斷是否發生,
清除此 D 觸發器來清除中斷狀態
INT_MASKInterrupt Mask,中斷掩碼寄存器,
顯示當前哪些位被屏蔽,哪些位啟用
INT_DISInterrupt Disable,中斷失效寄存器,
向該寄存器的任何位寫入 1 都會屏蔽該中斷信號。
從該寄存器讀取會返回不可預測的值
INT_ENInterrupt Enable,中斷使能寄存器
向該寄存器的任何位寫入 1,可以啟用 / 解除中斷信號的掩碼。
從該寄存器讀取將返回一個不不可預測的值

GPIO 的中斷號為 ==52==,中斷優先級是固定的,無需配置 GPIO 的中斷優先級。GPIO 所有引腳共享同一個中斷,即使能兩個引腳的中斷的話,軟體無法判斷中斷來自哪個引腳。

EMIO 和 MIO#

MIO EMIO|500
MIO,Multiuse I/O,複用輸入 / 輸出,對應 PS 端的可配置的多功能引腳。
EMIO,Extent MIO,對應 PL 端的可配置多功能引腳。
MIO 是外設的基本引腳,由於 MIO 的引腳數量較少,ZYNQ 也提供 EMIO 介面作為 MIO 的擴展,外設通過 EMIO 介面連接到 PL 端的引腳,來實現和 MIO 幾乎相同的功能。
MIO 和 EMIO 的不同點如下:

  1. MIO 對於 PL 端是透明的,PL 無法讀取 MIO 引腳上的電平;PS 端可以通過 EMIO 與 PL 端通信。
  2. 外設與 MIO 是固定搭配的,初始化時要根據開發板原理圖來選擇引腳約束。EMIO 相對靈活,引腳可以任意指定,通過 xdc 文件約束指定到 PL 端的某個引腳。
  3. 因為 MIO 引腳更靠近外圍電路,相較於 EMIO,一些外設使用 MIO 的性能更好,還有一些外設只能使用 MIO。
    |450

MIO bank 和封裝的 bank 的區別與聯繫#

MIO 分為 Bank 0 和 Bank 1,Bank 0 是封裝 Bank 500 中的部分引腳,Bank 1 是封裝的 bank 501 的部分引腳。
Bank 0 包含 MIO 0~15 共 16 個 MIO,bank 1 包括 MIO 16~53 共 38 個 MIO,總共有 54 個 MIO。EMIO 一共有 64 個。
|550

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。