FPGA
文章平均质量分 86
FPGADesigner
目标成为FPGA开发设计/仿真验证的预备军~
展开
-
学会Zynq(14)UDP发送Hello World
本系列前面几篇介绍了lwIP的相关知识和官方给出的应用实例。从本文开始将进入“实操”阶段,详细介绍Zynq如何使用UDP和TCP两种协议进行通信。建议阅读本文前先了解lwIP相关知识,重复的内容在本文只会简单讲述。总的来说UDP使用起来比TCP要简单的多。上手UDP可能有两个难点:1.对pbuf的操作感到陌生;2.对UDP接收回调的使用不够灵活。其实TCP的回调机制要更复杂,因此我们先以UDP为...原创 2019-03-22 17:31:06 · 20312 阅读 · 37 评论 -
学会Zynq(15)UDP sendto函数的使用
上文从“UDP发送Hello World”的实例体会了lwIP的使用。在user_udp_init函数中我们按照“创建UDP PCB->绑定本地端口->连接远程主机”的顺序完成初始化,发送时使用send函数将数据发送至连接的主机。事实上,udp_connect函数的作用只是设置PCB的远程地址,没有产生任何网络流量。lwIP在UDP通信中还有另一个发送函数udp_sendto,本文在...原创 2019-03-22 19:26:50 · 9012 阅读 · 10 评论 -
学会Zynq(16)UDP echo服务器(接收回调)
前两篇我们学习了UDP的发送,本文学习如何处理接收数据。lwIP为UDP接收提供了回调机制,学会回调机制的使用可以为学习更复杂的TCP回调打下基础。本文使用UDP设计一个echo服务器,开发板将来自所有IP地址和端口的数据原路发送回去,功能和SDK提供的“lwip echo server”例程一样,只不过例程使用的是TCP协议。SDK程序设计主要差别体现在user_udp.c文件中,比起前...原创 2019-03-22 21:37:59 · 9081 阅读 · 8 评论 -
学会Zynq(27)UART中断驱动模式示例
Zynq中的UART支持轮询和中断驱动两种模式。本文给出使用中断驱动模式的例子,完成与24篇中轮询模式下相同的功能,即UART收到8字节数据后执行某项操作。对比之下,体会中断驱动模式的特点。SDK程序设计由于要使用中断系统,我们翻出两个“老伙计”,第14篇中的sys_intr.h和sys_intr.c。将GIC初始化和串口中断初始化分开,这样当设计中有多个中断源时,编写代码会更方便。use...原创 2019-03-30 13:04:40 · 9450 阅读 · 14 评论 -
学会Zynq(17)pbuf操作函数介绍与示例程序
从前面几个UDP的程序实例中我们可以体会到pbuf的重要性,对pbuf的灵活操作也是完成程序功能和提高代码效率的关键。本篇总结lwip的pbuf.c中的常用函数并给出示例程序,其中部分函数和string.h文件中提供的传统内存操作函数功能相同。基于上一篇中的UDP echo服务器设计,主要修改接收回调函数,将收到的数据做一定处理后,用串口打印或网口原路返回的方式查看效果。1. pbuf_st...原创 2019-03-23 17:42:56 · 6537 阅读 · 3 评论 -
学会Zynq(23)XADC报警功能与中断使用示例
上篇中我们简单了解了XADC和其基本使用方法,包括对片内温度和各种电源电压的测量。本文我们将学习XADC的报警功能和中断的使用方法。程序中我们设置温度和VCCPAUX的上、下报警阈值。当超出这个范围时,便进入中断进行报警提示。SDK程序设计由于要使用中断系统,我们翻出两个“老伙计”,第14篇中的sys_intr.h和sys_intr.c。将GIC初始化和串口中断初始化分开,这样当设计中有多个...原创 2019-03-30 18:32:33 · 2671 阅读 · 0 评论 -
学会Zynq(18)TCP发送Hello World(client模式)
TCP的工作机制比UDP要复杂的多。本文介绍用TCP发送“Hello World”的实例,讨论程序设计中几个关键的问题。本文撰写思路假设您已经阅读了本系列前几篇与lwIP、UDP相关的文章,重复性语言不过多描述。本文TCP工作在client模式。TCP内容较多,后面的文章会逐步深入介绍。SDK程序设计按照前文方法,新建工程后启用lwIP 1.4.1库,其余配置都保持默认即可(使用RAW AP...原创 2019-03-24 12:03:52 · 11540 阅读 · 15 评论 -
学会Zynq(19)TCP发送Hello World(server模式)
上文介绍了用TCP发送“Hello World”的实例,工作在client模式下。本文实现同样的功能,但让TCP工作在server模式下。把开发板当作服务器,远程主机为客服端访问服务器,实现被动连接。TCP client和TCP server在lwIP中的连接流程和区别可参考本系列前面与lwIP相关的文章。SDK程序设计大部分代码和上一个实例相同。main函数的while循环中仍然是根据连接...原创 2019-03-24 14:37:48 · 7229 阅读 · 6 评论 -
学会Zynq(20)TCP echo服务器(接收回调)
前两篇我们学习了TCP的发送,本文学习如何处理接收数据。本文使用TCP设计一个echo服务器,开发板将来自所有IP地址和端口的数据原路发送回去,功能和本系列第15篇的UDP echo服务器相同。本文实例与SDK提供的“lwip echo server”例程相比要简化许多,没有使用DHCP协议。本文主要是学习TCP的接收回调,DHCP的内容会在后面专门讲述。SDK程序设计让Zynq工作在TC...原创 2019-03-24 15:37:26 · 5940 阅读 · 12 评论 -
学会Zynq(21)TCP轮询机制(polling)示例
前面我们已经学习了TCP的所有发送、接收和各种回调函数。本文将介绍最后一部分,TCP的轮询机制。在前面TCP发送Hello World的实例中,我们是在main函数的while循环中每隔1s调用一次数据发送函数。本文的实例将利用轮询机制完成同样的功能。SDK程序设计本文根据TCP client模式下发送hello world的程序改编(server模式改动也类似)。主要差别在user_ud...原创 2019-03-24 16:17:11 · 5094 阅读 · 3 评论 -
学会Zynq(28)SPI控制器简介
本文简单介绍Zynq中的SPI控制器。本文将“master”称为“主机”;将“slave”称为“从机”;将“slave slect”从机选择简称为SS。SPI控制器Zynq中的SPI总线控制器能够与各种外设通信,如存储器、温度传感器、压力传感器、模拟转换器、实时时钟、任何支持串行模式的SD卡。SPI控制器可以工作在主机模式、从机模式、舵主模式。Zynq-7000系列包括2个SPI控制器。...原创 2019-03-31 17:57:02 · 12971 阅读 · 6 评论 -
学会Zynq(25)UART的基本使用方法
上文对Zynq中的UART控制器做了简单介绍。从本文开始将以实例的方式详细讲述UART的各种使用方法。本文是UART最基础的使用方法,每秒发送一个“hello world”,实现的功能与printf或xil_printf相同。但后面介绍UART更复杂特性的文章,都是在本文设计的基础上进行改动。SDK程序设计Vivado中配置Zynq时启用开发板提供的UART接口。SDK中user_uart....原创 2019-03-27 19:16:00 · 15024 阅读 · 12 评论 -
学会Zynq(29)SPI协议的理解与初步使用
本上介绍了Zynq中的SPI控制器。本文再系统总结下对SPI协议的理解,加强对其认识。最后再说明Zynq中如果配置和使用SPI控制器。SPI协议概述SPI是串行外设接口(Serial Peripheral Interface)的缩写。标准四根线只使用4根信号线进行通信:MISO(主输入-从输出)、MOSI(主输出-从输入)、时钟SCLK、从机选择信号SS(有时也称为片选信号CS)。 SPI协...原创 2019-04-01 20:27:16 · 25398 阅读 · 12 评论 -
Zynq中lwip“自动协商失败(Auto negotiation error)”的解决办法
博主今天在将lwIP以太网程序移植到RedPitaya(火龙果)开发板上时,发现了一个问题。我们一般都会使用SDK自带的“lwIP Echo Server”例程测试以太网硬件是否正确。然而在Redpitaya开发板上测试时出现了“自动协商失败(Auto negotiation error)”的问题,如下图:其实这是由于硬件的PHY芯片不支持自动协商导致的。《学会Zynq》系列第12篇详细介绍...原创 2019-04-07 17:33:19 · 13407 阅读 · 15 评论 -
学会Zynq(26)UART轮询(poll)模式示例
Zynq中的UART支持轮询和中断驱动两种模式。本文给出两个使用轮询模式的例子,在23篇程序框架的基础上进行改动(贴出主要改动代码,改动很小的地方,如函数接口变化导致函数声明也要改,相信你可以根据我的代码和设计目的自己完成),最后再讨论一下轮询模式的特点。第一个例子改造user_uart.c文件中的Uart_Send函数,将模式设置为本地回环。UART发送数据(小于64个字节,即FIFO长度...原创 2019-03-28 20:20:31 · 5685 阅读 · 4 评论