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

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

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

3天內不再提示

Xilinx ZYNQ開發(fā)GPIO的三種方式:MIO、EMIO、AXI_GPIO

電子設計 ? 來源:CSDN 博主 ? 作者:ChuanjieZhu ? 2020-12-26 10:12 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

前言:

ZYNQ 7000有三種GPIO:MIO,EMIO,AXI_GPIO

MIO是固定管腳的,屬于PS,使用時不消耗PL資源;EMIO通過PL擴展,使用時需要分配管腳,使用時消耗PL管腳資源;AXI_GPIO是封裝好的IP核,PS通過M_AXI_GPIO接口控制PL部分實現(xiàn)IO,使用時消耗管腳資源和邏輯資源。

使用的板子是zc702。

1.MIO方式

Zynq7000 系列芯片有 54 個 MIO(multiuse I/O), 它們分配在 GPIO 的 Bank0 和Bank1 隸屬于 PS 部分, 這些 IO 與 PS 直接相連。 不需要添加引腳約束, MIO 信號對 PL部分是透明的, 不可見。 所以對 MIO 的操作可以看作是純 PS 的操作。

pIYBAF9uIUGACO_GAAGEXyJbwdY370.png


pIYBAF9uIUKAEmemAACU6kfqXfo510.png

新建Vivado工程,添加ZYNQ CPU核,雙擊,配置好時鐘和內存類型,確認勾選MIO:

o4YBAF9uIUiAPJJOAATlvxBVp0s930.png

如系列(三)文章所述,生成bit stream,然后Launch SDK。

在SDK中新建工程,源文件如下:
#include "xgpiops.h"
#include "sleep.h"
int main()
{
static XGpioPs psGpioInstancePtr;
XGpioPs_Config* GpioConfigPtr;
int iPinNumber= 8; //DS12連接的是MIO8
u32 uPinDirection = 0x1; //1表示輸出, 0表示輸入
int xStatus;
//--MIO的初始化
GpioConfigPtr = XGpioPs_LookupConfig(XPAR_PS7_GPIO_0_DEVICE_ID);
if(GpioConfigPtr == NULL)
return XST_FAILURE;
xStatus = XGpioPs_CfgInitialize(&psGpioInstancePtr,GpioConfigPtr,
GpioConfigPtr->BaseAddr);
if(XST_SUCCESS != xStatus)
print(" PS GPIO INIT FAILED /n/r");
//--MIO的輸入輸出操作
XGpioPs_SetDirectionPin(&psGpioInstancePtr, iPinNumber,uPinDirection);//配置MIO輸出方向
XGpioPs_SetOutputEnablePin(&psGpioInstancePtr, iPinNumber,1);//配置MIO的第8位輸出
while(1)
{
XGpioPs_WritePin(&psGpioInstancePtr, iPinNumber, 1);//點亮MIO的第8位輸出1
usleep(500000); //延時
XGpioPs_WritePin(&psGpioInstancePtr, iPinNumber, 0);//熄滅MIO的第8位輸出0
usleep(500000); //延時
}
/****************************************************************
while(1)
{
XGpioPs_WriteReg(0xE000A000,0x00000000, 0xFF7FFFFF&0xFFFF0080);
usleep(500000); //延時
XGpioPs_WriteReg(0xE000A000,0x00000000, 0xFF7FFFFF&0xFFFF0000);
usleep(500000); //延時
} *
*****************************************************************/
return 0;
}

下載到板子上,DS12就開始閃爍了。

2.EMIO方式

EMIO 分配在 bank2 和 bank3 和 PL部分相連。EMIO 有 64 個引腳可供我們使用 。當 MIO 不夠用時, PS 可以通過驅動 EMIO 控制 PL 部分的引腳 。

Vivado工程里ZYNQ CPU核配置,確保EMIO勾選,這里我設置了位寬為4,后面為其分配了四個管腳:

在Diagram里面將GPIO_0的引腳引出來,生成頂層文件后查看這個引腳的名字,因為我修改了名字,這里叫emio_0_tri_io

管腳約束文件:
#GPIO PMOD1
set_property PACKAGE_PIN E15 [get_ports {emio_0_tri_io[0]}]
set_property IOSTANDARD LVCMOS25 [get_ports {emio_0_tri_io[0]}]
set_property PACKAGE_PIN D15 [get_ports {emio_0_tri_io[1]}]
set_property IOSTANDARD LVCMOS25 [get_ports {emio_0_tri_io[1]}]
set_property PACKAGE_PIN W17 [get_ports {emio_0_tri_io[2]}]
set_property IOSTANDARD LVCMOS25 [get_ports {emio_0_tri_io[2]}]
set_property PACKAGE_PIN W5 [get_ports {emio_0_tri_io[3]}]
set_property IOSTANDARD LVCMOS25 [get_ports {emio_0_tri_io[3]}]

