日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁 > > ZYNQ
		


目錄

一、AD9361概述

1.1  AD9361芯片結(jié)構(gòu)
1.2  AD9361性能特點
1.3 AD-FMCOMMS2-EBZ性能特點

二、Zynq-7000概述

2.1  Zynq的芯片結(jié)構(gòu)
2.2 ZC702簡介和結(jié)構(gòu)

三、AD9361和ZC702之間的數(shù)據(jù)通路

四、AD9361參考設(shè)計說明(PL側(cè)硬件部分)

4.1 IP核的概念
4.2 硬件設(shè)計

五、AD9361 參考設(shè)計說明(PS側(cè)軟件部分)

5.1 AD9361 no-OS Software 概述
5.2 AD9361 no-OS Software 頂層目錄說明
5.3 main.c文件
5.4 dac_init函數(shù)
5.5 adc_capture函數(shù)


一、AD9361概述

1.1  AD9361芯片結(jié)構(gòu)

AD9361是一款面向3G和4G基站應(yīng)用的高性能、高集成度的射頻(RF)Agile Transceiver?捷變收發(fā)器。芯片采用了零中頻架構(gòu),將整個射頻以及中頻信號電路集成在一個芯片中,包括射頻放大器、 模擬濾波器、混頻器、解調(diào)器、 12 位的 ADC DAC 的 RF 2x2(接收和發(fā)送通道各兩路) 收發(fā)器, 另外還集成了收發(fā)通道的頻率合成器, 同時為每個接收子系統(tǒng)集成了獨立的自動增益控制( AGC) 、直流失調(diào)校正、正交校正和數(shù)字濾波電路,消除了數(shù)字基帶中提供這些功能的必要性,每個通道搭載兩個高動態(tài)范圍 ADC, 先將收到的I 信號Q 信號進(jìn)行數(shù)字化處理,然后將其傳給可配置抽取濾波器和抽頭有限脈沖響應(yīng)( FIR) 濾波器,以相應(yīng)的采樣率生成 12 路輸出信號。

1 AD9361芯片結(jié)構(gòu)


1.2  AD9361性能特點

AD9361 的工作頻率為 70 MHz ~ 6 GHz,涵蓋了大部分特許執(zhí)照和免執(zhí)照頻段,支持可調(diào)諧 200 kHz ~ 56 MHz 的通道帶寬,且具有高度的可編程能力, 發(fā)射器采用了直接變頻架構(gòu),可實現(xiàn)較高的調(diào)制精度和較低的噪聲,在接收通道,接收噪聲系數(shù)可以做到小于 2. 5 dB,此外,該芯片的 EVM 可以做到小于-40 dB,可為外部功率放大器的選擇留出客觀的系統(tǒng)裕量,并且,芯片還支持 AGC 自動增益和更加靈活的手動增益模式,支持外部控制。公眾號:OpenFPGA

1.3 AD-FMCOMMS2-EBZ性能特點

AD-FMCOMMS2-EBZ是一款高速模擬模塊,設(shè)計用于展示AD9361的硬件評估板。AD-FMCOMMS2-EBZ使射頻工程師能夠?qū)D9361連接到射頻測試平臺(矢量信號分析儀、信號發(fā)生器等)并測量性能。

2AD-FMCOMMS2-EBZ的外觀:

2 AD-FMCOMMS2-EBZ外觀

通俗來講,AD9361就是一個集成度很高的信號收發(fā)器,用戶不需要向普通收發(fā)器那樣準(zhǔn)備放大器,混頻器等等部件;它可以通過搭載它的評估板上的FMC接口與各種母板連接,連接后,在母板上用戶可以使用ADI公司提供的API編程來配置AD9361的一些參數(shù)例如濾波器系數(shù)等等,達(dá)到靈活控制收發(fā)器的目的,而且工作頻率寬,設(shè)計也很簡單。

AD-FMCOMMS2-EBZ就是是搭載AD9361的評估板,用于外圍設(shè)備(例如天線和FMC接口)與AD9361的連接。

二、Zynq-7000概述

2.1  Zynq的芯片結(jié)構(gòu)

