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;}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1159707.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python基于vue的商城购物平台设计与实现 优惠卷django flask pycharm

目录技术栈选择系统功能模块数据库设计前后端交互逻辑部署与优化开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;技术栈选择 Python作为后端开发语言&#xff0c;搭配Django或Flask框架实现…

深度学习毕设项目:基于机器学习python-CNN的鞋面缺陷识别基于深度学习python-CNN的鞋面缺陷识别

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

基于 YOLOv8 的智能摊位识别与视频监控系统 [目标检测完整源码]

基于 YOLOv8 的智能摊位识别与视频监控系统 [目标检测完整源码] 一、项目背景与应用价值 在集市、夜市及临时摊位等场景中&#xff0c;商品种类繁杂、人员流动频繁&#xff0c;传统依赖人工巡查或普通监控的视频管理方式&#xff0c;往往存在效率低、信息利用率不足等问题。随…

基于 YOLOv8 的无人机航拍树木智能识别实战项目分享

基于 YOLOv8 的无人机航拍树木智能识别实战项目分享 ——从林业遥感需求到工程化落地 一、应用背景与问题定义 在林业资源普查、生态环境监测及智慧农业等场景中&#xff0c;无人机航拍影像已成为获取大尺度地表信息的重要手段。然而&#xff0c;航拍图像往往存在 视角变化大…

AI论文写作从零到一操作指南:6款工具手把手教你1小时搞定全文

一、AI论文工具选型&#xff1a;6款主流工具核心能力对比 作为论文新手&#xff0c;你是否曾在选题时抓耳挠腮、在文献综述里迷失方向、对着空白文档发呆&#xff1f;别慌——AI工具能帮你把论文写作周期从“月”压缩到“小时”。但市面上工具鱼龙混杂&#xff0c;选对工具才能…

鸿蒙 APP 还是卡顿?API 21 性能优化这 3 招,立竿见影!

Hello&#xff0c;兄弟们&#xff0c;我是 V 哥&#xff01; 昨天有个粉丝在群里哭诉&#xff1a;“V 哥&#xff0c;我用鸿蒙 API 21 写的 App&#xff0c;在模拟器上跑得像法拉利&#xff0c;一到真机老款机型上&#xff0c;划一下屏幕顿两下&#xff0c;简直像在开拖拉机&am…

List 组件渲染慢?鸿蒙API 21 复用机制深度剖析,一行代码提速 200%!

哈喽&#xff0c;兄弟们&#xff0c;我是 V 哥&#xff01; 昨天有个兄弟在群里发了段视频&#xff0c;他的列表在滑动的时候&#xff0c;掉帧掉得像是在放 PPT。他委屈地说&#xff1a;“V 哥&#xff0c;我也用了 LazyForEach 了啊&#xff0c;数据也是懒加载的&#xff0c;怎…

深度学习毕设项目推荐-基于python-CNN卷积神经网络的胡萝卜是否变质识别

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

Matlab —— 语音信号处理及频谱分析.wav文件(附:matlab代码)

简介及运行效果图本文介绍利用Matlab对.wav文件的语音信号读取和频谱分析&#xff0c;包括读取wav音频文件、选择声道、调整采样率输出.wav文件和绘制频谱图。正文1、Matlab读取.wav文件wav文件是常见的音频文件格式之一。同时Matlab提供了一套简洁的工具来读取和处理wav文件&a…

智算中心与大模型协同:AI时代的算力基础设施与产业赋能指南

人工智能算力基础设施通过五大协同方向&#xff08;数据要素、模型算法、跨域智算、行业场景、区域产业&#xff09;构建开放生态&#xff0c;赋能千行百业。未来智算中心将向多元场景、集约能力、聚合生态方向发展&#xff0c;通过"算力数据"、"算力模型"…

深度学习毕设项目推荐-基于python-CNN深度学习对棉花叶病识别

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

国巨君耀 4532 系列 SMD 气体放电管:电路过压防护的可靠之选

今天南山电子为大家介绍国巨旗下君耀电子&#xff08;BrightKing&#xff09;的 4532 系列气体放电管&#xff08;GDT&#xff09;。君耀电子在电路保护领域口碑出众&#xff0c;这款器件采用表面贴装设计&#xff0c;专为抵御雷击、静电放电等瞬态过压问题而生&#xff0c;规格…

LangGraph多Agent架构实战:Open Deep Research三级分层嵌套结构深度解析

文章详细解析了Open Deep Research项目的多Agent架构设计&#xff0c;采用三级分层嵌套结构&#xff1a;主图(线性管道)负责整体流程编排&#xff0c;监督者子图(循环结构)负责任务分解与委派&#xff0c;研究者子图(带条件分支循环结构)负责具体执行。通过决策与执行分离机制及…

亲测好用!10个AI论文平台测评:本科生毕业论文必备

亲测好用&#xff01;10个AI论文平台测评&#xff1a;本科生毕业论文必备 2026年AI论文平台测评&#xff1a;为何值得一看&#xff1f; 随着人工智能技术的不断发展&#xff0c;越来越多的本科生开始借助AI工具辅助毕业论文写作。然而&#xff0c;面对市场上五花八门的平台&…

算力成本估算:基于Token吞吐量的资源需求模型

在上一篇中&#xff0c;我们聊了模型选型的艺术。今天&#xff0c;我们要变得更现实一点&#xff0c;聊聊钱。 当你向CTO或财务总监申请购买昇腾910B服务器时&#xff0c;光说“DeepSeek效果好”是拿不到预算的。你需要回答一个灵魂拷问&#xff1a;为了支撑我们现在的业务量&a…

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

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