zynq使用emio扩展以及uart中断的问题

最近在使用zynq7000系列的ps串口的时候,需要使用到emio,遇到了很多问题,表现就是能够进行发送,接收的时候中断没有办法触发,而当能够触发的时候,也出现了很多奇怪的问题,有时候能够正常使用,有时候又不行。经过查找资料和分析,终于解决了。

EMIO的设置问题

我们在使用EMIO进行扩展的时候,操作方式和MIO差不多,只需要在选择的时候选择EMIO。

然后绑定对应的IO口就好了。
重点是:
如果我们选择的是UART0,那么我们的电平就选择LVCMOS33,如果选择的是UART1,那么就选择LVCMOS18

UART中断的问题

最初我就发现我的中断一直在触发,说明某个中断标志位没有清零,我打印了中断状态位,得到的是9,就只能是TX FIFO空中断和接收fifo触发中断两个,但是很奇怪的是,我并没有打开TX FIFO空中断。后面我发现,其实就是XUartPs_Send函数的问题,这个函数会调用XUartPs_SendBuffer函数,
在这函数内部有这样一段注释,
在这里插入图片描述
如果接收启用了中断,则启用TX FIFO空中断。

解决办法:

在中断处理函数中加上这么一段:通过给它写值来清除中断,这样就解决了

	if(isr_status & (XUARTPS_IXR_TXEMPTY))
	{
		XUartPs_WriteReg(PsUart1.Config.BaseAddress,XUARTPS_ISR_OFFSET, XUARTPS_IXR_TXEMPTY);
	}

以下是完整的中断处理函数

void Ps_Uart1_Intr_Hander(void *CallBackRef){
	u32 recv_num = 0 ;	//接收数据个数
	u32 isr_status=100; 	//中断状态标志

	//读取中断 ID 寄存器,判断触发的是哪种中断
	isr_status = XUartPs_ReadReg(PsUart1.Config.BaseAddress,
	XUARTPS_IMR_OFFSET);
	isr_status &= XUartPs_ReadReg(PsUart1.Config.BaseAddress,
	XUARTPS_ISR_OFFSET);
	
//添加以下这段,清除标志位就可以解决了
	if(isr_status & (XUARTPS_IXR_TXEMPTY))
	{
		XUartPs_WriteReg(PsUart1.Config.BaseAddress,XUARTPS_ISR_OFFSET, XUARTPS_IXR_TXEMPTY);
	}
//添加以上这段,清除标志位就可以解决了
	//判断中断标志位 RxFIFO 是否触发
	if (isr_status & (XUARTPS_IXR_RXOVR | XUARTPS_IXR_RXFULL)){
		//读取接收的数据到缓存区
		recv_num = XUartPs_Recv(&PsUart1, ps_uart1_recv_buf, 100);
		XUartPs_WriteReg(PsUart1.Config.BaseAddress,XUARTPS_ISR_OFFSET, XUARTPS_IXR_RXOVR);
		//将缓存区中接收到的数据再发送出去
		XUartPs_Send(&PsUart1, ps_uart1_recv_buf, recv_num);
		//清空缓存区
		memset(ps_uart1_recv_buf, 0, 100);
	}
}
  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
基于ZynqEMIO调试UART主要涉及到使用EMIO将外部设备与PS(处理器系统)中的PL(可编程逻辑)进行连接,并进行UART通信的调试工作。首先,我们需要在Vivado中设计包含UART功能的PL部分,并将其连接到EMIO接口。接着,在软件开发工具中配置UART的参数,如波特率、数据位、校验位和停止位等,并编写相应的驱动程序来实现数据的收发。在调试过程中,可以通过硬件调试工具来监视和分析UART通信的数据流,以确保数据的准确传输和正确解析。另外,也可以通过逐步调试程序和逻辑电路的方式来定位和解决通信过程中出现的问题。最后,通过在Zynq平台上进行实际测试,可以验证UART通信的稳定性和可靠性,并进行性能优化和改进。 在这个过程中,需要注意PL和PS之间的时序同步、数据格式的匹配、中断处理等方面的问题,以确保UART通信能够正确地工作。同时,还需要充分了解Zynq的架构和特性,熟练掌握Vivado和SDK等工具的使用方法,以提高调试的效率和成功率。最后,在完成UART通信的基本功能后,还可以考虑添加数据校验、流控和DMA等功能来提升通信性能和稳定性。整体而言,基于ZynqEMIO调试UART需要综合运用硬件设计和软件开发的知识和技能,同时需要耐心和细心地进行调试工作,以确保UART通信系统能够满足设计要求并稳定可靠地工作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值