0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

【ZYNQ Ultrascale+ MPSOC FPGA教程】第二十一章PS端UART读写控制

FPGA技术专栏 来源:芯驿电子科技 作者:芯驿电子科技 2021-01-27 09:25 次阅读

原创声明:

本原创教程由芯驿电子科技(上海)有限公司(ALINX)创作,版权归本公司所有,如需转载,需授权并注明出处。

适用于板卡型号:

AXU2CGA/AXU2CGB/AXU3EG/AXU4EV-E/AXU4EV-P/AXU5EV-E/AXU5EV-P /AXU9EG/AXU15EG

vivado工程目录为“ps_hello/vivado”

vitis工程目录为“ps_uart/vitis”

软件工程师工作内容

以下为软件工程师负责内容。

在前面的实验中,大家或多或少会发现有打印信息的情况,主要是调用”xil_printf”或”printf”,但是通过什么打印信息呢?我们还记得打印信息之前设置了串口,是的,确实是串口,但这些函数是如何调用串口呢?其实我们可以在”xil_printf”函数定义中看到,注意outbyte函数就是调用UART打印的。

pIYBAGAKMUuAE642AABF7ek9_1k937.jpg

再进入outbye的函数,即可看到调用了PS端UART的函数,得以在串口中显示。

o4YBAGAKMUyAQy2HAAATNltDNzc995.jpg

除了打印信息之外,如果我们想用UART进行数据传输呢?本章便来介绍PS端UART的读写控制,实验中,每隔1S向外发送一串字符,如果收到数据,产生中断,并将收到的数据再发送出去。

1.UART模块介绍

以下是UART模块的结构图,TxFIFO和RxFIFO都为64字节。

pIYBAGAKMU2AFO_lAABhvyPhSRs691.jpg

下图为UART的四种模式

o4YBAGAKMU6AWnnUAACQwPdsNjY707.jpg

可以用remote loopback mode测试物理电路是否正常,使用API函数XUartPs_SetOperMode

pIYBAGAKMU6AMv5NAAAJmCQvXFQ422.jpg

2. Vitis程序开发

1) 本实验流程如下:

主程序流程:

UART初始化设置UART模式设置数据格式设置中断发送UART数据检查是否收到数据如果收到,发送收到的数据,如果没有,等待1秒钟,继续发数据

中断程序流程:

中断初始化设置接收FIFO trigger中断寄存器,设置为1,即收到一个数据就中断打开接收trigger中断REMPTY及接收FIFO空中断RTRIG

中断服务程序:

判断状态寄存器是trigger还是empty清除相应中断trigger状态读取RxFIFO数据,empty状态将接收标志ReceivedFlag置1

2) 在main函数中进行模式的设置,可以直接调用函数,设置为正常模式,数据格式设置为波特率115200,数据8bit,无校验位,1bit停止位。UartFormat定义在uart_parameter.h中。

o4YBAGAKMU-ACf61AAAOI7mukpI580.jpgpIYBAGAKMU-AMfRBAAAJEGUIcIg527.jpg

3) 中断控制器程序初始化可参考按键中断方式,用法类似。

4) 在main函数中将trigger level设置为1,打开trigger和empty中断。

pIYBAGAKMVCAEE96AAATs4GOcr4038.jpg

5) 数据的发送和接收函数参考了UARTPS的XUartPs_Send和XUartPs_Rev函数,但它们会打开某些中断,不符合预期,因此做了修改。

o4YBAGAKMVCALvq_AAALxC_WozQ403.jpg

在接收缓存中设置了最大2000字节的缓冲,可以根据需要修改。

pIYBAGAKMVCATG_fAAAF-3VZxC8477.jpgo4YBAGAKMVGAG32pAAAJV8dExoI017.jpg

6) 在中断服务程序中,将ReceivedBufferPtr指针地址和ReceivedByteNum加上接收到的个数,如果FIFO空了,将ReceivedFlag置为1。同时向中断状态寄存器写数据,清除中断。

