基于ZYNQ的uart传输任意长度的数据

1、参考

UG585
网络笔记
参考:ZYNQ进阶之路14–PS端uart串口接收不定长数据

2、理论知识

参见上一次实验:基于ZYNQ 的UART中断实验之串口写数据到DDR3中

3、实验目的

基于ZYNQ 的UART中断实验,这里在上一次实验的基础上将发送固定的数据改为可以发送不定的数据。

4、实验过程

建立工程,设置并初始化串口中断,在运行程序之后,如果串口接收的数据达到了RXFIFO触发的中断则会产生中断,zynq会将数据搬移到一块recvbuffer中,另外如果在接收到一定的数据之后(没有达到rxfifo中断level),如果在规定的等待一定时间内还没有新的数据接收到则也会产生中断通知ZYNQ去读取,这也标志本次数据已经完全读取完了。可以处理数据了。

5、实验平台

Microphase ZUS zynq7020 开发板。 串口使用 uart1[48,49]. DDR选择 MT41J256M16 RE-125,32bit. BANK1 = 1.8v.

6、Vivado 建立工程

block design 如下:
在这里插入图片描述

7、SDK的工程程序

总共有5个文件。三个.c两个.h。将UART 和 intr文件单独分开,更合理。
sys_intr,h

/*
 * sys_intr.h
 *
 *  Created on: 2019年8月27日
 *      Author: admin
 */

#ifndef SRC_SYS_INTR_H_
#define SRC_SYS_INTR_H_

#include "xparameters.h"
#include "xil_exception.h"
#include "xdebug.h"
#include "xscugic.h"

#define INTC_DEVICE_ID          XPAR_SCUGIC_SINGLE_DEVICE_ID

int Init_Intr_System(XScuGic * IntcInstancePtr);
void Setup_Intr_Exception(XScuGic * IntcInstancePtr);

#endif /* SRC_SYS_INTR_H_ */

sys_intr.c

/*
 * sys_intr.c
 *
 *  Created on: 2019年8月27日
 *      Author: admin
 */

#include "sys_intr.h"

//---------------------------------------------------------
//                    设置中断异常
//---------------------------------------------------------
void Setup_Intr_Exception(XScuGic * IntcInstancePtr)
{
	Xil_ExceptionInit();
	Xil_ExceptionRegisterHandler(XIL_EXCEPTION_ID_INT,
			(Xil_ExceptionHandler)XScuGic_InterruptHandler,
			(void *)IntcInstancePtr);
	Xil_ExceptionEnable();
}

//---------------------------------------------------------
//                    初始化中断系统
//---------------------------------------------------------
int Init_Intr_System(XScuGic * IntcInstancePtr)
{
	int Status;

	XScuGic_Config *IntcConfig;
	IntcConfig = XScuGic_LookupConfig(INTC_DEVICE_ID);
	if (NULL == IntcConfig) {
		return XST_FAILURE;
	}

	Status = XScuGic_CfgInitialize(IntcInstancePtr, IntcConfig,
					IntcConfig->CpuBaseAddress);
	if (Status != XST_SUCCESS) {
		return XST_FAILURE;
	}
	return XST_SUCCESS;
}


user_uart.h

<
  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Zynq-7020是一款由赛灵思(Xilinx)公司生产的嵌入式处理器。UART是一种常用的串行通信接口协议,用于在计算机和外部设备之间传输数据。 在Zynq-7020使用UART进行数据传输需要以下步骤: 1. 配置UART控制器:首先,需要在Zynq-7020的硬件设计包含UART控制器。然后,通过编程配置控制器的波特率、数据位、奇偶校验位等参数。可以使用软件工具如Xilinx SDK来生成相应的控制器驱动代码,以便在嵌入式系统使用UART。 2. 连接外部设备:将外部设备的UART接口与Zynq-7020的UART控制器相连接。可以使用UART串口线连接外部设备的TX(发送)和RX(接收)引脚到Zynq-7020的相应引脚。确保引脚连接正确,并且信号电平兼容。 3. 通过编程进行数据传输:在嵌入式系统,可以使用UART的驱动函数来进行数据传输。可以通过编程设置UART的发送缓冲区和接收缓冲区,并使用相应的发送和接收函数来发送和接收数据。 4. 错误检测和处理:在UART传输过程,可能会出现错误,例如数据位错误、校验错误等。可以使用错误检测机制来检测并处理这些错误。例如,使用奇偶校验位来检测数据传输过程的错误,并根据需要执行纠错措施。 总之,Zynq-7020的UART传输主要涉及配置UART控制器、连接外部设备、通过编程进行数据传输以及错误检测和处理。通过正确配置和操作,可以实现可靠的数据传输

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值