pynq-z2上uart0的串口通信
pynq-z2是一款PFGA的开发板,就是那个粉粉的板子,还挺贵。现在说如何使用它上面的uart0串口。
所需设备:
pynq-z2,可以传数据的USB线,电脑装有vivado软件
1.新建vivado工程,新建Block Design然后添加ZYNQ、GPIO等IP核,自动连线后可以得到如图的原理图:
- 完成顶层封装,然后综合实现生成比特流文件,导出xsa文件,硬件部分准备完毕
xsa文件:
set_property PACKAGE_PIN R14 [get_ports {led_0[0]}]
set_property PACKAGE_PIN P14 [get_ports {led_0[1]}]
set_property PACKAGE_PIN N16 [get_ports {led_0[2]}]
set_property PACKAGE_PIN M14 [get_ports {led_0[3]}]
set_property IOSTANDARD LVCMOS33 [get_ports {led_0[0]}]
set_property IOSTANDARD LVCMOS33 [get_ports {led_0[1]}]
set_property IOSTANDARD LVCMOS33 [get_ports {led_0[2]}]
set_property IOSTANDARD LVCMOS33 [get_ports {led_0[3]}]
- 在vitis里面新建工程和cpp文件,同时建立BSP文件,编写串口通信代码,包括串口初始化,串口中断初始化以及中断处理函数。设置串口波特率为115200,接收一个bit则触发,中断模式为正常模式。
#include "xgpiops_hw.h"
#include <stdio.h>
#include "xil_printf.h"
#include "xuartps.h"
#include "xparameters.h"
#include "xscugic.h"
#include "xuartps_hw.h"#define LED_BASE XPAR_GPIO_0_S00_AXI_BASEADDR
#define UART_Device_Id XPAR_PS7_UART_0_DEVICE_ID
#define INTC_DEVICE_ID XPAR_SCUGIC_SINGLE_DEVICE_ID
#define UART_INT_IRQ_ID XPAR_XUARTPS_0_INTR
#define INTC XScuGicXUartPs UartPs;
INTC InterruptController;
void uart_init(XUartPs *UartInstPtr,u16 DeviceId)
{XUartPs_Config *Config;//根据ID查找配置信息Config = XUartPs_LookupConfig(DeviceId);//根据配置信息,初始化UARTXUartPs_CfgInitialize(UartInstPtr, Config, Config->BaseAddress);//设置波特率XUartPs_SetBaudRate(UartInstPtr, 115200);//设置触发阈值XUartPs_SetFifoThreshold(UartInstPtr, 1);//改变模式为正常模式XUartPs_SetOperMode(UartInstPtr, XUARTPS_OPER_MODE_NORMAL);
}
//中断处理函数
void UART_intr_handle(void *call_back_ref)
{XUartPs *uart_instance_ptr = (XUartPs *)call_back_ref;u32 rec_data = 0;u32 isr_status;//读取中断寄存器isr_status = XUartPs_ReadReg(uart_instance_ptr->Config.BaseAddress,XUARTPS_IMR_OFFSET);isr_status &= XUartPs_ReadReg(uart_instance_ptr->Config.BaseAddress,XUARTPS_ISR_OFFSET);//中断标志状态位,是否为RxFIFO触发if(isr_status & XUARTPS_IXR_RXOVR){rec_data = XUartPs_RecvByte(XPAR_PS7_UART_0_BASEADDR);XUartPs_WriteReg(uart_instance_ptr->Config.BaseAddress,XUARTPS_ISR_OFFSET,XUARTPS_IXR_RXOVR);//清除中断}XUartPs_SendByte(XPAR_PS7_UART_0_BASEADDR,rec_data);//将接受到的数据返回XGpioPs_WriteReg(LED_BASE,0,rec_data&0x0f);//将接收到的数据后4位写入LED的状态
}void uart_intr_int(INTC *IntcInstancePtr,XUartPs *UartInstancePtr,u16 UartIntrId)
{//UART控制器中断初始化XScuGic_Config *IntcConfig;IntcConfig = XScuGic_LookupConfig(INTC_DEVICE_ID);XScuGic_CfgInitialize(IntcInstancePtr, IntcConfig,IntcConfig->CpuBaseAddress);Xil_ExceptionInit();Xil_ExceptionRegisterHandler(XIL_EXCEPTION_ID_INT,(Xil_ExceptionHandler) XScuGic_InterruptHandler,IntcInstancePtr);XScuGic_Connect(IntcInstancePtr, UartIntrId,(Xil_ExceptionHandler) UART_intr_handle,(void *) UartInstancePtr);XUartPs_SetInterruptMask(UartInstancePtr, XUARTPS_IXR_RXOVR);//设置触发leixXScuGic_Enable(IntcInstancePtr, UartIntrId);//使能中断设备Xil_ExceptionEnable();
}
int main()
{//初始化uart_init(&UartPs,UART_Device_Id);//UART控制器初始化uart_intr_int(&InterruptController, &UartPs,UART_INT_IRQ_ID);//收发数据print("Hello World\n\r");//打印hello World检测程序是否正常运行while(1){}return 0;
}
这样就实现了串口的双向传递,并利用了串口接收的数据去控制LED状态,比如,串口发送0x0a,LED灯就会按1010点亮.
pynq-z2上uart0的串口通信相关推荐
- 如何在ubuntu上用c++串口通信_让你搞懂PLC串口通讯和通讯接口,这东西估计没几个能说清楚~...
电力作业人员在使用PLC的时候会接触到很多的通讯协议以及通讯接口,最基本的PLC串口通讯和基本的通讯接口你都了解吗? 1,什么是串口通讯? 串口是计算机上一种非常通用设备通信的协议(不要与通用串行总线 ...
- 51单片机C语言波特率十六进制,理解51单片机串口通信的波特率与USB转串口通信...
RS232 在我们电脑上,一般都会有一个9针的串行接口,这个串行接口叫做RS232接口,它和UART通信有关联,但是由于现在笔记本电脑不带9针串口,所以和单片机通信越来越趋于使用USB虚拟串口. 九针 ...
- UART串口通信浅谈之(一)--基础概述
通信按照传统的理解就是信息的传输与交换.UART(Universal Asynchronous Receiver/Transmitter,即通用异步收发器)串行通信是单片机最常用的一种通信技术,通常用 ...
- matlab gul介绍及串口通信实现,Matlab - GUl介绍及串口通信实现(转)
新建Blank GUI. 在新建Blank GUI界面中,包含了一般的界面元素,如菜单.按钮.坐标轴.控件等.添加必要的串口通信参数设置按钮. 2 串口数据发送与接收功能实现 2.1 建立串口通信流程 ...
- 计算机串口连接原理,串口通信的原理及USB转串口通信
串口通信的原理 串口通信(SerialCommunicaTIons)的概念非常简单,串口按位(bit)发送和接收字节.尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一 ...
- 9-《电子入门趣谈》第一章_一切从单片机开始-1.3.6串口通信
好消息:请在手机淘宝或闲鱼上搜索"电子入门趣谈",有惊喜哦 :) 我把全本电子入门趣谈的电子版(包括科技提升和理论升华部分,共计50余万字)放到上面开始兜售啦,如果您真的喜欢这本书 ...
- 51单片机串口通信模板_深入理解51单片机串口通信及通信实例
串口通信的原理 串口通信(SerialCommunications)的概念非常简单,串口按位(bit)发送和接收字节.尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一 ...
- 单片机:11.UART串口通信
原文地址:https://blog.csdn.net/Qingzhusshuiyun/article/details/78236798 通信按照传统的理解就是信息的传输与交换.对于单片机来说,通信则与 ...
- RS232与UART串口通信
通信,按照传统的理解就是信息的传输与交换.对于单片机来说,通信则与传感器.存储芯片.外围控制芯片等技术紧密结合,成为整个单片机系统的"神经中枢".没有通信,单片机所实现的功能仅仅局 ...
最新文章
- 苹果公司揭秘首批列入 Swift 源代码兼容性开源项目清单
- 《模式识别导论》特性选择与特征提取概要
- 跟我学 Java 8 新特性之 Stream 流(六)收集
- 自动化日志收集及分析在支付宝 App 内的演进
- hive学习08天-一次hvie面试题
- Java继承知识之基本控制语句(if、switch与穿透现象)
- sqlite 交叉编译-转
- 约瑟夫问题(猴子选大王)
- BZOJ1013球形空间产生器sphere 高斯消元
- c#DataGridView响应键盘事件
- A - Silver Cow Party(最短路径+矩阵转换)
- 我的希捷ST31000340NS,BIOS不认,磁头反复归位,BUSY模式的固件门硬盘修复成功
- MAC 破解百度网盘限速
- 网页截图插件FireShot
- 使用搜狗翻译实现网页多国语言转换
- 高斯消元法原理与Matlab实现
- BIOS中VT虚拟技术已经开启,但任务管理器中仍显示虚拟化已禁用
- surface book 3 结束休眠之后风扇狂转
- 程序员是如何开灯的 白话闲聊mqtt协议
- 使用Centreon监控HP惠普服务器硬件状态
热门文章
- 微信扫码拉起小程序手机号授权跨端登录
- currentstyle 织梦_dede织梦 arclist标签完美支持currentstyle属性
- 世界各地区WIFI 6GHz频段分配现状
- 数据库(SQL Sever) QQ查询
- 2019CCPC江西省赛(重现赛)| 题目 题解
- 开发iPhone应用程序(一)
- 【activiti】activiti环境配置
- SSH服务器拒绝密码,再试一次;PermitRootLogin yes无效问题
- access能接trunk口_ACCESS改trunk口
- 交换机trunk口即便开发所有的vlan,如果没有在交换机上创建对应的vlan也不会进行转发。