在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

ZYNQ常用外設(shè)設(shè)計(jì):malloc與memcpy的使用方法

電子設(shè)計(jì) ? 來(lái)源:賽靈思中文社區(qū)論壇 ? 作者:Wilson Qiu ? 2020-11-27 12:18 ? 次閱讀

作者:Wilson Qiu,Xilinx工程師

ZYNQ對(duì)Memory的操作

參考工程見(jiàn)“ZYBO_Memory_GPIO_Interrupt_demo.xpr”。

ZYNQ有專用的DDR Controller接口,如果外部硬件連接了DDR器件,于是在ZYNQ Processing System中正確配置了相應(yīng)的信號(hào)和參數(shù)后,DDR就可以成為ZYNQ的內(nèi)存,在SDK中可以直接使用memcpy、memset以及類似的函數(shù)對(duì)于Memory空間進(jìn)行操作。

Step1:查看ZYBO的原理圖,找到相應(yīng)的配置。ZYBO原理圖中與DDR相關(guān)的部分如圖 49所示。

圖 49

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

Step2:在Block Design中對(duì)DDR部分的參數(shù)進(jìn)行配置。

圖 50

Step3:完成Block Design設(shè)計(jì),產(chǎn)生Bitstream,導(dǎo)入SDK。

圖 51

Step4:在SDK中編寫Memory測(cè)試代碼。

#include 
#include 
#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);

其中特別需要學(xué)習(xí)的就是malloc與memcpy的使用方法。

ZYNQ中MIO/EMIO GPIO的使用

參考工程見(jiàn)“ZYBO_Memory_GPIO_Interrupt_demo.xpr”。

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

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

注意:

1. 用于擴(kuò)展GPIO的EMIO和用于擴(kuò)展外設(shè)的EMIO是完全獨(dú)立的,GPIO的EMIO共有64個(gè),由2個(gè)bank組成,如圖 52所示。

圖 52

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

Step1:在Block Design中加入ZYNQ7 Processing System,在ZYNQ7 Processing System配置中添加EMIO GPIO,如圖 53所示。通過(guò)設(shè)置EMIO GPIO Width來(lái)選擇擴(kuò)展EMIO GPIO的個(gè)數(shù),此時(shí)就完成了與內(nèi)部寄存器之間的對(duì)應(yīng)關(guān)系,規(guī)則就是從EMIO54開始向上排列。

圖 53

Step2:將ZYNQ的EMIO連接到外部引腳。右擊生成的GPIO信號(hào),點(diǎn)擊Make External。

圖 54

Step3:約束EMIO與外部引腳Pad的對(duì)應(yīng)關(guān)系以及EMIO的電平標(biāo)準(zhǔn)。

方法有兩種:

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

圖 55

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

圖 56

Step4:完成Block Design的綜合、實(shí)現(xiàn)、生成Bitstream并導(dǎo)入SDK。

Step5:SDK中完成代碼的編寫,EMIO的代碼編寫需要包含的庫(kù)文件是"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型指針,用于初始化時(shí)綁定硬件
    XGpioPs_Config *ConfigPtrPS;
    init_platform();
    //初始化GPIOPS,將ConfigPtrPS與硬件綁定
    ConfigPtrPS = XGpioPs_LookupConfig(0);
       XGpioPs_CfgInitialize(&emio, ConfigPtrPS,
                     ConfigPtrPS- > BaseAddr);
       //設(shè)置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寫入數(shù)據(jù),即驅(qū)動(dòng)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的方向設(shè)置為input。對(duì)于IO,作為輸出的時(shí)候需要Enable,但是作為輸入是永遠(yuǎn)使能的,不需要額外的Enable。具體代碼如圖 57所示。

圖 57

補(bǔ)充說(shuō)明:

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

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

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

圖 58

ZYNQ中Interrupt使用

參考工程見(jiàn)“ZYBO_Memory_GPIO_Interrupt_demo.xpr”。

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

任何的中斷功能都需要兩步,第一步是配置相應(yīng)的中斷,第二步是設(shè)置中斷觸發(fā)之后的服務(wù)函數(shù)。

配置相應(yīng)中斷分以下幾個(gè)步驟:

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

圖 59

2. 初始化并配置使能GIC,還要使能異常處理。第1步中的操作對(duì)于每個(gè)中斷源來(lái)說(shuō)都不相同,但是這一步的配置對(duì)于不同中斷源而言是類似的。不同之處在于有一個(gè)參數(shù):中斷ID,即例子中的52是變化的,52是GPIO的中斷號(hào),其他中端需要使用不同的ID。該值可以在UG585中斷的相關(guān)章節(jié)查詢到,如圖 61所示。

