《電子技術應用》
您所在的位置:首頁 > 可編程邏輯 > 業界動態 > 從小白到專家:網友親身實踐教您上手 ZYNQ 開發 | Zynq 常用外設快速上手指南

從小白到專家:網友親身實踐教您上手 ZYNQ 開發 | Zynq 常用外設快速上手指南

2019-09-15
關鍵詞: ZYNQ開發 Zynq

  ZYNQ有專用的DDR Controller接口,如果外部硬件連接了DDR器件,于是在ZYNQ Processing System中正確配置了相應的信號和參數后,DDR就可以成為ZYNQ的內存,在SDK中可以直接使用memcpy、memset以及類似的函數對于Memory空間進行操作。

  Step1:查看ZYBO的原理圖,找到相應的配置。ZYBO原理圖中與DDR相關的部分如下圖所示。

640.webp.jpg

  于是得到兩個信息,第一個所使用的芯片是MT41J128M16JT-125,第二個是兩片DDR3顆粒是通過位拼接完成的,也就是數據位寬為32bit。

  Step2:在Block Design中對DDR部分的參數進行配置。

640.webp (1).jpg

  Step3:完成Block Design設計,產生Bitstream,導入SDK。

640.webp (2).jpg

  Step4:在SDK中編寫Memory測試代碼。

  #include <stdio.h>

  #include <stdlib.h>

  #include "platform.h"

  #include "xil_printf.h"

  #include "xil_types.h"

  #include "xil_io.h"

  int main()

  {

  u32 test_src[100];

  int i;

  int readback;

  init_platform();

  u32 *result = (u32*) malloc(sizeof(u32) * 100);

  if (result) {

  memset(result, 0, sizeof(u32) * 100);

  } else {

  return 0;

  }

  for(i=0;i<99;i++)

  {

  test_src[i]=i;

  }

  memcpy(result,test_src,100 * sizeof(u32));

  for(i=0;i<100;i++)

  {

  readback = Xil_In32(result+i);

  其中特別需要學習的就是malloc與memcpy的使用方法。

  貳

  ZYNQ 中 MIO/EMIO GPIO 的使用

  參考工程見“ZYBO_Memory_GPIO_Interrupt_demo.xpr”。

  MIO是PS端的外部引腳,共有54個;EMIO是PL端的外部引腳,共有64個。ZYNQ支持通過配置將PS的控制器信號通過EMIO輸出,例如PS自帶的UART Controller,如果正常選擇引腳只能選擇MIO引腳輸出,但是通過設置可以選擇連接到EMIO引腳。同時EMIO引腳也可以作為PS端的擴展引腳,即經過擴展PS一共可以控制118個引腳。

  該例程演示將4個EMIO設置為PS的擴展引腳,這4個EMIO連接著LED。于是,與“將用戶邏輯設計封裝成IP”中的實驗相比,同樣是控制外部4個LED,就不需要另外設計一個邏輯模塊,并封裝成IP作為PS的外設了,可以直接通過SDK的程序進行控制。

  注意

  1. 用于擴展GPIO的EMIO和用于擴展外設的EMIO是完全獨立的,GPIO的EMIO共有64個,由2個bank組成,如下圖所示。

    640.webp (3).jpg

  2. EMIO的內部排序按照EMIO54、EMIO55... ... EMIO117,以此類推。有了EMIO的編號之后就與內部控制EMIO的寄存器一一對應;而EMIO在外部與外部引腳的對應關系又是可以通過管腳約束進行更改的。于是可以得出:不能通過EMIO的外部引腳的關系確定其內部寄存器的地址。工具對于EMIO GPIO的連接關系是按照從EMIO54開始依次向上排列。

  Step1:在Block Design中加入ZYNQ7 Processing System,在ZYNQ7 Processing System配置中添加EMIO GPIO,如下圖所示。通過設置EMIO GPIO Width來選擇擴展EMIO GPIO的個數,此時就完成了與內部寄存器之間的對應關系,規則就是從EMIO54開始向上排列。

640.webp (4).jpg

  Step2:將ZYNQ的EMIO連接到外部引腳。右擊生成的GPIO信號,點擊Make External。

640.webp (5).jpg

  Step3:約束EMIO與外部引腳Pad的對應關系以及EMIO的電平標準。

  方法有兩種:

  第一種是通過XDC約束文件進行約束,需要先將Block Design生成HDL Wrapper,這樣才能知道其引腳名稱。

  set_property IOSTANDARD LVCMOS33 [get_ports {gpio_0_tri_io[3]}]]

  set_property IOSTANDARD LVCMOS33 [get_ports {gpio_0_tri_io[2]}]

  set_property IOSTANDARD LVCMOS33 [get_ports {gpio_0_tri_io[1]}]

  set_property IOSTANDARD LVCMOS33 [get_ports {gpio_0_tri_io[0]}]

  set_property PACKAGE_PIN D18 [get_ports {gpio_0_tri_io[3]}]

  set_property PACKAGE_PIN G14 [get_ports {gpio_0_tri_io[2]}]

  set_property PACKAGE_PIN M15 [get_ports {gpio_0_tri_io[1]}]

  set_property PACKAGE_PIN M14 [get_ports {gpio_0_tri_io[0]}]

  第二種方法就是Open Elaborated Design,在GUI中設置電平和引腳。

640.webp (6).jpg

  Step4:完成Block Design的綜合、實現、生成Bitstream并導入SDK。

  Step5:SDK中完成代碼的編寫,EMIO的代碼編寫需要包含的庫文件是"xgpiops.h"。

  #include "xgpiops.h"

  static XGpioPs emio;

  #define EMIO_54   54

  #define EMIO_55   55

  #define EMIO_56   56

  #define EMIO_57   57

  int main()

  {

  //定義GPIOPS型指針,用于初始化時綁定硬件

  XGpioPs_Config *ConfigPtrPS;

  init_platform();

  //初始化GPIOPS,將ConfigPtrPS與硬件綁定

  ConfigPtrPS = XGpioPs_LookupConfig(0);

  XGpioPs_CfgInitialize(&emio, ConfigPtrPS,

  ConfigPtrPS->BaseAddr);

  //設置EMIO的方向,并使能EMIO

  XGpioPs_SetDirectionPin(&emio, EMIO_54, 1);

  XGpioPs_SetOutputEnablePin(&emio, EMIO_54, 1);

  XGpioPs_SetDirectionPin(&emio, EMIO_55, 1);

  XGpioPs_SetOutputEnablePin(&emio, EMIO_55, 1);

  XGpioPs_SetDirectionPin(&emio, EMIO_56, 1);

  XGpioPs_SetOutputEnablePin(&emio, EMIO_56, 1);

  XGpioPs_SetDirectionPin(&emio, EMIO_57, 1);

  XGpioPs_SetOutputEnablePin(&emio, EMIO_57, 1);

  while(1)

  {

  // 向EMIO寫入數據,即驅動EMIO引腳

  XGpioPs_WritePin(&emio, EMIO_54, 0x0);

  XGpioPs_WritePin(&emio, EMIO_55, 0x0);

  XGpioPs_WritePin(&emio, EMIO_56, 0x0);

  XGpioPs_WritePin(&emio, EMIO_57, 0x0);

  usleep(200000);

  XGpioPs_WritePin(&emio, EMIO_54, 0x1);

  XGpioPs_WritePin(&emio, EMIO_55, 0x1);

  XGpioPs_WritePin(&emio, EMIO_56, 0x1);

  XGpioPs_WritePin(&emio, EMIO_57, 0x1);

  usleep(200000);

  }

  cleanup_platform();

  return 0;

  }

  Step6:如果需要將EMIO作為輸入端口,只需要將IO的方向設置為input。對于IO,作為輸出的時候需要Enable,但是作為輸入是永遠使能的,不需要額外的Enable。具體代碼如下圖所示。

640.webp (7).jpg

  補充說明:

  MIO和EMIO都屬于PS的GPIO,用于指示的變量類型為XGpioPs;而使用AXI_GPIO外設的GPIO,由于是屬于PL的,所以指示這些IO的變量類型為XGpio。

  MIO和EMIO的控制對于SDK是完全相同的,其地址偏移量也是排在一起的,MIO從0排到53,EMIO接著從54開始。示例代碼中顯示的是EMIO作為輸出和MIO作為輸入,只需要將引腳編號的宏定義改為需要的MIO或者EMIO編號即可使用。

  在硬件配置時MIO的配置方法與EMIO有所不同,EMIO的配置如“Step1”所示。而MIO由于不像EMIO,外部管腳是確定的,所以可以在ZYNQ7 Processing System配置時同時完成屬性以及電平的設置,如下圖所示。

640.webp (8).jpg

  叁

  ZYNQ 中 Interrupt 使用

  參考工程見“ZYBO_Memory_GPIO_Interrupt_demo.xpr”。

  ZYNQ中的中斷管理是通過Generic Interrupt Controller(GIC)完成的。

  任何的中斷功能都需要兩步,第一步是配置相應的中斷,第二步是設置中斷觸發之后的服務函數。

  配置相應中斷分以下幾個步驟:

  1.   使能相應的功能,例如GPIO中斷需要首先使能和配置GPIO;Timer中斷需要首先使能和配置Timer;

  2. 640.webp (9).jpg

  2.  初始化并配置使能GIC,還要使能異常處理。第1步中的操作對于每個中斷源來說都不相同,但是這一步的配置對于不同中斷源而言是類似的。不同之處在于有一個參數:中斷ID,即例子中的52是變化的,52是GPIO的中斷號,其他中端需要使用不同的ID。該值可以在UG585中斷的相關章節查詢到,如下圖所示。

640.webp (10).jpg

640.webp (11).jpg

  另一個區別就是XScuGic_Connect時的服務子函數不同。

  3.  編寫中斷服務函數,需要注意的是進入服務函數后首先需要禁止中斷,保證在處理中斷時不會再次因觸發中斷而程序跳轉;另外就是需要清除中斷標志位,否則會不斷觸發中斷。

640.webp (12).jpg

  ZYNQ CPU內部任何有定時器,在Vivado的ZYNQ配置中無需任何操作就可以在SDK中直接使用。與GPIO中斷類似,Timer的中斷也包含相同的幾步操作,下面給出各個階段的代碼片段,完整代碼請點擊“閱讀原文”,登錄論壇獲取。

  1.   初始化Timer。

    640.webp (13).jpg

  2.  初始化GIC,設置中斷服務函數入口。

640.webp (14).jpg

  3.  配置Timer工作模式,導入計數初值,使能中斷。

640.webp (15).jpg

  4.  編寫中斷服務函數,進入中斷后首先Disable中斷,清楚中斷標志位;然后進行中斷處理;退出中斷服務函數前重新使能中斷。

640.webp (16).jpg

本站內容除特別聲明的原創文章之外,轉載內容只為傳遞更多信息,并不代表本網站贊同其觀點。轉載的所有的文章、圖片、音/視頻文件等資料的版權歸版權所有權人所有。本站采用的非本站原創文章及圖片等內容無法一一聯系確認版權者。如涉及作品內容、版權和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當措施,避免給雙方造成不必要的經濟損失。聯系電話:010-82306118;郵箱:aet@chinaaet.com。
热re99久久精品国产66热_欧美小视频在线观看_日韩成人激情影院_庆余年2免费日韩剧观看大牛_91久久久久久国产精品_国产原创欧美精品_美女999久久久精品视频_欧美大成色www永久网站婷_国产色婷婷国产综合在线理论片a_国产精品电影在线观看_日韩精品视频在线观看网址_97在线观看免费_性欧美亚洲xxxx乳在线观看_久久精品美女视频网站_777国产偷窥盗摄精品视频_在线日韩第一页
  • <strike id="ygamy"></strike>
  • 
    
      • <del id="ygamy"></del>
        <tfoot id="ygamy"></tfoot>
          <strike id="ygamy"></strike>
          亚洲摸下面视频| 国产女人aaa级久久久级| 亚洲精品中文字幕有码专区| 欧美午夜精彩| 久久综合狠狠综合久久综青草| 国内精品免费在线观看| 91久久久在线| 亚洲电影在线| 亚洲欧美日韩一区在线观看| 久久综合导航| 国产日韩亚洲欧美精品| 免费在线视频一区| 夜夜嗨一区二区| 老司机免费视频一区二区| 欧美精品日韩一区| 国产亚洲欧美一区在线观看| 亚洲精品视频在线| 国产欧美日韩在线播放| 黄色成人在线网址| 国产精品视频免费| 免费成人高清在线视频| 久久免费国产精品| 99视频超级精品| 永久91嫩草亚洲精品人人| 亚洲校园激情| 国产精品久久久久久av福利软件| 国产精品久久久久一区二区三区共| 开心色5月久久精品| 欧美精品系列| 亚洲精品视频二区| 一区三区视频| 99香蕉国产精品偷在线观看| 免费观看30秒视频久久| 国内精品免费在线观看| 伊人狠狠色j香婷婷综合| 国产字幕视频一区二区| 蜜臀av在线播放一区二区三区| 一区二区三区精品在线| 欧美少妇一区| 欧美一区日本一区韩国一区| 国产性色一区二区| 国产精品入口日韩视频大尺度| 最近中文字幕日韩精品| 精品成人在线| 亚洲第一二三四五区| 欧美裸体一区二区三区| 国产精品成人观看视频免费| 欧美主播一区二区三区美女 久久精品人| 欧美日韩网址| 亚洲人成网站999久久久综合| 在线观看91精品国产麻豆| 亚洲一区二区少妇| 欧美福利一区二区| 亚洲黄色av| 新狼窝色av性久久久久久| 好吊色欧美一区二区三区四区| 亚洲欧美激情视频在线观看一区二区三区| 日韩视频免费看| 欧美亚洲一级片| 久久国产天堂福利天堂| 亚洲欧美精品在线观看| 国产精品久久国产精品99gif| 99精品视频免费| 久久视频精品在线| 国产一区视频观看| 在线视频精品一| 久久久久久网| 欧美在线免费观看亚洲| 欧美日韩午夜剧场| 久久精品日韩一区二区三区| 免费不卡亚洲欧美| 欧美国产日韩xxxxx| 久久精品国产一区二区三区| 欧美激情第五页| 国产欧美激情| 狠狠网亚洲精品| 亚洲欧美中文日韩v在线观看| 国内精品久久久久久久果冻传媒| 国产欧美在线看| 国产精品久久久久久五月尺| 在线观看中文字幕亚洲| 欧美人与性动交a欧美精品| 尤物yw午夜国产精品视频明星| 亚洲手机在线| 很黄很黄激情成人| 亚洲精品一区在线观看香蕉| 亚洲国产aⅴ天堂久久| 久久久久综合| 在线视频日韩| 欧美日韩精品一区二区在线播放| 激情欧美日韩一区| 欧美另类在线观看| 欧美三日本三级少妇三2023| 9l国产精品久久久久麻豆| 欧美乱在线观看| 99在线精品视频在线观看| 欧美图区在线视频| 久久久高清一区二区三区| 亚洲韩国一区二区三区| 欧美在线一级va免费观看| 国产精品久久久亚洲一区| 欧美激情第4页| 在线一区二区三区四区| 亚洲国产婷婷综合在线精品| 久久精品亚洲热| 99re66热这里只有精品3直播| 亚洲美女中文字幕| 欧美第一黄色网| 午夜久久久久久久久久一区二区| 香蕉久久久久久久av网站| 欧美亚洲第一区| 欧美激情精品久久久久久变态| 亚洲一区二区av电影| 亚洲第一中文字幕在线观看| 久久综合久久美利坚合众国| 欧美中文字幕不卡| 好吊妞**欧美| 亚洲成色777777女色窝| 亚洲丰满少妇videoshd| 一区二区三区三区在线| 国产精品网红福利| 狠狠干综合网| 欧美成人午夜影院| 欧美在线观看视频一区二区| 一区二区三区视频在线播放| 国产精品青草综合久久久久99| 久久久久久9999| 国产精品theporn| 久久疯狂做爰流白浆xx| 99热免费精品在线观看| 狠狠色狠狠色综合人人| 国产精品毛片va一区二区三区| 亚洲精品韩国| av72成人在线| 久久久久久亚洲精品不卡4k岛国| 欧美日韩国产经典色站一区二区三区| 国内成人精品2018免费看| 久久亚洲精品网站| 国产一区久久| 欧美日韩午夜| 先锋影院在线亚洲| 国产日韩亚洲欧美| 亚洲国产精品久久久久| 久久久青草婷婷精品综合日韩| 亚洲精品一区二区三区99| 午夜精品理论片| 欧美国产1区2区| 久久蜜桃精品| 欧美mv日韩mv国产网站app| 久久国产免费| 国产精品国产成人国产三级| 国产亚洲午夜| 久久久.com| 亚洲国产cao| 亚洲免费观看高清完整版在线观看| 久久亚洲欧美国产精品乐播| 欧美日韩视频免费播放| 欧美四级在线| 欧美一区二区三区免费观看视频| 亚洲欧美一区二区三区久久| 欧美护士18xxxxhd| 亚洲欧美变态国产另类| 久久九九国产精品怡红院| 免费av成人在线| 欧美另类极品videosbest最新版本| 在线日韩日本国产亚洲| 亚洲免费电影在线观看| 亚洲欧美日韩在线综合| 狠狠噜噜久久| 精品白丝av| 在线视频免费在线观看一区二区| 国产精品永久免费在线| 久久影视三级福利片| 亚洲美女精品久久| 黄色日韩精品| 欧美精品福利在线| 久久夜色精品一区| 亚洲成色777777女色窝| 亚洲风情在线资源站| 欧美日韩免费看| 欧美电影免费观看高清完整版| 国产一区二区精品在线观看| 欧美日韩成人在线观看| 欧美亚洲网站| 国内久久婷婷综合| 国产欧美一二三区| 欧美aa在线视频| 久热精品视频在线观看| 伊人激情综合| 亚洲国产成人久久| 一区二区在线观看av| 欧美日韩另类国产亚洲欧美一级| 亚洲一区自拍| 欧美日韩国产成人在线91| 国产色婷婷国产综合在线理论片a| 欧美日产一区二区三区在线观看| 欧美一区在线直播| 欧美精彩视频一区二区三区| 亚洲精品久久久久中文字幕欢迎你| 国产一区二区按摩在线观看| 久久免费少妇高潮久久精品99| 国产精品日韩欧美| 在线精品观看| 在线观看亚洲a| 亚洲女优在线| 一区二区三区波多野结衣在线观看| 欧美日精品一区视频| 久久精品一区中文字幕| 一个色综合av| 精品99一区二区三区| 欧美精品在线网站| 国色天香一区二区| 国产欧美日本一区视频| 久久久激情视频| 国产精品视频| 亚洲男人av电影| 欧美精品国产一区| 亚洲精品在线视频观看| 一区二区三区在线观看视频| 亚洲精品字幕| 亚洲婷婷在线| 欧美日本在线播放| 亚洲伊人第一页| 欧美激情在线播放| 欧美有码在线视频| 久久精品亚洲乱码伦伦中文| 欧美精品导航| 久久夜色精品国产噜噜av| 亚洲高清在线| 国产一区二区高清不卡| 欧美日韩免费观看一区| 亚洲视频一起| 国产亚洲精品综合一区91| 国内综合精品午夜久久资源| 国产精品影院在线观看| 欧美一区二区三区四区在线| 欧美激情一区二区三级高清视频| 欧美日韩国产在线| 一区二区三区四区在线| 国产精品亚洲欧美| 亚洲精品一区二区三区四区高清| 欧美精品久久久久久久久老牛影院| 99综合视频| 国产精品极品美女粉嫩高清在线| 日韩午夜电影av| 国内外成人免费激情在线视频网站| 免费91麻豆精品国产自产在线观看| 久久久久88色偷偷免费| 欧美日韩国产精品一区二区亚洲| 亚洲天堂激情| 久久这里只有精品视频首页| 亚洲高清不卡在线观看| 亚洲欧美在线磁力| 欧美精品久久一区二区| 亚洲欧洲日韩在线| 久久九九免费| 一色屋精品亚洲香蕉网站| 亚洲另类春色国产| 亚洲国产清纯| 亚洲免费观看视频| 最新国产拍偷乱拍精品| 欧美日本不卡视频| 伊人成人网在线看| 玖玖玖国产精品| 国产精品亚洲一区二区三区在线| 欧美午夜剧场| 欧美激情成人在线视频| 亚洲视屏在线播放| 久久久国产精品一区二区中文| 一本一本a久久| 国产亚洲第一区| 午夜精品国产更新| 欧美激情成人在线视频| 99视频日韩| 亚洲国产经典视频| 亚洲第一网站| 国产精品一区二区三区四区| 欧美日韩精品一二三区| 久久国产精品久久久| 黄色一区二区三区| 99精品免费视频| 欧美黄色日本| 欧美四级伦理在线| 欧美黄网免费在线观看| 久久久久久91香蕉国产| 一区二区三区免费网站| 国产精品蜜臀在线观看| 亚洲精品一二三区| 亚洲视频999| 亚洲影音先锋| 欧美精品在线一区| 欧美激情第三页| 欧美日韩高清一区| 欧美精品粉嫩高潮一区二区| 久久免费高清视频| 亚洲午夜激情在线| 日韩视频在线免费| 日韩视频在线一区二区三区| 91久久综合| 久久久久久久久久久久久女国产乱| 亚洲午夜av电影| 香蕉亚洲视频| 久久久久久久综合日本| 欧美激情一区二区三区在线视频| 亚洲日本国产| 亚洲卡通欧美制服中文| 久久在线免费视频| 日韩视频―中文字幕| 免费短视频成人日韩| 欧美在线黄色| 欧美日韩国产欧| 国产亚洲人成a一在线v站| 久久精品国产综合精品| 蜜桃精品久久久久久久免费影院| 美乳少妇欧美精品| 亚洲一区二区成人在线观看| 一区二区三区国产在线观看| 欧美大片国产精品| 毛片基地黄久久久久久天堂| 亚洲欧美日韩另类精品一区二区三区| 国产精品不卡在线| 国产亚洲精品激情久久| 美日韩丰满少妇在线观看| 激情六月综合| 久久久久久久久蜜桃| 另类综合日韩欧美亚洲| 欧美aⅴ一区二区三区视频| 免费观看不卡av|