Zynq-7000 AP SOC是Zynq-7000全可編程片上系統(tǒng)的縮寫(Zynq-7000 All Programmable System on Chip),它通過將一個雙核ARM Cortex-A9處理系統(tǒng)(Processing System,簡稱PS)和Xilinx 7-Series 28nm 可編程邏輯(Programmable Logic,簡稱PL)及各種接口等周邊設(shè)備集成到一個芯片上組成一個片上系統(tǒng)(SOC),來減少系統(tǒng)的復(fù)雜性。3為一個最簡單的Zynq結(jié)構(gòu)模型:

3 Zynq簡單結(jié)構(gòu)模型


Zynq最為簡單的結(jié)構(gòu)模型就只有兩部分:PS和PL,PS和PL之間通過AXI接口進(jìn)行數(shù)據(jù)通信,這樣,使用Zynq SOC既可以單獨使用ARM來實現(xiàn)嵌入式系統(tǒng)的設(shè)計,又可以使用FPGA來實現(xiàn)各種時序和邏輯的設(shè)計,最為關(guān)鍵的是可以同時使用二者來進(jìn)行更為靈活的系統(tǒng)設(shè)計。公眾號:OpenFPGA

值得注意的是,Zynq的處理系統(tǒng)(PS)并不是只包含ARM處理器,還包含應(yīng)用處理單元(Application Processing Unit,APU)和外圍接口,緩存區(qū),內(nèi)存接口和時鐘電路;Zynq可以單獨使用PS部分,但無法單獨使用PL部分,要想使用PL部分必須得啟動PS側(cè),通過PS來配置PL。

4為較為詳細(xì)的Zynq結(jié)構(gòu)圖,上半部分PS側(cè)結(jié)構(gòu),其中為綠色部分為APU;下半部分為PL側(cè)結(jié)構(gòu)。

4 Zynq結(jié)構(gòu)模型

2.2 ZC702簡介和結(jié)構(gòu)

Xilinx ZC702是一個評估板,為Zynq SoC提供一個開發(fā)和評估的硬件環(huán)境。ZC702和一些嵌入式處理系統(tǒng)有共同的特性,包括DDR3內(nèi)存,三模式以太網(wǎng),通用I/O和兩個URAT接口。另外ZC702還支持FMC。使用ZC702作為平臺連接AD-FMCOMMS2-EBZ板子可以生成需要發(fā)送的信號、對采集到的信號進(jìn)行處理等功能。5為ZC702的外觀結(jié)構(gòu),圖 6為ZC702的簡略的框架結(jié)構(gòu)

5 ZC702外觀結(jié)構(gòu)


6 ZC702結(jié)構(gòu)框圖

三、AD9361和ZC702之間的數(shù)據(jù)通路

ADI公司提供了基于ZC702的硬件(PL側(cè))和軟件(PS側(cè))設(shè)計,作為AD9361和Zynq之間的連接和使用的基礎(chǔ)。在其提供的硬件設(shè)計的基礎(chǔ)上,AD9361和ZC702之間的數(shù)據(jù)通路如所示:


7 AD9361和ZC702之間數(shù)據(jù)通路

右邊為AD9361部分,左邊為ZC702部分;二者通過FMC接口傳輸數(shù)據(jù)。在ZC702部分的藍(lán)色區(qū)域為zynq的PL部分,命名為AD9361Core;上方為ARM部分,其余為接口部分,為PS和PL及AD9361之間建立數(shù)據(jù)通道。

ADI公司也提供了代碼用于配置AD9361的參數(shù)和一些API用于數(shù)據(jù)的傳輸和接收;

與DDR進(jìn)行傳輸數(shù)據(jù)的傳輸方式為DMA傳輸方式:在DMAC(DMA控制器)的操作下,數(shù)據(jù)直接由源地址傳輸?shù)侥康牡刂?,(DDRAD9361)不需CPU的干預(yù),因此可以極大的提高了CPU的效率。

注意:如果使用PL側(cè)來產(chǎn)生用戶數(shù)據(jù)而是直接通過PS側(cè)來產(chǎn)生數(shù)據(jù)并發(fā)送的話,用戶數(shù)據(jù)應(yīng)該使用DMA傳輸方式和DDR。

在PFGA部分中DDS(直接數(shù)字式頻率合成器)產(chǎn)生的信號數(shù)據(jù)和從AD9361接收到的信號數(shù)據(jù)都需要進(jìn)行IQ調(diào)制和解調(diào)后,通過DMA方式傳輸?shù)紻DR中存儲,這樣方便ARM讀取數(shù)據(jù),并進(jìn)行處理。

