news 2026/1/16 21:00:23

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/1/14 17:17:37

35 岁危机绕道走!480 万缺口的网络安全,金饭碗稳到退休

“35岁被优化”“中年职场转型难”“青春饭吃完没退路”……这些焦虑正在职场中蔓延。当无数人在传统行业为年龄增长而恐慌时&#xff0c;有一个领域却在高呼“人才紧缺”&#xff0c;不仅没有35岁危机&#xff0c;反而越有经验越吃香——它就是网络安全。《AI时代网络安全产业…

作者头像 李华
网站建设 2026/1/14 17:12:59

硅光中的调制效应

硅光中的调制效应 引言 正文 非显著效应 电场效应 半导体材料中主要的三种电场效应 波克尔斯效应 克尔效应 弗朗茨-凯尔迪什效应 显著效应 载流子注入或载流子耗尽 Author: JiJi \textrm{Author: JiJi} Author: JiJi Created Time: 2026.01.14 \textrm{Created Time: 2026.01.…

作者头像 李华
网站建设 2026/1/14 17:02:20

冥想第一千七百六十四天(1764)

1.周三&#xff0c;今天天气阴&#xff0c;空气质量不好&#xff0c;早上醒来的时候还阴着&#xff0c;昨天晚上朋友来找我&#xff0c;聊的很好。全力以赴的一天。 2.感谢父母&#xff0c;感谢朋友&#xff0c;感谢家人&#xff0c;感谢不断进步的自己。

作者头像 李华