UART 控制器是一个全双工异步收发控制器, MPSoC 内部包含两个 UART 控制器, UART0 和 UART1。每一个 UART 控制器支持可编程的波特率发生器、 64 字节的接收 FIFO 和发送 FIFO、产生中断、 RXD 和TXD 信号的环回模式设置以及可配置的数据位长度、停止位和校验方式等。UART 控制器的配置以及状态的获取由控制(Control)和状态寄存器(Status Registers完成。另外,UART 控制器不仅可以连接至 MIO,也可以映射到 EMIO,从而使用 PL 的端口来实现串口通信的功能。当 UART 控制器连接到 MIO 时,只有 Tx(发送)和 Rx(接收)两个引脚;而当连接 EMIO 时,除 Tx 和Rx 引脚外,可选的还有 CTS、 RTS、 DSR、 DCD、 RI、 DTR 等引脚,这些引脚用于串口的流控制,即调制解调器的数据通讯中。UART 控制器采用独立的接收和发送数据路径,每个路径包含一个 64 字节的 FIFO,控制器对发送和接收 FIFO 中的数据进行串并转换操作。 FIFO 的中断标志支持轮询处理或中断驱动处理两种方式。 另外,控制器中还有一个模式开关,支持 RXD 和 TXD 信号的各种环回配置。 UART 控制器内部框图如下图所示:

main.c

#include "xparameters.h"	//器件参数信息
#include "xuartps.h"		//包含 PS UART 的函数声明
#include "xil_printf.h"		//包含 print()函数
#include "xscugic.h"		//包含中断的函数声明
#include "stdio.h"			//包含 printf 函数的声明
#include "xscugic.h"		//
#include "uart.h"
#include "intr.h"//定义结构体
XUartPs Uartps	;
XScuGic Intc	;int main(){uart_config(&Uartps);intr_config(&Intc,&Uartps);while(1){}
}

uart.c

#include "xparameters.h"	//器件参数信息
#include "xuartps.h"		//包含 PS UART 的函数声明
#include "xil_printf.h"		//包含 print()函数
#include "xscugic.h"		//包含中断的函数声明
#include "stdio.h"			//包含 printf 函数的声明
#include "uart.h"#define UART_DEVICE_ID 	XPAR_PS7_UART_0_DEVICE_ID //串口设备 IDvoid uart_config(XUartPs *uartps){XUartPs_Config *uart_cfg;//查找配置信息uart_cfg = XUartPs_LookupConfig(UART_DEVICE_ID);//串口初始化XUartPs_CfgInitialize(uartps,uart_cfg,uart_cfg->BaseAddress);//UART参数设置//波特率 115200XUartPs_SetBaudRate(uartps,115200);//模式设置 正常模式XUartPs_SetOperMode(uartps,XUARTPS_OPER_MODE_NORMAL);//设置触发数量:1XUartPs_SetFifoThreshold(uartps, 1);}

uart.h

#include "xparameters.h"	//器件参数信息
#include "xuartps.h"		//包含 PS UART 的函数声明
#include "xil_printf.h"		//包含 print()函数
#include "xscugic.h"		//包含中断的函数声明
#include "stdio.h"			//包含 printf 函数的声明
#include "xscugic.h"		//void uart_config(XUartPs *uartps);

init.c

#include "xparameters.h"	//器件参数信息
#include "xuartps.h"		//包含 PS UART 的函数声明
#include "xil_printf.h"		//包含 print()函数
#include "xscugic.h"		//包含中断的函数声明
#include "stdio.h"			//包含 printf 函数的声明
#include "intr.h"#define UART_INT_IRQ_ID XPAR_XUARTPS_0_INTR //串口中断 ID
#define INTC_DEVICE_ID 	XPAR_SCUGIC_SINGLE_DEVICE_ID //中断控制器 IDvoid intr_config(XScuGic *Intc,XUartPs *Uartps){SetupInterruptSystem(Intc,Uartps);					//设置中断系统
}void SetupInterruptSystem(XScuGic *Intc, XUartPs *Uartps)
{XScuGic_Config *IntcConfig;//查找GIC配置信息,进行初始化IntcConfig = XScuGic_LookupConfig(INTC_DEVICE_ID);XScuGic_CfgInitialize(Intc, IntcConfig,IntcConfig->CpuBaseAddress);//配置UART中断XUartPs_SetInterruptMask(Uartps,XUARTPS_IXR_RXOVR);/*********************************************************************************************************************///初始化ARM处理器异常句柄Xil_ExceptionInit();//给IRQ异常注册处理程序Xil_ExceptionRegisterHandler(XIL_EXCEPTION_ID_INT,(Xil_ExceptionHandler)XScuGic_InterruptHandler,Intc);//使能处理器中断Xil_ExceptionEnableMask(XIL_EXCEPTION_IRQ);
/*********************************************************************************************************************///关联IQC异常处理函数XScuGic_Connect(Intc,UART_INT_IRQ_ID,(Xil_ExceptionHandler)IntrHandler,(void *)Uartps);//使能GIC控制器对应ID中断XScuGic_Enable(Intc, UART_INT_IRQ_ID);}void IntrHandler(void *call_back_ref){u32 int_state;u8 rxdata;XUartPs *uart_ps = (XUartPs *) call_back_ref;//获取中断配置信息int_state = XUartPs_GetInterruptMask(uart_ps);//读取中断状态int_state &= XUartPs_ReadReg(uart_ps->Config.BaseAddress,XUARTPS_ISR_OFFSET); //中断状态//判断是否为rxfifo中断if(int_state & XUARTPS_IXR_RXOVR){		//RXFIFO缓冲区中断//读取RXFIFO数据rxdata = XUartPs_RecvByte(uart_ps->Config.BaseAddress);//清除中断标志XUartPs_WriteReg(uart_ps->Config.BaseAddress,XUARTPS_ISR_OFFSET,1);//发送数据XUartPs_SendByte(uart_ps->Config.BaseAddress,rxdata);}}

inrt.h

#include "xparameters.h"	//器件参数信息
#include "xuartps.h"		//包含 PS UART 的函数声明
#include "xil_printf.h"		//包含 print()函数
#include "xscugic.h"		//包含中断的函数声明
#include "stdio.h"			//包含 printf 函数的声明void intr_config(XScuGic *Intc,XUartPs *Uartps);
void SetupInterruptSystem(XScuGic *Intc, XUartPs *Uartps);
void IntrHandler();

使用printf函数要注意在初始化函数之后使用

更换UART1

        

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

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

相关文章

C++ 登录状态机项目知识笔记

C 登录状态机项目知识笔记 1. 项目源码 1.1 login_state_machine.h #pragma once#include <string>// 登录状态枚举 enum class LoginState { IDLE, AUTHENTICATING, SUCCESS, FAILURE, LOCKED };// 登录事件枚举 enum class LoginEvent { REQUEST, SUCCESS, FAILURE, RE…

docker-nacos-v3

nacos官网&#xff1a; Redirecting to: https://nacos.io/ 服务发现和服务健康监测 Nacos 支持基于 DNS 和基于 RPC 的服务发现。服务提供者使用 原生SDK、OpenAPI、或一个独立的Agent TODO注册 Service 后&#xff0c;服务消费者可以使用DNS TODO 或HTTP&API查找和发现服…

DevOps 详解:文化、实践与工具链

目录一、DevOps 定义与核心目标二、DevOps 关键原则与实践1. 持续集成&#xff08;CI&#xff0c;Continuous Integration&#xff09;2. 持续交付&#xff08;CD&#xff0c;Continuous Delivery&#xff09;3. 持续部署&#xff08;Continuous Deployment&#xff09;4. 监控…

人工智能之数学基础:常用的连续型随机变量的分布

本文重点 本文将介绍概率中非常重要的连续型随机变量的分布,主要有均匀分布、指数分布、正态分布 均匀分布 若随机变量X的概率密度为: 如果概率密度函数如上所示,则称X服从区间[ a, b]上的均匀分布,记作X~U[a,b] 均匀分布的概率密度函数的计算如下: 指数分布 指数分布…

【开题答辩全过程】以 校园帮帮团跑腿系统的设计与实现为例,包含答辩的问题和答案

个人简介一名14年经验的资深毕设内行人&#xff0c;语言擅长Java、php、微信小程序、Python、Golang、安卓Android等开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。感谢大家的…

Milvus 向量数据库开发实战指南

Milvus向量数据库是什么&#xff1f;-CSDN博客 一、核心概念解析 1.1 基础概念 1.1.1 Bitset&#xff08;位集&#xff09; 高效的数据表示方式&#xff0c;使用位数组替代传统数据类型 默认情况下&#xff0c;位值根据特定条件设置为 0 或 1 1.1.2 通道机制 PChannel&am…

vcruntime140.dll丢失解决办法

解决办法 安装Microsoft Visual C Redistributable https://learn.microsoft.com/en-us/cpp/windows/latest-supported-vc-redist?viewmsvc-170

LabVIEW实现跨 VI 簇按钮控制功能

​在 LabVIEW 开发场景中&#xff0c;常需实现不同 VI 间的交互操作。本功能借助 VI Server 技术&#xff0c;突破 VI 边界&#xff0c;实现对目标 VI 中簇内按钮控件的属性读取与控制&#xff0c;为多 VI 协同、对VI里已经实现的功能&#xff0c;可以在其他VI中直接使用&#…

JS箭头函数

JavaScript 的箭头函数 (Arrow Function) 是 ES6 (ECMAScript 2015) 引入的一种重要的函数语法特性&#xff0c;它用更简洁的方式定义函数&#xff0c;并改变了 this 的绑定行为。 箭头函数和传统函数的主要区别&#xff1a;特性箭头函数传统函数语法更简洁&#xff0c;省略 fu…

linux内核 - 文件系统相关的几个概念介绍

介绍文件系统之前&#xff0c;先了解下存储管理的几个概念&#xff1a;1. 硬盘&#xff1a;是最底层的存储介质&#xff0c;比如 /dev/sda, /dev/nvme0n1. 一个物理硬盘就是一个块设备&#xff0c;未经处理是只能顺序读写二进制数据。 2. 分区&#xff1a;就是在硬盘上划分出不…

边缘计算(Edge Computing)+ AI:未来智能世界的核心引擎

边缘计算&#xff08;Edge Computing&#xff09; AI&#xff1a;未来智能世界的核心引擎 文章目录边缘计算&#xff08;Edge Computing&#xff09; AI&#xff1a;未来智能世界的核心引擎摘要什么是边缘计算&#xff1f;为什么需要边缘计算&#xff1f;1. 延迟问题2. 带宽压力…

计算机视觉与深度学习 | ORB-SLAM3算法原理与Matlab复现指南

文章目录 一、算法核心原理 1.1 系统架构概述 1.2 数学模型基础 1.2.1 状态估计框架 1.2.2 视觉-惯导融合模型 1.3 关键创新点 二、关键模块实现细节 2.1 ORB特征提取与匹配 2.2 地图初始化 2.3 视觉-惯导融合 2.4 回环检测与优化 三、Matlab复现思路 3.1 系统模块划分 3.2 核心…

分布式光伏模式怎么选?从 “凭经验” 到 “靠数据”,iSolarBP 帮你锁定最优解

iSolarBP-阳光新能源旗下分布式光伏光储智能评估设计软件 iSolarBP是阳光新能源打造的分布式光伏/光储项目智能设计平台。提供无人机自动勘测、3D建模、高精度发电仿真、光储容量优化与经济分析一站式服务&#xff0c;助力开发者提升效率、降低成本和优化投资收益。https://iso…

MATLAB R2010b系统环境(四)MATLAB帮助系统

一、帮助命令MATLAB帮助命令包括help、lookfor以及模糊查询。1.1 help命令在命令窗口中直接输入help或help加函数名。&#xff08;1&#xff09;help&#xff1a;显示当前帮助系统中所包含的所有项目&#xff0c;即搜索路径中所有的目录名称&#xff0c;如下图&#xff1a;&…

“便农惠农”智慧社区系统(代码+数据库+LW)

摘要 随着城市化进程加速和信息技术快速发展&#xff0c;传统社区管理模式已难以满足现代社区高效管理和居民多元化服务需求。为解决社区管理中的信息孤岛问题、提升服务效率并增强居民生活体验&#xff0c;本文设计并实现了一套基于Spring Boot框架的智慧社区管理系统。该系统…

智慧金融服务平台问题剖析与改进策略

智慧金融服务平台问题剖析与改进策略 在数字化浪潮的推动下&#xff0c;智慧金融服务平台蓬勃发展&#xff0c;为用户带来了便捷的金融服务体验。然而&#xff0c;随着用户数量的不断增加和业务的日益复杂&#xff0c;平台也暴露出一些问题&#xff0c;其中数据准确性不足、异常…

【Vue2✨】Vue2 入门之旅(三):数据与方法

在前两篇文章中&#xff0c;我们学习了 Vue 的基础和模板语法。本篇我们将深入 数据与方法&#xff0c;理解 data、methods、computed、watch 的作用和区别。 目录 datamethodscomputedwatch小结 data Vue 实例中的 data 是数据源&#xff0c;模板会自动响应其中的变化。 &l…

自动化测试时,chrome浏览器启动后闪退的问题

之前运行的好好的&#xff0c;最近再次练习时发现会闪退&#xff0c;然后发现是驱动版本老的问题 &#xff08;1&#xff09;下载与之匹配的驱动器版本 Chrome for Testing availability 找到与Chrome版本前3位相同的目录&#xff0c;下载对应系统的压缩包 &#xff08;2&am…

Dynamics 365 XrmToolBox工具之Clone Field Definitions

好久没有分享XrmToolBox的组件了&#xff0c;今天要分享的是下图中这个组件在建实体的时候&#xff0c;我们经常会碰到实体间一些字段存在重复&#xff0c;或者都可以直接复制黏贴加一些少量修改就可以生成第二个实体&#xff0c;但如果仅从D365本身来说&#xff0c;要做到复制…

UBUNTU之Onvif开源服务器onvif_srvd:1、编译

下载源码 编译时会下载东西&#xff0c;有可能需要VPN。 https://github.com/KoynovStas/onvif_srvd https://github.com/KoynovStas/onvif_srvd/tags 解压准备工作 sudo apt install -y flex bison byacc make cmake m4# for support encryption and WS-Security # 在低版…