pIYBAGAKMVGAKwE1AAAy-FTpkJI285.jpgo4YBAGAKMVKAeUWaAACJJepSgyY082.jpgUg1085 UART清除中断

7) 在main函数中,将ReceivedFlag和ReceivedByteNum清零,ReceivedBufferPtr指针复位。

pIYBAGAKMVKAbZm2AAAQ5CKjXOg111.jpg

8) Uart发送函数中,判断TxFIFO是否满,否则继续发送,直到计数达到NumBytes

o4YBAGAKMVOAGQ4YAAAt4eJnVh0967.jpg

9) Uart接收函数中,判断接收RxFIFO是否为空,否则继续读数据,NumBytes为需要读取的数据个数,但如果接收的FIFO空了,计数没有达到这个值,也会结束此函数。

pIYBAGAKMVOATuVRAAA6HV2Y5bI060.jpg

10) 除了自己写程序外,还可以从system.mss中导入模块的例子,参考Xilinx提供的程序,方便学习。

o4YBAGAKMVSAKmcbAAAafnGEnYk848.jpg

3. 板上验证

1) 接下来下载程序

pIYBAGAKMVSAKqr_AACaz4PUyhQ089.jpg

2) 打开工程目录下的串口调试工具

o4YBAGAKMVWAAXJSAAAGjubltm0668.jpg

3) 设置好参数如下,打开串口,即可看到打印信息。

pIYBAGAKMVWAHkT1AABOBEwiPT8185.jpg

4) 在发送区填入数据,点击手动发送,即可看到接收区的数据。

o4YBAGAKMVaALpFtAABS-x55pPQ175.jpg

4. 总结

本章学习了UART的发送与接收,以及中断的使用,希望大家能养成良好的习惯,多看文档,理解原理,能对系统的认识有很大提高。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1624

    文章

    21608

    浏览量

    601073
  • 串口
    +关注

    关注

    14

    文章

    1540

    浏览量

    76015
  • uart
    +关注

    关注

    22

    文章

    1218

    浏览量

    101091
  • Zynq
    +关注

    关注

    9

    文章

    607

    浏览量

    47096
  • MPSoC
    +关注

    关注

    0

    文章

    195

    浏览量

    24227