另一個(gè)區(qū)別就是XScuGic_Connect時(shí)的服務(wù)子函數(shù)不同。

圖 60

圖 61

3. 編寫中斷服務(wù)函數(shù),需要注意的是進(jìn)入服務(wù)函數(shù)后首先需要禁止中斷,保證在處理中斷時(shí)不會(huì)再次因觸發(fā)中斷而程序跳轉(zhuǎn);另外就是需要清除中斷標(biāo)志位,否則會(huì)不斷觸發(fā)中斷。

圖 62

源代碼見(jiàn)附件。

ZYNQ CPU內(nèi)部任何有定時(shí)器,在Vivado的ZYNQ配置中無(wú)需任何操作就可以在SDK中直接使用。與GPIO中斷類似,Timer的中斷也包含相同的幾步操作,下面給出各個(gè)階段的代碼片段,完整代碼見(jiàn)附件。

1. 初始化Timer。

圖 63

2. 初始化GIC,設(shè)置中斷服務(wù)函數(shù)入口。

圖 64

3. 配置Timer工作模式,導(dǎo)入計(jì)數(shù)初值,使能中斷。

圖 65

4. 編寫中斷服務(wù)函數(shù),進(jìn)入中斷后首先Disable中斷,清楚中斷標(biāo)志位;然后進(jìn)行中斷處理;退出中斷服務(wù)函數(shù)前重新使能中斷。

圖 66

Appendix 1: 配套工程