以上的數(shù)據(jù)通路是通過硬件設(shè)計來實現(xiàn)的,若想真正配置和使用AD9361,還需通過運行在ARM上的軟件部分。



四、AD9361參考設(shè)計說明(PL側(cè)硬件部分)

4.1 IP核的概念

IP(Intellectual Property)內(nèi)核模塊是一種預(yù)先設(shè)計好的甚至已經(jīng)過驗證的具有某種確定功能的集成電路、器件或部件。它有幾種不同形式。IP內(nèi)核模塊有行為 (behavior)、結(jié)構(gòu)(structure)和物理(physical)3級不同程度的設(shè)計,對應(yīng)有主要描述功能行為的“軟IP內(nèi)核(soft IP core)”、完成結(jié)構(gòu)描述的“固IP內(nèi)核(firm IP core)”和基于物理描述并經(jīng)過工藝驗證的“硬IP內(nèi)核(hard IP core)”3個層次。這相當(dāng)于集成電路(器件或部件)的毛坯、半成品和成品的設(shè)計技術(shù)。

軟核是用VHDL等硬件描述語言描述的功能塊,但是并不涉及用什么具體電路元件實現(xiàn)這些功能。軟IP通常是以硬件描述 語言HDL源文件的形勢出現(xiàn),應(yīng)用開發(fā)過程與普通的HDL設(shè)計也十分相似,只是所需的開發(fā)硬軟件環(huán)境比較昂貴。軟IP的設(shè)計周期短,設(shè)計投入少。由于不涉 及物理實現(xiàn),為后續(xù)設(shè)計留有很大的發(fā)揮空間,增大了IP的靈活性和適應(yīng)性。其主要缺點是在一定程度上使后續(xù)工序無法適應(yīng)整體設(shè)計,從而需要一定程度的軟 IP修正,在性能上也不可能獲得全面的優(yōu)化。

因此,在AD9361參考設(shè)計中給出的IP核全為軟IP內(nèi)核

4.2 硬件設(shè)計

打開Vivado,打開…\hdl-hdl_2014_r2\projects\fmcomms2\zc702路徑下的AD9361的Vivado工程文件fmcomms2_zc702.xpr

點擊右側(cè)導(dǎo)航欄里的IP Integrator—Open Block Design

打開ADI公司給的AD9361的參考設(shè)計IP核框圖,每個藍(lán)色方塊即為硬件部分的各個IP核,如8所示的部分(可放大觀看),該部分為AD9361 Core和DMA控制器部分(其余可在Vivado中查看)。

各IP核的源Verilog HDL代碼在hdl-hdl_2014_r2\library中,這些設(shè)計就是7中左半部分的設(shè)計

8 AD9361參考設(shè)計IP核框圖(DMA和AD9361部分)


五、AD9361 參考設(shè)計說明(PS側(cè)軟件部分)

5.1 AD9361 no-OS Software 概述

AD9361 no-OS Software是ADI公司提供的AD9361的軟件部分,運行在CPU(也就是Zynq的ARM)中,該程序為裸機程序(即無操作系統(tǒng)的程序),可以AD9361各個參數(shù)進(jìn)行配置,對PL中的一些寄存器進(jìn)行讀寫,控制發(fā)送數(shù)據(jù)源,控制DMAC(DMA控制器)對發(fā)送和接收的數(shù)據(jù)進(jìn)行傳輸,從而實現(xiàn)AD9361的基本功能:對數(shù)據(jù)的接收、處理和發(fā)送。整個程序是使用C語言來完成的。

5.2 AD9361 no-OS Software 頂層目錄說明

在ADI官網(wǎng)可以下載到no-OS-Software的源碼,下載到的源碼包含了很多ADI的收發(fā)器, 1列出的是AD9361的no-OS-Software中的文件和文件夾目錄結(jié)構(gòu)

目錄

子文件

解釋說明

console_commands

command.h 、command.c

包含用于控制AD9361的命令行的文件

console.h、console.c

包含用于命令行操作、顯示等的與平臺串口相關(guān)的文件

platform_altera


Altera平臺的相關(guān)文件(使用Xilinx平臺無需該文件)

platform_generic


