国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

zynq中三種實現GPIO的方式

FPGA學習交流 ? 2018-08-07 10:16 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

MIO和EMIO方式是使用PS部分的GPIO模塊來實現GPIO功能的,支持54個MIO(可輸出三態)、64個輸入和128個輸出(64個輸出和64個輸出使能)EMIO

而IP方式是在PL部分實現 GPIO功能,PS部分通過M_AXI_GP接口來控制該GPIO IP模塊;另外EMIO模塊雖然使用PS部分GPIO但也使用了PL部分的管腳資源。

MIO方式實現GPIO
vivado中zynq設置如下圖
113328zpphwrh3spmt0rdt.png



由圖中可見要選中打開GPIO,其下自動顯示可用于GPIO的MIO(當MIO作為其他功能時就不能作為GPIO使用了),其中MIO 7、MIO 8只能作為輸出使用,因為它們用于VMODE管腳

軟件部分如下
#include
#include "platform.h"
#include "xgpiops.h"

#define LED1 0
#define LED2 9

static void delay(int dly)
{
int i, j;
for (i = 0; i < dly; i++) {
for (j = 0; j < 0xffff; j++) {
;
}
}
}

int main()
{
int Status;
XGpioPs_Config *ConfigPtr;
XGpioPs Gpio;

init_platform();

ConfigPtr = XGpioPs_LookupConfig(XPAR_PS7_GPIO_0_DEVICE_ID);
Status = XGpioPs_CfgInitialize(&Gpio, ConfigPtr,
ConfigPtr->BaseAddr);
if (Status != XST_SUCCESS){
return XST_FAILURE;
}

XGpioPs_SetDirectionPin(&Gpio, LED1, 1);
XGpioPs_SetDirectionPin(&Gpio, LED2, 1);
XGpioPs_SetOutputEnablePin(&Gpio, LED1, 1);
XGpioPs_SetOutputEnablePin(&Gpio, LED2, 1);

while (1) {
XGpioPs_WritePin(&Gpio, LED1, 0);
XGpioPs_WritePin(&Gpio, LED2, 1);
delay(1000);
XGpioPs_WritePin(&Gpio, LED1, 1);
XGpioPs_WritePin(&Gpio, LED2, 0);
delay(1000);
}
cleanup_platform();
}


EMIO方式實現GPIO
vivado中zynq設置如下圖
113329qq6qz904j5hv54w5.png



圖中可知GPIO中選擇使用EMIO,并選擇位寬(這里例子中選擇3);其vivado中連接如下圖



上圖可知除了FIXED IO和DDR接口外,還多了3個3對(一個輸入,一個輸出和一個輸出使能)GPIO管腳。

不同于MIO,這里三個IO管腳(一個輸入,一個輸出和一個輸出使能在自動生成的頂層模塊中合并為一個IO)要綁定到芯片對應管腳上

軟件部分如下
#include
#include "platform.h"
#include "xgpiops.h"

#define LED_R 54
#define LED_G 55
#define LED_B 56
#define LED_ON 0
#define LED_OFF 1

static void delay(int dly)
{
int i, j;
for (i = 0; i < dly; i++) {
for (j = 0; j < 0xffff; j++) {
;
}
}
}

int main()
{
int Status;
XGpioPs_Config *ConfigPtr;
XGpioPs Gpio;

init_platform();

ConfigPtr = XGpioPs_LookupConfig(XPAR_PS7_GPIO_0_DEVICE_ID);
Status = XGpioPs_CfgInitialize(&Gpio, ConfigPtr,
ConfigPtr->BaseAddr);
if (Status != XST_SUCCESS) {
print("cfg init err\n");
return XST_FAILURE;
}
XGpioPs_SetDirectionPin(&Gpio, LED_R, 1);
XGpioPs_SetOutputEnablePin(&Gpio, LED_R, 1);
XGpioPs_SetDirectionPin(&Gpio, LED_G, 1);
XGpioPs_SetOutputEnablePin(&Gpio, LED_G, 1);
XGpioPs_SetDirectionPin(&Gpio, LED_B, 1);
XGpioPs_SetOutputEnablePin(&Gpio, LED_B, 1);

while (1) {
XGpioPs_WritePin(&Gpio, LED_R, LED_ON);
delay(1000);
XGpioPs_WritePin(&Gpio, LED_G, LED_ON);
delay(1000);
XGpioPs_WritePin(&Gpio, LED_B, LED_ON);
delay(1000);
XGpioPs_WritePin(&Gpio, LED_R, LED_OFF);
delay(1000);
XGpioPs_WritePin(&Gpio, LED_G, LED_OFF);
delay(1000);
XGpioPs_WritePin(&Gpio, LED_B, LED_OFF);
delay(1000);
}
cleanup_platform();
}

