S03_CH02_AXI_DMA PL发送数据到PS

1.1概述

本课程的设计原理分析。

本课程循序渐进,承接《S03_CH01_AXI_DMA_LOOP 环路测试》这一课程,在DATA FIFO端加入FPGA代码,通过verilog 代码对FIFO写。其他硬件构架和《S03_CH01_AXI_DMA_LOOP 环路测试》一样。

《S03_CH01_AXI_DMA_LOOP 环路测试》课程中,详解讲解了工程步骤的创建,本章开始,一些简单的操作步骤将会省去。

1.2系统构架框图

在上图中,红色标记部分是和前面课程有稍微差异的部分。读者需要好好注意下。

下面看下关键模块的设置

1.2.1 ZYNQ IP的设置

增一路FCK_CLK1 为100MHZ(也可以设置其他频率)并且引出到外部提供verilog编程时钟。

双击S_AXIS设置参数

设置如下

双击FIFO 进行如下设置

由于只有写DMA通道,因此不用勾选读DMA通道

既然只用到了DMA写通道,也就只要使用1路中断资源。


1.3 PS部分

相对于《S03_CH01_AXI_DMA_LOOP 环路测试》中的代码,本章代码只有DMA的接收部分。在main.c源码中,实现了数据DMA的测速,并且通过OLED显示出来。为了实现测试,有增加了定时间中断,定时器每过0.5S中断一次。

中断初始化函数,如下

表1-3-1 init_intr_sys函数

int init_intr_sys(void)

{

DMA_Intr_Init(&AxiDma,0);//initial interrupt system

Timer_init(&Timer,TIMER_LOAD_VALUE,0);

Init_Intr_System(&Intc); // initial DMA interrupt system

Setup_Intr_Exception(&Intc);

DMA_Setup_Intr_System(&Intc,&AxiDma,TX_INTR_ID,RX_INTR_ID);//setup dma interrpt system

Timer_Setup_Intr_System(&Intc,&Timer,TIMER_IRPT_INTR);

DMA_Intr_Enable(&Intc,&AxiDma);

}

DMA读测速的部分的原理是计数DMA读传输的次数,然后每过2秒,计算一次速度。通过OLED显示测速。

表1-3-2 测试代码

if(RxDone)

{

RxDone=0;

RX_ready=1;

RX_success++;

}

if(TxDone)

{

TxDone=0;

TX_ready=1;

TX_success++;

}

if(usec==2)

{

usec=0;

sprintf(oled_str,"RX_cnt=%d",RX_success);

xil_printf("%s\r\n",oled_str);

print_message(oled_str,0);

speed_rx = MAX_PKT_LEN*RX_success/1024/1024;

sprintf(oled_str,"RX_sp=%.2fMB/S",speed_rx);

xil_printf("%s\r\n",oled_str);

print_message(oled_str,1);

sprintf(oled_str,"TX_cnt=%d",TX_success);

xil_printf("%s\r\n",oled_str);

print_message(oled_str,2);

speed_tx = (MAX_PKT_LEN)*TX_success/1024/1024;

sprintf(oled_str,"TX_sp=%.2fMB/S",speed_tx);

xil_printf("%s\r\n",oled_str);

print_message(oled_str,3);

RX_success=0;

TX_success=0;

}

定时器中断在第二季《S02_CH08_ ZYNQ 定时器中断实验》已经详细讲解过,至于DMA中断《S03_CH01_AXI_DMA_LOOP 环路测试》中也已经详细讲解,不在过多复述。

1.4 测试结果

