news 2026/4/23 15:42:39

Zynq上UART/IIC/SPI的27个实验-第2课:PS 硬件 UART 接收

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Zynq上UART/IIC/SPI的27个实验-第2课:PS 硬件 UART 接收

目录

目标

串口接收中断中记录接收到的数据并置位标志,
主循环检测该标志后,将接收到的消息统一发送出去。

BD

main.cpp

#include"xparameters.h"#include"xuartps.h"#include"xscugic.h"#include"xil_exception.h"#include"xil_printf.h"#include"sleep.h"#include<string.h>/* ================= 配置 ================= */#defineUART_DEVICE_IDXPAR_XUARTPS_0_DEVICE_ID#defineUART_INTR_IDXPAR_XUARTPS_0_INTR#defineGIC_DEVICE_IDXPAR_PS7_SCUGIC_0_DEVICE_ID#defineRX_BUF_SIZE64/* ================= 全局对象 ================= */staticXUartPs UartPs;staticXScuGic Intc;/* RX 缓冲 + 标志 */staticvolatileintrx_ready=0;staticvolatileu32 rx_len=0;staticu8 rx_buf[RX_BUF_SIZE];/* ================= BSP 风格发送接口 ================= */voidBspUartWrite(uint8_t*buf,uint32_tlen){uint32_tsent=0;while(sent<len){sent+=XUartPs_Send(&UartPs,buf+sent,len-sent);}}/* ================= UART RX 中断回调 ================= */staticvoidUartHandler(void*CallBackRef,u32 Event,unsignedintEventData){if((Event==XUARTPS_EVENT_RECV_DATA)||(Event==XUARTPS_EVENT_RECV_TOUT)){if(EventData>0&&rx_ready==0){rx_len=EventData;rx_ready=1;/* 只置标志,不发送 */}/* 重新启动接收 */XUartPs_Recv(&UartPs,rx_buf,RX_BUF_SIZE);}}/* ================= UART 初始化 ================= */staticintBspUartInit(void){intStatus;XUartPs_Config*Config;Config=XUartPs_LookupConfig(UART_DEVICE_ID);if(!Config)returnXST_FAILURE;Status=XUartPs_CfgInitialize(&UartPs,Config,Config->BaseAddress);if(Status!=XST_SUCCESS)returnStatus;XUartPs_SelfTest(&UartPs);XUartPs_SetBaudRate(&UartPs,115200);XUartPs_SetOperMode(&UartPs,XUARTPS_OPER_MODE_NORMAL);XUartPs_SetHandler(&UartPs,UartHandler,&UartPs);XUartPs_SetInterruptMask(&UartPs,XUARTPS_IXR_RXFULL|XUARTPS_IXR_RXOVR|XUARTPS_IXR_TOUT);XUartPs_SetRecvTimeout(&UartPs,8);XUartPs_Recv(&UartPs,rx_buf,RX_BUF_SIZE);returnXST_SUCCESS;}/* ================= GIC 初始化 ================= */staticintGicInit(void){intStatus;XScuGic_Config*Cfg;Cfg=XScuGic_LookupConfig(GIC_DEVICE_ID);if(!Cfg)returnXST_FAILURE;Status=XScuGic_CfgInitialize(&Intc,Cfg,Cfg->CpuBaseAddress);if(Status!=XST_SUCCESS)returnStatus;Xil_ExceptionInit();Xil_ExceptionRegisterHandler(XIL_EXCEPTION_ID_INT,(Xil_ExceptionHandler)XScuGic_InterruptHandler,&Intc);Status=XScuGic_Connect(&Intc,UART_INTR_ID,(Xil_ExceptionHandler)XUartPs_InterruptHandler,&UartPs);if(Status!=XST_SUCCESS)returnStatus;XScuGic_Enable(&Intc,UART_INTR_ID);Xil_ExceptionEnable();returnXST_SUCCESS;}/* ================= main ================= */intmain(void){intStatus;xil_printf("UART RX interrupt flag echo test\r\n");Status=BspUartInit();if(Status!=XST_SUCCESS){xil_printf("UART init failed\r\n");while(1);}Status=GicInit();if(Status!=XST_SUCCESS){xil_printf("GIC init failed\r\n");while(1);}constchar*msg="Type something, main loop will echo.\r\n";BspUartWrite((uint8_t*)msg,strlen(msg));while(1){if(rx_ready){/* 主循环里发送 */BspUartWrite(rx_buf,rx_len);/* 清标志 */rx_ready=0;rx_len=0;}}return0;}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 6:45:43

别让“小眼镜”挡路!儿童近视防控,从读懂“调节力”开始

近年来&#xff0c;儿童青少年近视率持续攀升&#xff0c;越来越多的孩子早早戴上了“小眼镜”&#xff0c;这一现象不仅牵动着家长的心&#xff0c;也成为社会广泛关注的公共卫生问题。近视的发生并非偶然&#xff0c;而是多种因素共同作用的结果&#xff0c;其中长期近距离用…

作者头像 李华
网站建设 2026/4/23 6:47:56

深度学习毕设项目:基于python_CNN卷积神经网络训练识别中药基于python_CNN深度学习卷积神经网络训练识别中药

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/4/23 6:49:23

港科大与DeepWisdom:AutoEnv实现AI环境自适应学习

这项由香港科技大学&#xff08;广州&#xff09;的张嘉一、彭翼然等研究者联合DeepWisdom、北京大学、新加坡科技设计大学、悉尼大学、耶鲁大学和蒙特利尔大学等多家顶尖机构完成的研究发表于2025年11月&#xff0c;论文编号为arXiv:2511.19304v1。有兴趣深入了解的读者可以通…

作者头像 李华
网站建设 2026/4/23 9:57:45

从 Web 入侵到域控拿下!内网渗透全解析,实战教程小白也能懂

【珍藏】内网渗透技术全解析&#xff1a;从Web入侵到域控获取的实战教程 本文详细介绍了内网渗透测试全流程&#xff0c;从Web服务器ThinkPHP漏洞利用开始&#xff0c;通过信息搜集、权限提升、凭证获取等技术&#xff0c;实现内网横向移动。文章展示了MSF框架使用、IPC连接、…

作者头像 李华