收藏 人收藏

    评论

    相关推荐

    明德扬视频分享点拨FPGA课程--第二十一章  矩阵键盘工程

    第二十一章矩阵键盘工程1. 矩阵扫描模块2. 数码显示模块3. for循环的使用4. 统计模块5. generate的使用6. 进制转换模块7. 顶层模块http://yunpan.cn/cjZTiDA9pY56x访问密码 c359
    发表于 11-09 08:47

    如何调试Zynq UltraScale+ MPSoC VCU DDR控制

      如何调试Zynq UltraScale+ MPSoC VCU DDR控制器  Zynq UltraS
    发表于 01-07 16:02

    如何调试Zynq UltraScale+ MPSoC VCU DDR控制

    如何调试 Zynq UltraScale+ MPSoC VCU DDR 控制器?
    发表于 01-22 06:29

    ZYNQ Ultrascale+ MPSOC FPGA教程

    ZYNQ Ultrascale+ MPSOC FPGA教程
    发表于 02-02 07:53

    第二十一讲 组合逻辑电路中的竞争冒险

    第二十一讲 组合逻辑电路中的竞争冒险 6.7.1 竞争冒险现象及其产生的原因一、竞争、冒险1.理想情况2.实际情况3.竞
    发表于 03-30 16:25 3035次阅读
    <b class='flag-5'>第二十一</b>讲 组合逻辑电路中的竞争冒险

    模拟电路网络课件 第二十一节:场效应管与BJT放大电路的比较

    模拟电路网络课件 第二十一节:场效应管与BJT放大电路的比较 场效应管放大电路与BJT放大电路的性能比较
    发表于 09-17 11:01 1230次阅读
    模拟电路网络课件 <b class='flag-5'>第二十一</b>节:场效应管与BJT放大电路的比较

    闲话Zynq UltraScale+ MPSoC(连载1)

    Zynq-7000,这款SoC功能显得更加强劲:最显著的变化是新加入了GPU和视频编解码器,PS的高速接口更加丰富。按照Xilinx官方的说法,Zynq
    发表于 02-08 08:24 720次阅读
    闲话<b class='flag-5'>Zynq</b> <b class='flag-5'>UltraScale+</b> <b class='flag-5'>MPSoC</b>(连载1)

    闲话Zynq UltraScale+ MPSoC(连载5)

    作者:Hello,Panda Part3 I/O资源 和Zynq-7000相比较,Zynq UltraScale+ 增强了PS的IO性能;
    发表于 02-08 08:29 692次阅读
    闲话<b class='flag-5'>Zynq</b> <b class='flag-5'>UltraScale+</b> <b class='flag-5'>MPSoC</b>(连载5)

    Zynq UltraScale+ MPSoC的发售消息

    Zynq®UltraScale+MPSoC,现已开始发售。视频向您重点介绍了Xilinx UltraScale +产品组合的第一位成员
    的头像 发表于 11-27 06:47 3552次阅读

    米尔科技Zynq UltraScale+ MPSoC技术参考手册介绍

    Zynq UltraScale+ MPSoC是Xilinx推出的第二代多处理SoC系统,在第一代Zynq-7000的基础上做了全面升级,在单
    的头像 发表于 11-18 11:03 3089次阅读
    米尔科技<b class='flag-5'>Zynq</b> <b class='flag-5'>UltraScale+</b> <b class='flag-5'>MPSoC</b>技术参考手册介绍

    ZYNQ Ultrascale+ MPSOC FPGA教程】第一章 MPSoC芯片介绍

    Zynq UltraScale+ MPSoC系列是Xilinx第二Zynq平台。其亮点在于FPGA
    发表于 01-31 07:43 17次下载
    【<b class='flag-5'>ZYNQ</b> <b class='flag-5'>Ultrascale+</b> <b class='flag-5'>MPSOC</b> <b class='flag-5'>FPGA</b>教程】第<b class='flag-5'>一章</b> <b class='flag-5'>MPSoC</b>芯片介绍

    如何调试 Zynq UltraScale+ MPSoC VCU DDR 控制器?

    Zynq UltraScale+ MPSoC VCU DDR 控制器是一款专用 DDR 控制器,只支持在
    发表于 02-23 06:00 15次下载
    如何调试 <b class='flag-5'>Zynq</b> <b class='flag-5'>UltraScale+</b> <b class='flag-5'>MPSoC</b> VCU DDR <b class='flag-5'>控制</b>器?

    米尔电子zynq ultrascale+ mpsoc底板外设资源清单分享

    米尔电子推出的国内首款zynq ultrascale+ mpsoc平台核心板(及开发板):MYC-CZU3EG吸引了人工智能、工业控制、嵌入式视觉、ADAS、算法加速、云计算、有线/无
    发表于 01-07 15:20 3次下载
    米尔电子<b class='flag-5'>zynq</b> <b class='flag-5'>ultrascale+</b> <b class='flag-5'>mpsoc</b>底板外设资源清单分享

    ZYNQ Ultrascale+ MPSoC系列FPGA芯片设计

    基于 Xilinx 公司ZYNQ Ultrascale+ MPSoC系列 FPGA 芯片设计,应用于工厂自动化、机器视觉、工业质检等工业领域
    发表于 11-02 14:35 1542次阅读

    Zynq UltraScale+ MPSoC的隔离设计示例

    电子发烧友网站提供《Zynq UltraScale+ MPSoC的隔离设计示例.pdf》资料免费下载
    发表于 09-13 11:28 3次下载
    <b class='flag-5'>Zynq</b> <b class='flag-5'>UltraScale+</b> <b class='flag-5'>MPSoC</b>的隔离设计示例