類似MIO方式(都為PS部分GPIO操作),設置為輸出并設置輸出使能,但要注意這里的GPIO號是從54開始的3個。

IP方式實現GPIO
vivado中zynq設置如下圖
113329xl44rer7g49f2apg.png



圖中可知GPIO中MIO和EMIO都不選擇,但要打開M_AXI_GP接口(這里選擇M_AXI_GP0)和復位管腳,如下圖
113330hbyhktpyaayy6kvv.png



當然用到了PL部分邏輯則至少需要一個時鐘輸出到PL部分,這里選擇FCLK_CLK0輸出50MHz,如下圖


推薦加入zynq后,不要自動連接,再加入gpio并位寬設置為3,具體設置如下圖



GPIO設置好后,再點擊上面的藍色字體的自動連接,即可得到上面的連接,這樣可以減少手動連接量。

最后vivado中連接如下圖


與EMIO類似需要將頂層三個GPIO管腳要綁定到芯片對應管腳上。

軟件部分如下
#include
#include "platform.h"
#include "xgpio.h"

#define AXI_GPIO_DEVICE_ID XPAR_GPIO_0_DEVICE_ID
#define XGPIO_BANK1 1
#define XGPIO_BANK2 2

#define LED34_R_PIN 0x01
#define LED34_G_PIN 0x02
#define LED34_B_PIN 0x04

static void delay(int dly)
{
int i, j;
for (i = 0; i < dly; i++) {
for (j = 0; j < 0xffff; j++) {
;
}
}
}

int main()
{
XGpio_Config *XGpioCfg;
XGpio XGpio;
int Status;

init_platform();

XGpioCfg = XGpio_LookupConfig(AXI_GPIO_DEVICE_ID);
Status = XGpio_CfgInitialize(&XGpio, XGpioCfg, XGpioCfg->BaseAddress);
if (Status != XST_SUCCESS) {
return XST_FAILURE;
}

XGpio_SetDataDirection(&XGpio, XGPIO_BANK1, ~(LED34_R_PIN | LED34_G_PIN | LED34_B_PIN));
XGpio_DiscreteWrite(&XGpio, XGPIO_BANK1, LED34_R_PIN | LED34_G_PIN | LED34_B_PIN);
while (1) {
XGpio_DiscreteWrite(&XGpio, XGPIO_BANK1, ~LED34_R_PIN);
delay(1000);
XGpio_DiscreteWrite(&XGpio, XGPIO_BANK1, ~(LED34_R_PIN | LED34_G_PIN));
delay(1000);
XGpio_DiscreteWrite(&XGpio, XGPIO_BANK1, ~(LED34_R_PIN | LED34_G_PIN | LED34_B_PIN));
delay(1000);
XGpio_DiscreteWrite(&XGpio, XGPIO_BANK1, ~(LED34_G_PIN | LED34_B_PIN));
delay(1000);
XGpio_DiscreteWrite(&XGpio, XGPIO_BANK1, ~(LED34_B_PIN));
delay(1000);
XGpio_DiscreteWrite(&XGpio, XGPIO_BANK1, LED34_R_PIN | LED34_G_PIN | LED34_B_PIN);
delay(1000);
}
cleanup_platform();
return 0;
}

這里實現的功能與EMIO方式中功能相同,當時IP方式中為PL部分實現的GPIO,所以調用的函數與前面兩種GPIO實現函數不同,注意包含的GPIO頭文件,前兩種是#include "xgpiops.h"而這最后一種為#include "xgpio.h"

總結
MIO和EMIO方式使用PS部分的GPIO模塊,其中MIO方式不占用PL部分資源,其輸出管腳只能為固定的54個(而且要在未被其它外設使用的情況下),EMIO方式會占用PL的管腳資源,其管腳可在PL部分任意選擇(除特殊功能管腳),IP方式除了占用PL部分管腳資源外還會占用PL部分邏輯資源,所以其GPIO功能在PL部分實現其調用函數也和前兩種不同,最后EMIO和IP方式在vivado都需要綁定管腳。


聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    AI技術時代三種全新工作模式如何實現

    AI技術正在重塑我們的工作。前沿企業以“人類主導、智能體運營”為核心,形成三種AI技術的融合模式:人類+AI技術助手、人機混合、人類主導智能體運營,這些模式不僅提升效率,更在重構協作方式,幫助組織以更低的阻力邁向成功。
    的頭像 發表于 01-29 15:08 ?481次閱讀

    C語言中實現函數宏的三種方式

    在宏的第一個分號后便結束。即 a = b 和 b = tmp 均不受控制語句所作用。 因此,在工程中,一般使用三種方式來對函數宏進行封裝,分別為 {}、do{...}while(0
    發表于 12-29 07:34

    請問CW32芯片的三種工作模式是什么?

    CW32芯片的三種工作模式是什么?
    發表于 12-26 06:48

    伺服電機的三種制動方式有什么區別?

    伺服電機作為自動化控制系統中執行元件的核心部件,其制動性能直接影響設備的定位精度和安全可靠性。目前主流的伺服電機制動方式包括動態制動、再生制動和電磁機械制動三種,它們在制動原理、應用場景及技術特點上
    的頭像 發表于 09-19 18:26 ?1730次閱讀
    伺服電機的<b class='flag-5'>三種</b>制動<b class='flag-5'>方式</b>有什么區別?

    三種SPWM波形生成算法的分析與實現

    摘要:變頻技術作為現代電力電子的核心技術,集現代電子、信息和智能技術于一體。而SPW(正弦波脈寬調制)波的產生和控制則是變頻技術的核心之一。本文對SPI波形生成的三種算法-對稱規則采樣法、不對稱規則
    發表于 07-31 13:34

    MEMS中的三種測溫方式

    在集成MEMS芯片的環境溫度測量領域,熱阻、熱電堆和PN結原理是三種主流技術。熱阻是利用熱敏電阻,如金屬鉑或注入硅的溫度電阻系數恒定,即電阻隨溫度線性變化的特性測溫,電阻變化直接對應絕對溫度,需恒流源供電。
    的頭像 發表于 07-16 13:58 ?1655次閱讀
    MEMS中的<b class='flag-5'>三種</b>測溫<b class='flag-5'>方式</b>

    1553B總線常見三種組網方式

    1553B總線作為航空電子系統中的關鍵通信協議,其組網方式直接影響系統的可靠性和實時性。本文將深入解析1553B總線的三種典型組網結構:單總線結構、雙冗余總線和多總線分層架構,并結合實際應用場景分析
    的頭像 發表于 06-21 17:39 ?1916次閱讀
    1553B總線常見<b class='flag-5'>三種</b>組網<b class='flag-5'>方式</b>

    開關電源三種控制模式:PWM/PFM/PSM

    摘要 本文詳細介紹了開關電源的三種主要調制方式:PWM(脈沖寬度調制)、PFM(脈沖頻率調制)和PSM(脈沖跨周期調制)。PWM通過調整脈沖寬度保持恒定頻率,適用于重負載,但輕負載效率低。PFM則在
    發表于 06-09 16:11

    介紹三種常見的MySQL高可用方案

    在生產環境中,為了確保數據庫系統的連續可用性、降低故障恢復時間以及實現業務的無縫切換,高可用(High Availability, HA)方案至關重要。本文將詳細介紹三種常見的 MySQL 高可用
    的頭像 發表于 05-28 17:16 ?1235次閱讀

    信號隔離器三種供電方式的區別

    信號隔離器是一重要的信號隔離裝置,其供電方式主要有獨立供電、回路供電和輸出回路供電三種。以下是這三種供電方式的詳細區別: 一、獨立供電 1
    的頭像 發表于 04-17 16:23 ?1536次閱讀
    信號隔離器<b class='flag-5'>三種</b>供電<b class='flag-5'>方式</b>的區別

    雙極型極管放大電路的三種基本組態的學習課件免費下載

      本文檔的主要內容詳細介紹的是雙極型極管放大電路的三種基本組態的學習課件免費下載包括了:共集電極放大電路,共基極放大電路,三種基本組態的比較   輸入信號ui 和輸出信號uo 的公共端是集電極。
    發表于 04-11 16:39 ?37次下載

    redis三種集群方案詳解

    在Redis中提供的集群方案總共有三種(一般一個redis節點不超過10G內存)。
    的頭像 發表于 03-31 10:46 ?1528次閱讀
    redis<b class='flag-5'>三種</b>集群方案詳解

    CMOS,Bipolar,FET這三種工藝的優缺點是什么?

    在我用photodiode工具選型I/V放大電路的時候,系統給我推薦了AD8655用于I/V,此芯片為CMOS工藝 但是查閱資料很多都是用FET工藝的芯片,所以請教下用于光電信號放大轉換(主要考慮信噪比和帶寬)一般我們用哪種工藝的芯片, CMOS,Bipolar,FET這三種工藝的優缺點是什么?
    發表于 03-25 06:23

    GaN、超級SI、SiC這三種MOS器件的用途區別

    如果想要說明白GaN、超級SI、SiC這三種MOS器件的用途區別,首先要做的是搞清楚這三種功率器件的特性,然后再根據材料特性分析具體應用。
    的頭像 發表于 03-14 18:05 ?2688次閱讀

    FOC中的三種電流采樣方式,你真的會選擇嗎?(可下載)

    的基礎,用一句話來形容就是“基礎不對,努力白費”,由此可見電流采樣在整 個 FOC 算法中的作用電流采樣的方式一般分為電阻、雙電阻、單電阻,這三種采樣方式都有其
    發表于 03-12 15:04 ?4次下載