SDK部分:MIO號是0~53,EMIO從54開始

#include "xgpiops.h"
#include "sleep.h"
int main()
{
static XGpioPs psGpioInstancePtr;
XGpioPs_Config* GpioConfigPtr;
int xStatus;
//-- EMIO的初始化
GpioConfigPtr = XGpioPs_LookupConfig(XPAR_PS7_GPIO_0_DEVICE_ID);
if(GpioConfigPtr == NULL)
return XST_FAILURE;
xStatus = XGpioPs_CfgInitialize(&psGpioInstancePtr,GpioConfigPtr,
GpioConfigPtr->BaseAddr);
if(XST_SUCCESS != xStatus)
print(" PS GPIO INIT FAILED /n/r");
//--EMIO的輸入輸出操作
XGpioPs_SetDirectionPin(&psGpioInstancePtr, 54,1);
XGpioPs_SetDirectionPin(&psGpioInstancePtr, 55,1);
XGpioPs_SetDirectionPin(&psGpioInstancePtr, 56,1);
XGpioPs_SetDirectionPin(&psGpioInstancePtr, 57,1);
//使能EMIO輸出
XGpioPs_SetOutputEnablePin(&psGpioInstancePtr, 54,1);
XGpioPs_SetOutputEnablePin(&psGpioInstancePtr, 55,1);
XGpioPs_SetOutputEnablePin(&psGpioInstancePtr, 56,1);
XGpioPs_SetOutputEnablePin(&psGpioInstancePtr, 57,1);
while(1)
{
XGpioPs_WritePin(&psGpioInstancePtr, 54, 1);//EMIO的第0位輸出1
usleep(200000); //延時
XGpioPs_WritePin(&psGpioInstancePtr, 54, 0);//EMIO的第0位輸出0
usleep(200000); //延時
XGpioPs_WritePin(&psGpioInstancePtr, 55, 1);//EMIO的第1位輸出1
usleep(200000); //延時
XGpioPs_WritePin(&psGpioInstancePtr, 55, 0);//EMIO的第1位輸出0
usleep(200000); //延時
XGpioPs_WritePin(&psGpioInstancePtr, 56, 1);//EMIO的第2位輸出1
usleep(200000); //延時
XGpioPs_WritePin(&psGpioInstancePtr, 56, 0);//EMIO的第2位輸出0
usleep(200000); //延時
XGpioPs_WritePin(&psGpioInstancePtr, 57, 1);//EMIO的第3位輸出1
usleep(200000); //延時
XGpioPs_WritePin(&psGpioInstancePtr, 57, 0);//EMIO的第3位輸出0
usleep(200000); //延時
}
return 0;
}

下載到板子里,PMOD1的4個led燈交替閃爍。

3.AXI_GPIO方式

VIvado工程里,ZYNQ CPU核配置:
勾選M_AXI_GPIO 接口:

勾選復位信號:

給PL的時鐘信號:

加入AXI_GPIO IP,這里設置位寬為4,后面將控制4個led燈:

自動連接后如下圖:

pIYBAF9uIWyAfeJ2AATkAQcAoX4630.png

管腳約束如下:
#GPIO PMOD1
set_property PACKAGE_PIN E15 [get_ports {gpio_sw_tri_o[0]}]
set_property IOSTANDARD LVCMOS25 [get_ports {gpio_sw_tri_o[0]}]
set_property PACKAGE_PIN D15 [get_ports {gpio_sw_tri_o[1]}]
set_property IOSTANDARD LVCMOS25 [get_ports {gpio_sw_tri_o[1]}]
set_property PACKAGE_PIN W17 [get_ports {gpio_sw_tri_o[2]}]
set_property IOSTANDARD LVCMOS25 [get_ports {gpio_sw_tri_o[2]}]
set_property PACKAGE_PIN W5 [get_ports {gpio_sw_tri_o[3]}]
set_property IOSTANDARD LVCMOS25 [get_ports {gpio_sw_tri_o[3]}]

SDk部分如下:

#include
#include "platform.h"
#include "xparameters.h"
#include "xgpio.h"
int main() {
XGpio gpio_led;
int status;
int i,x,y;

init_platform();
status = XGpio_Initialize(&gpio_led, 0);
if(status == 0){
printf("success /r/n");
}

XGpio_SetDataDirection(&gpio_led,1,0);//設置通道1為輸出
while (1){
for (i = 0; i XGpio_DiscreteWrite(&gpio_led, 1, 0x01 for(x =1000; x > 0; x-- ){
for (y = 100000; y > 0; y--);
}
}
}
cleanup_platform();
return 0;
}

可以看到,與EMIO一樣需要分配管腳,但是AXI_GPIO使用的頭文件是#include "xgpio.h",而EMIO是#include "xgpiops.h"。
下載完成后,PMOD1 的四個LED燈依次閃爍。

總結:

MIO和EMIO使用PS的GPIO,,MIO固定管腳,EMIO手動分配管腳;IP方式手動分配管腳,綜合后需要消耗PL的邏輯資源。

編輯:hfy


聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • Xilinx
    +關注

    關注

    73

    文章

    2200

    瀏覽量

    131120
  • GPIO
    +關注

    關注

    16

    文章

    1328

    瀏覽量

    56218
  • MIO
    MIO
    +關注

    關注

    0

    文章

    12

    瀏覽量

    8362
  • Zynq
    +關注

    關注

    10

    文章

    630

    瀏覽量

    49447
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    【MCU學習】GPIO詳解

    本實驗通過一個“小實驗框架 GPIO Mode Lab”,在同一個 GPIO 引腳上依次配置不同模式,并用 ADC 探頭測量電壓、同時讀取數(shù)字電平,系統(tǒng)化地觀察。
    的頭像 發(fā)表于 01-24 11:45 ?3543次閱讀
    【MCU學習】<b class='flag-5'>GPIO</b>詳解

    GPIO、PWM、ADC,到底怎么區(qū)分?

    在嵌入式開發(fā)中,我們經常聽到GPIO、PWM、ADC這些術語。初學者常常搞不清楚它們的區(qū)別和用途:“它們不是都是和電平有關嗎?為什么還要分這么多種?”今天,我們就把這些基礎概念講清楚,讓你在動手開發(fā)
    的頭像 發(fā)表于 11-14 10:28 ?741次閱讀
    <b class='flag-5'>GPIO</b>、PWM、ADC,到底怎么區(qū)分?

    使用e203驅動OV5640

    I2C時序。AXI_GPIOXilinx官方提供的IP核,其內部包含7個寄存器,前四個寄存器偏移地址從0x00到0x0F,每個都是32位的寄存器,可以控制GPIO的方向和寫的數(shù)據(jù),只需這四個寄存器便可
    發(fā)表于 10-29 06:15

    將e203 例化AXI總線接口

    否有信號變化,注意axi的awaddr,awvalid,wready,wdata一定要引出到ILA,這里調用ILA時候可以選擇axi屬性。 最后終于用e203的axi把led0點亮。(最終發(fā)現(xiàn)是
    發(fā)表于 10-29 06:08

    AXI GPIO擴展e203 IO口簡介

    AXI GPIO簡介 AXI-GPIO是一Xilinx公司開發(fā)的外設IP,可以連接到
    發(fā)表于 10-22 08:14

    【EK-RA6E2開發(fā)指南】GPIO使用

    我相信大多數(shù)學習嵌入式的朋友學習單片機的第一個程序都是點燈,畢竟點燈簡單嘛,操作下GPIO即可。當然,本教程的第一個應用也從GPIO的使用開始。
    的頭像 發(fā)表于 09-23 18:13 ?3425次閱讀
    【EK-RA6E2<b class='flag-5'>開發(fā)</b>指南】<b class='flag-5'>GPIO</b>使用

    Air780EPM應用開發(fā):解鎖GPIO與LED的N交互模式

    今天特別分享探索Air780EPM中GPIO與LED的多樣交互!本文介紹N交互模式,包括脈沖控制、狀態(tài)切換及多LED聯(lián)動,為智能設備開發(fā)提供豐富技術選型。適用于智能照明、狀態(tài)指示等物聯(lián)網(wǎng)場景。 一
    的頭像 發(fā)表于 05-29 14:31 ?726次閱讀
    Air780EPM應用<b class='flag-5'>開發(fā)</b>:解鎖<b class='flag-5'>GPIO</b>與LED的N<b class='flag-5'>種</b>交互模式

    迅為RK3568開發(fā)板驅動指南GPIO子系統(tǒng)GPIO子系統(tǒng)API函數(shù)的引入

    迅為RK3568開發(fā)板驅動指南GPIO子系統(tǒng)GPIO子系統(tǒng)API函數(shù)的引入
    的頭像 發(fā)表于 05-29 14:05 ?1014次閱讀
    迅為RK3568<b class='flag-5'>開發(fā)</b>板驅動指南<b class='flag-5'>GPIO</b>子系統(tǒng)<b class='flag-5'>GPIO</b>子系統(tǒng)API函數(shù)的引入

    解鎖Air780EPM:NGPIO操控LED的實戰(zhàn)技巧!

    在物聯(lián)網(wǎng)項目中,靈活使用Air780EPM的GPIO控制LED至關重要。本文將展示實現(xiàn)方式,涵蓋硬件配置與軟件編程,滿足不同場景需求。 今天特別分享基于Air780EPM的GPIO控制LED實現(xiàn)方案
    的頭像 發(fā)表于 05-28 16:56 ?867次閱讀
    解鎖Air780EPM:N<b class='flag-5'>種</b><b class='flag-5'>GPIO</b>操控LED的實戰(zhàn)技巧!

    迅為RK3568驅動指南GPIO子系統(tǒng) GPIO操作函數(shù)實驗

    迅為電子RK3568開發(fā)板驅動指南GPIO子系統(tǒng) GPIO操作函數(shù)實驗
    的頭像 發(fā)表于 05-28 15:24 ?1330次閱讀
    迅為RK3568驅動指南<b class='flag-5'>GPIO</b>子系統(tǒng) <b class='flag-5'>GPIO</b>操作函數(shù)實驗

    迅為RK3568開發(fā)板驅動指南GPIO子系統(tǒng)級節(jié)點操作函數(shù)實驗

    迅為RK3568開發(fā)板驅動指南GPIO子系統(tǒng)級節(jié)點操作函數(shù)實驗
    的頭像 發(fā)表于 05-26 15:39 ?1519次閱讀
    迅為RK3568<b class='flag-5'>開發(fā)</b>板驅動指南<b class='flag-5'>GPIO</b>子系統(tǒng)<b class='flag-5'>三</b>級節(jié)點操作函數(shù)實驗

    基于小凌派RK2206開發(fā)板:OpenHarmony如何使用IoT接口控制GPIO中斷

    1、實驗簡介本實驗將演示如何在小凌派-RK2206開發(fā)板上使用IOT庫的GPIO中斷模式,進行GPIO編程開發(fā)。例程將創(chuàng)建一個任務,通過配置GPIO
    的頭像 發(fā)表于 04-21 10:39 ?1092次閱讀
    基于小凌派RK2206<b class='flag-5'>開發(fā)</b>板:OpenHarmony如何使用IoT接口控制<b class='flag-5'>GPIO</b>中斷

    基于小凌派RK2206開發(fā)板:OpenHarmony如何使用IoT接口控制GPIO外設

    1、案例簡介本案例主要是如何在小凌派-RK2206開發(fā)板上使用IOT庫的GPIO接口,進行GPIO編程開發(fā)。例程將創(chuàng)建一個任務,通過配置GPIO
    的頭像 發(fā)表于 04-11 15:36 ?2040次閱讀
    基于小凌派RK2206<b class='flag-5'>開發(fā)</b>板:OpenHarmony如何使用IoT接口控制<b class='flag-5'>GPIO</b>外設

    為什么GPIO配置總是出問題?

    在STM32開發(fā)中,GPIO(通用輸入輸出)配置看似簡單,但在實際開發(fā)中,很多人常常會遇到這些困惑:明明按照教程配置了GPIO,為什么LED燈就是不亮?為什么有時候按鍵無法響應,或者響
    的頭像 發(fā)表于 04-07 11:59 ?1728次閱讀
    為什么<b class='flag-5'>GPIO</b>配置總是出問題?

    【北京迅為】iTOP-RK3568OpenHarmony系統(tǒng)南向驅動開發(fā)GPIO基礎知識

    【北京迅為】iTOP-RK3568OpenHarmony系統(tǒng)南向驅動開發(fā)GPIO基礎知識
    的頭像 發(fā)表于 03-06 11:23 ?1252次閱讀
    【北京迅為】iTOP-RK3568OpenHarmony系統(tǒng)南向驅動<b class='flag-5'>開發(fā)</b><b class='flag-5'>GPIO</b>基礎知識