通用平臺的相關(guān)文件(使用Xilinx平臺無需該文件)

platform_linux


Linux平臺相關(guān)的文件(使用Xilinx平臺無需該文件)

platform_xilinx

adc_core.h、adc_core.c

模數(shù)轉(zhuǎn)換模塊控制文件,包括模塊的初始化和數(shù)據(jù)傳輸?shù)?/span>

dac_core.h、dac_core.c

模數(shù)轉(zhuǎn)換模塊控制文件,包括模塊的初始化和數(shù)據(jù)傳輸?shù)?/span>

Platform.c、platform.h

Xilinx平臺一些驅(qū)動文件

parameters.h

以上文件所用到的參數(shù)的宏定義文件

ad9361.c


AD9361的驅(qū)動文件,比如增益控制函數(shù)等

ad9361.h

ad9361_api.c


AD9361應(yīng)用編程接口驅(qū)動文件,比如AD9361的初始化函數(shù)

ad9361_api.h

common.h


通用驅(qū)動文件,包含時鐘結(jié)構(gòu)體和通用宏定義

config.h


AD9361和 AD9361 API的配置文件

main.c


整個軟件部分的main函數(shù)文件

util.c


util驅(qū)動文件

util.h


1AD9361 no-OS-Software源碼目錄結(jié)構(gòu)


5.3 main.c文件

main.c文件是main函數(shù)所在文件,是整個程序的入口。

main.c文件的開頭是需要條件編譯的頭文件和宏定義。

		

/*****************************************************************************

		

Include Files *****************************************************************************/9

		

#include"config.h"

		

#include"ad9361_api.h"

		

#include"parameters.h"

		

#include"platform.h"

		

#ifdef CONSOLE_COMMANDS

		

#include"command.h"

		

#include"console.h"

		

#endif

		

#ifdef XILINX_PLATFORM

		

#include<< span="">xil_cache.h>

		

#endif

		

#ifdefined XILINX_PLATFORM ||defined LINUX_PLATFORM

		

#include"adc_core.h"

		

#include"dac_core.h"

		

#include"adc_interrupt.h"

		

#include"SD_card.h"

		

#endif



因此,在使用時需要根據(jù)情況在程序最開始對一些參數(shù)進(jìn)行宏定義,

使用ZC702需要添加語句:

#define XILINX_PLATFORM

如需使用命令行控制AD9361,需要添加語句:

#define CONSOLE_COMMANDS

如需使用ADC的數(shù)據(jù)捕獲功能,需要添加語句:

#defineCAPTURE_SCRIPT


然后是命令行函數(shù)所用到的一些變量的定義、對AD9361初始化所需要參數(shù)的變量定義和AD9361接收和發(fā)射端濾波器的定義。

AD9361_InitParam default_init_param ={

/* Identification number */

0, //id_no;

/* Reference Clock */

40000000UL,//reference_clk_rate

/* Base Configuration */

0, //two_rx_two_tx_mode_enable *** adi,2rx-2tx-mode-enable

1, //one_rx_one_tx_mode_use_rx_num *** adi,1rx-1tx-mode-use-rx-num

1, //one_rx_one_tx_mode_use_tx_num *** adi,1rx-1tx-mode-use-tx-num

1, //frequency_division_duplex_mode_enable *** adi,frequency-division-duplex-mode-enable

0, //frequency_division_duplex_independent_mode_enable *** adi,frequency-division-duplex-independent-mode-enable

0, //tdd_use_dual_synth_mode_enable *** adi,tdd-use-dual-synth-mode-enable

0, //tdd_skip_vco_cal_enable *** adi,tdd-skip-vco-cal-enable

0, //tx_fastlock_delay_ns *** adi,tx-fastlock-delay-ns

0, //rx_fastlock_delay_ns *** adi,rx-fastlock-delay-ns

0, //rx_fastlock_pincontrol_enable *** adi,rx-fastlock-pincontrol-enable

0, //tx_fastlock_pincontrol_enable *** adi,tx-fastlock-pincontrol-enable

0, //external_rx_lo_enable *** adi,external-rx-lo-enable

0, //external_tx_lo_enable *** adi,external-tx-lo-enable

5, //dc_offset_tracking_update_event_mask *** adi,dc-offset-tracking-update-event-mask

6, //dc_offset_attenuation_high_range *** adi,dc-offset-attenuation-high-range


之后的部分是整個軟件部分的主函數(shù),主函數(shù)的程序流程圖如6所示(默認(rèn)定義了XILINX_PLATFORM常量):


9 main函數(shù)流程圖


DAC模塊初始化使用的函數(shù)為dac_init函數(shù)

ADC數(shù)據(jù)捕獲使用到的函數(shù)為adc_capture函數(shù)

這兩個函數(shù)是控制數(shù)據(jù)傳輸?shù)闹饕瘮?shù),下面的章節(jié)將會詳細(xì)介紹這兩個函數(shù)。