S03_CH02_AXI_DMA PL发送数据到PS的更多相关文章

  1. STM32 使用 printf 发送数据配置方法 -- 串口 UART, JTAG SWO, JLINK RTT

    STM32串口通信中使用printf发送数据配置方法(开发环境 Keil RVMDK) http://home.eeworld.com.cn/my/space-uid-338727-blogid-47 ...

  2. Java使用UDP发送数据到InfluxDB

    最近在做压测引擎相关的开发,需要将聚合数据发送到InfluxDB保存以便实时分析和控制QPS. 下面介绍对InfluxDB的使用. 什么是InfluxDB InfluxDB是一款用Go语言编写的开源分 ...

  3. 【原生态】Http请求数据 与 发送数据

    今天项目组小弟居然问我怎么用java访问特定的地址获取数据和发送请求 Http请求都是通过输入输出流来进行操作的,首先要制定GET或者POST,默认是GET,在安全和数据量较大情况下请使用post 根 ...

  4. POST在发送数据的时候使用的是HTTP命令

    防止SQL注入 SQL(结构化查询语言)是基于美国国家标准学会(ANSI)标准,并作为共同的语言与数据库通信.每个数据库系统增加了一些专有功能到基本的ANSI SQL. SQL注入是一门将制作好的SQ ...

  5. sim800 gprs发送数据的AT流程

    switch(send_flag) { case 1: uart_send(&huart4,"AT\r\n",4); //AT break; case 2: uart_se ...

  6. 通过 UDP 发送数据的简单范例

    package j2se.core.net.udp; import java.io.IOException;import java.net.DatagramPacket;import java.net ...

  7. STM32移植RT-Thread后的串口在调试助手上出现:(mq != RT_NULL) assert failed at rt_mq_recv:2085和串口只发送数据不能接收数据问题

    STM32移植RT-Thread后的串口在调试助手上出现:(mq != RT_NULL) assert failed at rt_mq_recv:2085的问题讨论:http://www.rt-thr ...

  8. Linux内核--网络栈实现分析(八)--应用层发送数据(下)

    本文分析基于Linux Kernel 1.2.13 原创作品,转载请标明http://blog.csdn.net/yming0221/article/details/7547826 更多请查看专栏,地 ...

  9. C#串口通信—向串口发送数据,同步接收返回数据

    最近写C#串口通信程序,系统是B/S架构.SerialPort类有一个DataReceived事件,用来接收串口返回的数据,但这种方式在C/S架构下很好用,但B/S就不好处理了.所以写了一个同步模式接 ...

随机推荐

  1. GitHub排名TOP30的机器学习开源项目/贪心学院

    对于机器学习者来说,阅读开源代码并基于代码构建自己的项目,是一个非常有效的学习方法.看看以下这些Github上平均star为3558的开源项目,你错了哪些? 1. FastText:快速文本表示和文本 ...

  2. CISCO实验记录八:ACL访问控制

    1.使用ACL实现免ping #access-list 100 deny icmp 192.168.0.1 0.0.0.0 192.168.1.2 0.0.0.0 #access-list 100 p ...

  3. 网络文件共享服务—NFS服务

    NFS服务 NFS:Network File System 网络文件系统,基于内核的文件系统: Sun公司开发,通过使用NFS,用户和程序可以像访问本地文件一样访问远端系统上的文件,基于RPC(Rem ...

  4. idea内存不足或过大闪退

    昨天在码云找了个开源后台项目https://gitee.com/shuzheng/zheng,各种修改后终于跑起来了, 运行没多久就提示内存不足,安装目录配置虚拟机最大可用内存为512M idea弹窗 ...

  5. win10windows无法创建快捷方式 请检查磁盘

      这个是因为文件没有权限造成的   打开"我的电脑",菜单栏里选择"工具"-"文件夹选项"-"查看",把里面" ...

  6. Linux中查看系统资源占用情况的命令

    用 'top -i' 看看有多少进程处于 Running 状态,可能系统存在内存或 I/O 瓶颈,用 free 看看系统内存使用情况,swap 是否被占用很多,用 iostat 看看 I/O 负载情况 ...

  7. C++ STL 排列 next_permutation prev_permutation

    #include <iostream>#include <algorithm>#include <vector> using namespace std; int ...

  8. 阶段5 3.微服务项目【学成在线】_day03 CMS页面管理开发_02-自定义查询页面-服务端-接口开发

    在Service中实现自定义查询 StringUtils.isNotEmpty()是这个包下的org.apache.commons.lang3.StringUtils; 再设置其他的条件 定义Exam ...

  9. Java 检查IPv6地址的合法性

    Java 检查IPv6地址的合法性 由于IPv4资源即将耗尽,IPv6将要正式启用,这是大势所趋. 一些现有的服务和应用逐步要对IPv6支持,目前还处在过渡阶段. 提前了解一些IPv6的知识,还是有必 ...

  10. 网页是如何实现从剪贴板从读取图片并上传到server的

    代码比较简单,原理更简单,不多言请直接看代码. <!DOCTYPE html> <html> <head> <meta charset="UTF-8 ...