編輯:hfy

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

    關(guān)注

    11

    文章

    727

    瀏覽量

    66186
  • Zynq
    +關(guān)注

    關(guān)注

    10

    文章

    614

    瀏覽量

    47894
  • memcpy
    +關(guān)注

    關(guān)注

    0

    文章

    9

    瀏覽量

    2893
  • malloc
    +關(guān)注

    關(guān)注

    0

    文章

    53

    瀏覽量

    159
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    精密空調(diào)操作使用方法詳解

    精密空調(diào)操作使用方法詳解
    的頭像 發(fā)表于 02-10 14:44 ?502次閱讀
    精密空調(diào)操作<b class='flag-5'>使用方法</b>詳解

    不停的malloc程序會(huì)異常嗎

    malloc 放在死循環(huán)里面,會(huì)是什么樣的現(xiàn)象? 比如這樣的代碼,每次使用 malloc 申請(qǐng) 1M 大小的內(nèi)存,其他什么操作也不做。 理論上來(lái)說(shuō),堆內(nèi)存是有限的,如果不停的申請(qǐng),遲早內(nèi)存會(huì)被
    的頭像 發(fā)表于 01-14 09:17 ?319次閱讀

    AB伺服軟件使用方法

    AB伺服軟件使用方法
    發(fā)表于 12-24 14:45 ?0次下載

    示波器高壓探頭使用方法

    示波器高壓探頭是一種用于測(cè)量高電壓信號(hào)的儀器,通常用于高壓電源、電機(jī)、變壓器等電氣設(shè)備的測(cè)試。以下是示波器高壓探頭的詳細(xì)使用方法
    的頭像 發(fā)表于 10-03 16:43 ?896次閱讀

    TI mmWave Radar sensor硬件外設(shè)設(shè)計(jì)參考

    電子發(fā)燒友網(wǎng)站提供《TI mmWave Radar sensor硬件外設(shè)設(shè)計(jì)參考.pdf》資料免費(fèi)下載
    發(fā)表于 09-27 11:06 ?0次下載
    TI mmWave Radar sensor硬件<b class='flag-5'>外設(shè)設(shè)</b>計(jì)參考

    探針頭型使用方法有哪些

    探針頭型的使用方法多種多樣,具體取決于探針頭型的類型、被測(cè)對(duì)象的特性以及測(cè)試需求。以下是一些常見(jiàn)探針頭型的使用方法概述: 1. 凹頭探針 用途 :主要用于測(cè)試長(zhǎng)導(dǎo)腳、端子及繞線柱等較長(zhǎng)或較粗的被測(cè)點(diǎn)
    的頭像 發(fā)表于 09-07 10:57 ?1386次閱讀

    [XILINX] 正點(diǎn)原子ZYNQ7035/7045/7100開發(fā)板發(fā)布、ZYNQ 7000系列、雙核ARM、PCIe2.0、SFPX2!

    7000系列芯片,核心板支持Xilinx Zynq-7035、Zynq-7045和Zynq-7100三種型號(hào)。開發(fā)板由核心板+底板組成,外設(shè)資源豐富,板載2路千兆以太網(wǎng)接口(PS+PL
    發(fā)表于 09-02 17:18

    DC/DC模擬的基本使用方法和特性確認(rèn)方法

    本篇介紹了DC/DC模擬的基本使用方法及確認(rèn)基本特性的方法
    的頭像 發(fā)表于 08-20 17:08 ?1100次閱讀
    DC/DC模擬的基本<b class='flag-5'>使用方法</b>和特性確認(rèn)<b class='flag-5'>方法</b>

    淺談錫膏的儲(chǔ)存及使用方法

    錫膏(焊錫膏)是電子組裝過(guò)程中常用的材料,它的儲(chǔ)存和使用方法對(duì)保證焊接質(zhì)量和性能至關(guān)重要。以下是詳細(xì)的儲(chǔ)存及使用方法
    的頭像 發(fā)表于 06-27 10:02 ?1399次閱讀

    電流探頭的使用方法及測(cè)量技巧

    電流探頭是電子測(cè)量領(lǐng)域中常用的工具,用于測(cè)量電路中的電流。它們通常用于連接示波器或多用途數(shù)字測(cè)量?jī)x器,以便觀測(cè)和分析電流波形。本文將介紹電流探頭的使用方法以及一些測(cè)量技巧,幫助您更好地進(jìn)行電流測(cè)量
    的頭像 發(fā)表于 06-17 13:42 ?1052次閱讀
    電流探頭的<b class='flag-5'>使用方法</b>及測(cè)量技巧

    可編程電源使用方法

    可編程電源使用方法 可編程電源使用方法 摘要:本文詳細(xì)介紹了可編程電源的使用方法,包括其基本概念、主要功能、選擇原則、操作步驟、注意事項(xiàng)以及實(shí)際應(yīng)用案例,旨在幫助讀者全面了解可編程電源
    的頭像 發(fā)表于 06-10 15:29 ?1463次閱讀

    現(xiàn)場(chǎng)總線的使用方法與注意事項(xiàng)

    的穩(wěn)定可靠運(yùn)行,正確的使用方法和注意事項(xiàng)至關(guān)重要。本文將詳細(xì)介紹現(xiàn)場(chǎng)總線的使用方法和注意事項(xiàng),以供讀者參考。
    的頭像 發(fā)表于 06-06 11:49 ?1117次閱讀

    如何在不同頻率下設(shè)置不同的外設(shè)

    我的預(yù)期。 請(qǐng)告訴我,我的理解是否正確? 或建議我一種配置每個(gè)外設(shè)方法,如 SPI 為 4Mhz,定時(shí)器為 16Mhz,I2C 為 2Mhz 另外,當(dāng)我這樣做時(shí),工作正常,但用這種方法,我無(wú)法為不同的
    發(fā)表于 05-29 06:37

    malloc和calloc功能來(lái)實(shí)現(xiàn)DAQ,在調(diào)試模式下調(diào)用calloc和malloc函數(shù)時(shí)似乎卡住了,為什么?

    我正在使用 malloc 和 calloc 功能來(lái)實(shí)現(xiàn) DAQ。 我使用的是 TLE9893 系列芯片。 代碼編譯良好,但在調(diào)試模式下調(diào)用 calloc 和 malloc 函數(shù)時(shí)似乎卡住了。 我嘗試
    發(fā)表于 05-27 08:29

    手柄控制代碼及使用方法

    手柄控制代碼及使用方法
    的頭像 發(fā)表于 05-15 10:19 ?2754次閱讀
    主站蜘蛛池模板: 三级色图 | 亚洲va国产va天堂va久久 | 免费大秀视频在线播放 | 99久久婷婷免费国产综合精品 | 男男浪荡性受高hnp肉 | 日本网站免费观看 | 丁香婷婷激情综合 | 亚洲国产婷婷综合在线精品 | 九九热精品在线观看 | 日本黄色片视频 | 成人免费视频一区二区三区 | 午夜影院在线观看免费 | 一级毛片免费不卡直观看 | h免费视频 | 一级特黄a视频 | 久久人人爽爽爽人久久久 | 黄色大全片 | 日本免费人成黄页在线观看视频 | 男人午夜禁片在线观看 | 国产专区日韩精品欧美色 | 久久久久久久久国产 | 午夜免费观看_视频在线观看 | 深夜国产成人福利在线观看女同 | 曰本福利写真片视频在线 | 国产福利乳摇在线播放 | 亚洲最新在线观看 | 亚洲第一视频在线播放 | 五月婷婷天 | 亚洲男人a天堂在线2184 | 超级香蕉97视频在线观看一区 | 国模私拍视频在线观看 | 免费一级特黄特色大片在线观看 | 俄罗斯aaaaa一级毛片 | 天天做天天做天天综合网 | www.青草视频 | 特级毛片网站 | 欧美极品在线视频 | 国产手机视频在线 | 日日搞夜夜操 | 人人草草| 欧美激情亚洲精品日韩1区2区 |