5.4 dac_init函數(shù)

dac_init為DAC模塊初始化函數(shù),也負(fù)責(zé)DMA傳輸部分,DDR中的數(shù)據(jù)送給AD9361。

dac_init函數(shù)的函數(shù)聲明為:

第一個參數(shù)struct ad9361_rf_phy *phy 為指向AD9361的射頻設(shè)備結(jié)構(gòu)體的指針。

第二個參數(shù)uint8_t data_sel為 需要發(fā)送的數(shù)據(jù)源的選擇:

enum dds_data_select

{

DATA_SEL_DDS,

DATA_SEL_SED,

DATA_SEL_DMA,

DATA_SEL_ZERO, /* OUTPUT 0 */

DATA_SEL_PN7,

DATA_SEL_PN15,

DATA_SEL_PN23,

DATA_SEL_PN31,

DATA_SEL_LB, /* loopback data (ADC) */

DATA_SEL_PNXX, /* (Device specific) */

USER_DATA,

};


0表示發(fā)送DDS生成的信號;

2表示通過DMA發(fā)送DDR中的信號數(shù)據(jù),該數(shù)據(jù)在dac_core.c開頭定義;

3表示發(fā)送全0信號;

4-7表示發(fā)送隨機數(shù)信號;

8表示發(fā)送從ADC中接收到的數(shù)據(jù)信號;

9表示發(fā)送選定設(shè)備的信號;

10為用戶數(shù)據(jù)(需要在函數(shù)中添加代碼

第三個參數(shù)為DMA設(shè)置的標(biāo)準(zhǔn)位,0表示設(shè)置;1表示不設(shè)置。


DMA傳輸支持2維傳輸(即按行列傳輸),但是目前只需要一維傳輸,因此,在源代碼里向AXI_DMAC_REG_SRC_ADDRESSAXI_DMAC_REG_Y_LENGTH寫入0表示只使用一維傳輸。



在傳輸用戶數(shù)據(jù)時,也應(yīng)該在將用戶數(shù)據(jù)進(jìn)行調(diào)制后,參照以上代碼,使用DMA方式發(fā)送數(shù)據(jù)



5.5 adc_capture函數(shù)

adc_capture函數(shù)為數(shù)據(jù)捕獲函數(shù),也負(fù)責(zé)DMA傳輸數(shù)據(jù)到 DDR

adc_init函數(shù)的函數(shù)聲明為:

第一個參數(shù)size為要捕獲的數(shù)據(jù)量(個);

第二個參數(shù)為start_adress存儲捕獲數(shù)據(jù)的目的地址。


9為dac_init函數(shù)的流程圖:


12 adc_captur函數(shù)流程圖



源代碼如下:

int32_t adc_capture(uint32_t size, uint32_t start_address)

{

uint32_t reg_val;

if(adc_st.rx2tx2)

{

length =(size *8);

}

else

{

length =(size *4);

}


上圖的源碼為adc_capture函數(shù)的第一部分——數(shù)據(jù)單位轉(zhuǎn)換部分,adc_capture函數(shù)的第一個參數(shù)size為用戶想要捕獲到的數(shù)據(jù)量,單位是“”,但是在DMAC的很多寄存器中,比如AXI_DMAC_REG_X_LENGTH寄存器,其中的數(shù)值為傳輸?shù)臄?shù)據(jù)的總字節(jié)數(shù),單位為“字節(jié)”,因此需要將size單位轉(zhuǎn)換為“字節(jié)”。如果打開了雙通道,那么捕獲的數(shù)據(jù)數(shù)據(jù)會占用雙倍的存儲空間。

		

adc_dma_write(AXI_DMAC_REG_CTRL, 0x0); //初始化DMA通道

adc_dma_write(AXI_DMAC_REG_CTRL, AXI_DMAC_CTRL_ENABLE);//DMA通道使能


adc_dma_write(AXI_DMAC_REG_IRQ_MASK,0x0);//取消屏蔽.


//adc_dma_read(AXI_DMAC_REG_TRANSFER_ID, &transfer_id);//讀取下一個傳輸?shù)腎D號(5位)


adc_dma_read(AXI_DMAC_REG_IRQ_PENDING,&reg_val); /*讀取中斷狀態(tài):一個傳輸完成后 END_OF_TRANSFER 即 [1]位 置 1,

一個傳輸加入隊列后 START_OF_TRANSFER 即 [0]位 置 1 */


adc_dma_write(AXI_DMAC_REG_IRQ_PENDING, reg_val);//寫入中斷狀態(tài)寄存器,使中斷寄存器初始化


adc_dma_write(AXI_DMAC_REG_DEST_STRIDE,0x0);//設(shè)置目的地址中從一行的開始和下一行之間的字節(jié)數(shù)

adc_dma_write(AXI_DMAC_REG_X_LENGTH, length -1);//傳輸?shù)淖止?jié)數(shù)

adc_dma_write(AXI_DMAC_REG_Y_LENGTH,0x0);//傳輸?shù)男袛?shù)



adc_dma_write(AXI_DMAC_REG_DEST_ADDRESS, start_address);//設(shè)置傳輸?shù)哪康牡刂?destination address)

adc_dma_write(AXI_DMAC_REG_START_TRANSFER,0x1);//加入傳輸隊列


上圖為adc_capture函數(shù)的第二部分——DMA配置部分,其中與ADC模塊相比不同的寄存器為:

AXI_DMAC_REG_IRQ_MASK:中斷屏蔽寄存器,[1]位為EOT(End Of Transfer)IRQ,[0]位為SOT(Start Of Transfer) IRQ,哪一位置1,就表示那一位的中斷請求被屏蔽;

AXI_DMAC_REG_IRQ_PENDING:讀取中斷狀態(tài):一個傳輸完成后 END_OF_TRANSFER 即 [1] 位 置 1,一個傳輸加入隊列后 START_OF_TRANSFER 即 [0] 位 置 1 */

AXI_DMAC_REG_TRANSFER_ID:該寄存器的數(shù)值為下一次傳輸?shù)?/span>ID號。

//Wait until the new transfer is queued.

do

{

adc_dma_read(AXI_DMAC_REG_START_TRANSFER,&reg_val);

}

while(reg_val ==1);*/


// Wait until the current transfer is completed.

do

{

adc_dma_read(AXI_DMAC_REG_IRQ_PENDING,&reg_val);

}

while(1);//reg_val !=0011b*/


//Wait until the transfer with the ID transfer_id is completed.

do

{

adc_dma_read(AXI_DMAC_REG_TRANSFER_DONE,&reg_val);//讀取傳輸完成的ID號

}

while((reg_val &(1<<< span=""> transfer_id))!=(1<<< span=""> transfer_id));


上圖為上圖為adc_capture函數(shù)的第三部分——判斷與等待

1.等待,直到一個新的傳輸加入傳輸隊列

讀取AXI_DMAC_REG_START_TRANSFER寄存器的值,值為1時循環(huán),值為0時跳出循環(huán)。

之前已經(jīng)向AXI_DMAC_REG_START_TRANSFER寫入了1,在這時判斷AXI_DMAC_REG_START_TRANSFER的值,若是1,表示新的傳輸仍然在排隊,若是0,表示新的傳輸已經(jīng)開始。

2.等待,直到目前的傳輸完成。

讀取AXI_DMAC_REG_IRQ_PENDING的值,當(dāng)傳輸進(jìn)行時,AXI_DMAC_REG_IRQ_PENDING[0]位SOT位始終為1,當(dāng)傳輸完成時,[1]為EOT位由0置為1,之后兩位都會被清0。因此,當(dāng)AXI_DMAC_REG_IRQ_PENDING的值為3時,表示傳輸完成。

3.等待,直到ID為transfer_id的傳輸完成

這一步是為了驗證之前設(shè)置的傳輸已經(jīng)完成。

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
關(guān)閉