【【FPGA 之Micro Blaze的串口中断实验】】

FPGA 之Micro Blaze的串口中断实验

我们在使用 MicroBlaze 进行嵌入式系统设计的时候,通常会用到 AXI Uartlite IP 核与外部设备通信。AXI UART IP 核实现了 RS-232 通讯协议,并使得大家可以设置串口通信相关的波特率、奇偶校验位、停止位和数据位等参数。
AXI UART Lite IP 核具有以下特点:
对通过 axi4-lite 接口接收的字符执行并行到串行转换,并对从串行外围设备接收的字符执行串行到并行转换。
发送和接收 8、7、6 或 5 位字符,有一个停止位,并支持奇数、偶数或无奇偶位的配置。AXI UART Lite可以独立传输和接收数据。

对 通过 axi4-lite 接口接收的字符 执行 并转串 再把 对 外围设备接收的字符执行 串 转 并
在这里插入图片描述

AXI Interface(AXI 接口):该模块实现了用于寄存器访问和数据传输的 AXI4-LITE 从接口。
UART Lite Registers(UART Lite 寄存器模块):此模块包括内存映射寄存器。它由一个控制寄存器、
一个状态寄存器和一对发射/接收 FIFO 组成,两个 FIFO 都有 16 个字符的深度。当接收 FIFO 变为非空或当
发送 FIFO 变为空时,生成上升沿敏感的中断。此中断可以通过使用中断启用/禁用信号来屏蔽。
UART Control(UART 控制模块):该模块包括 Rx Control(接收控制)、Tx Control(发送控制)、
BRG (Baud Rate Generator)和 Interrupt Control(中断控制)四个模块。
AXI UART IP 核提供了 AXI4-Lite 接口,我们可以通过 AXI4-Lite 接口读取状态寄存器或配置 UART Control 模块(复位收发 FIFO、启用中断)。当 AXI UART 接收到上位机发送的数据后,Rx Control 模块根据 BRG 模块产生的波特率将串行的数据转化成并行数据,写入接收 FIFO,然后处理器通过 AXI4-Lite 接口读出接收 FIFO 中的数据;处理器中的数据也可以通过 AXI4-Lite 接口写入发送 FIFO,然后经 Tx Control根据 BRG 模块产生的波特率将并行数据转化为串行数据发送出去。

实验任务 : 是根据 AXI UART IP 核产生的中断信号,完成串口数据的收发。
在这里插入图片描述

这是我们 添加中断之后的 block design

在这里插入图片描述

因为只是对 UART进行 中断插入 所以我们只需要添加 1个 中断 即可

下面是附带的main.c 的代码

#include "xil_exception.h"
 #include "xdebug.h"
 #include "xparameters.h"
 #include "xintc.h"
 #include "xuartlite.h"
 #include "xuartlite_l.h"

 #define UART_DEVICE_ID XPAR_UARTLITE_0_DEVICE_ID //串口器件 ID
 #define UART_INTR_ID XPAR_INTC_0_UARTLITE_0_VEC_ID //串口中断 ID
 #define INTC_ID XPAR_INTC_0_DEVICE_ID //中断控制器 ID

 #define RX_NOEMPTY XUL_SR_RX_FIFO_VALID_DATA // 接收 FIFO 非空

 static XIntc Intc; //中断控制器实例
 static XUartLite Uart; //串口实例

 void uart_handler(void *CallbackRef);

 int main(void){
 //初始化串口设备
 XUartLite_Initialize(&Uart , UART_DEVICE_ID);
 //初始化中断控制器
 XIntc_Initialize(&Intc, INTC_ID);
 //关联处理函数
 XIntc_Connect(&Intc, UART_INTR_ID,(XInterruptHandler)uart_handler,&Uart);
 //使能串口
 XUartLite_EnableInterrupt(&Uart);
 //打开中断控制器
 XIntc_Start(&Intc, XIN_REAL_MODE);
//使能中断控制器
 XIntc_Enable(&Intc,UART_INTR_ID);
 //设置并打开中断异常处理功能
 Xil_ExceptionInit();
 Xil_ExceptionRegisterHandler(XIL_EXCEPTION_ID_INT,
 (Xil_ExceptionHandler)XIntc_InterruptHandler , &Intc);
 Xil_ExceptionEnable();
 while(1);
 }

 void uart_handler(void *CallbackRef)//中断处理函数
 {
 u8 Read_data;
 u32 isr_status;
 XUartLite *InstancePtr= (XUartLite *)CallbackRef;

 //读取状态寄存器
 isr_status = XUartLite_ReadReg(InstancePtr->RegBaseAddress ,
 XUL_STATUS_REG_OFFSET);
 if(isr_status & RX_NOEMPTY){ //接收 FIFO 中有数据
     //读取数据
 Read_data=XUartLite_ReadReg(InstancePtr->RegBaseAddress ,
 XUL_RX_FIFO_OFFSET);
 //发送数据
 XUartLite_WriteReg(InstancePtr->RegBaseAddress ,
 XUL_TX_FIFO_OFFSET, Read_data);
 }
 }

我们之前对 中断进行了分析 所以这里应该没有什么大问题

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

一看就懂的RxJava源码分析

一看就懂的RxJava源码分析 前言零、观察模式简介一、RxJava使用示例一二、示例一源码分析0. 示例一代码分解1. RxJava中的观察者是谁?2. RxJava中的被观察者又是谁?3. 观察者又是如何安插到被观察者中的?4. 示例一RxJava源码整体关系类图4. R…

一本书读懂数据治理

企业数据治理非常必要,它是企业实现数字化转型的基础,是企业的一个顶层策略,一个管理体系,也是一个技术体系,涵盖战略、组织、文化、方法、制度、流程、技术和工具等多个层面的内容。 数据治理不是对“数据”的治理&am…

Unity 与 虚拟机ROS连接

Unity 与 虚拟机ROS连接 知识储备前期准备ROS部分Unity部分 连接测试 知识储备 unity官方教程: https://github.com/Unity-Technologies/Unity-Robotics-HubWin11家庭版开启HyperV: https://zhuanlan.zhihu.com/p/577980646HyperV安装Ubuntu: https://b…

SQL Sever 基础知识 - 数据查询

SQL Sever 基础知识 - 一、查询数据 一、查询数据第1节 基本 SQL Server 语句SELECT第2节 SELECT语句示例2.1 SELECT - 检索表示例的某些列2.2 SELECT - 检索表的所有列2.3 SELECT - 对结果集进行筛选2.4 SELECT - 对结果集进行排序2.5 SELECT - 对结果集进行分组2.5 SELECT - …

浅学指针(4)函数指针数组和qsort的使用

系列文章目录 文章目录 系列文章目录前言1.函数指针数组的⽤途作用:可以让代码更简洁,逻辑更清晰 2. 回调函数回调函数就是⼀个通过函数指针调⽤的函数 3 . qsort函数qsort函数可以排序所有数据类型解释如图:![在这里插入图片描述](https://i…

【高效开发工具系列】Hutool DateUtil工具类

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

Leetcode-二叉树oj题

1.二叉树的前序遍历 144. 二叉树的前序遍历https://leetcode.cn/problems/binary-tree-preorder-traversal/这个题目在遍历的基础上还要求返回数组,数组里面按前序存放二叉树节点的值。 既然要返回数组,就必然要malloc一块空间,那么我们需…

Spring简单的存储和读取

前言 前面讲了spring的创建,现在说说关于Bean和五大类注解 一、Bean是什么? 在 Java 语⾔中对象也叫做 Bean,所以后⾯咱们再遇到对象就以 Bean 著称。这篇文章还是以spring创建为主。 二、存储对象 2.1 俩种存储方式 需要在 spring-conf…

作用域和作用域链

前端面试大全JavaScript作用域和作用域链 🌟经典真题 🌟作用域(Scope) 什么是作用域 全局作用域和函数作用域 块级作用域 🌟作用域链 什么是自由变量 什么是作用域链 关于自由变量的取值 🌟作用域…

初识Linux:权限

目录 提示:以下指令均在Xshell 7 中进行 Linux 的权限 内核: 查看操作系统版本 查看cpu信息 查看内存信息 外部程序: 用户: 普通用户变为超级用户: su 和 su-的区别: root用户变成普通用户&#…

【matlab程序】画海洋流场

【matlab程序】画海洋流场 clear;clc; file ( ‘0227.nc’); latncread(file,‘latitude’); lonncread(file,‘longitude’); uncread(file,‘water_u’); vncread(file,‘water_v’); [x,y]meshgrid(lon,lat); xx’; yy’; interval4; figure (1) set(gcf,‘color’,[1 1 1…

【linux】基本指令(上篇)

1.快速认识5~6个指令 pwd指令 ls指令 touch指令 cd指令 clear指令 touch指令 详细讲解 首先有一个问题就是当我们创建一个文件,但是没有往里面写内容,那么磁盘上会有该文件吗? 磁盘上会保存,因为创建好的文件,没有…

【古月居《ros入门21讲》学习笔记】05_ROS是什么及其核心概念

目录 说明 1. ROS发展史 ROS版本演变 2. ROS是什么 ROS中的通信机制 ROS中的开发工具 ROS中的应用功能 ROS中的生态系统 3. ROS核心概念 节点与节点管理器 通信方式1:话题 通信方式2:服务 话题与服务的区别 参数 文件系统 说明 1. 本系列…

学习笔记7——数据库基础知识以及mysql的查询语句

学习笔记系列开头惯例发布一些寻亲消息 链接:https://baobeihuijia.com/bbhj/contents/3/199913.html 数据库 三个概念区分 DB:数据库,存储数据的仓库,有组织的数据容器DBMS:数据库管理系统SQL:几乎所有的DBMS都支持…

从PDF和图像中提取文本,以供大型语言模型使用

想法 大型语言模型已经席卷了互联网,导致更多的人没有认真关注使用这些模型最重要的部分:高质量的数据!本文旨在提供一些有效从任何类型文档中提取文本的技术。 Python库 本文专注于Pytesseract、easyOCR、PyPDF2和LangChain库。实验数据是一…

jQuery的使用

目录 jquery对象&#xff1a; jquery作为一般函数调用参数: jquery事件机制 jquery dom操作 jquery对象&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" cont…

MySQL 教程 1.4

MySQL 连接 使用mysql二进制方式连接 您可以使用MySQL二进制方式进入到mysql命令提示符下来连接MySQL数据库。 实例 以下是从命令行中连接mysql服务器的简单实例&#xff1a; [roothost]# mysql -u root -p Enter password:****** 在登录成功后会出现 mysql> 命令提示窗…

Python全栈之基本数据类型详解

文章目录 1.注释2.输出3.变量4.命名规范5.变量的定义方式1.字符串类型2.数字类型3.List列表类型4.tuple 元组类型的定义5.Dict字典类型6.set集合类型7.数据类型转换8.自动类型转换9.强制类型转换关于Python技术储备一、Python所有方向的学习路线二、Python基础学习视频三、精品…

Reactor网络线程模型

目录 传统下网络服务模型 事件监听模型 NIO核心概念 单线程Reactor模式 多线程Reactor模式 Kafka 的网络设计 主要概念 类比思维理解 参考文章 传统下网络服务模型 线程太多无法处理大规模请求 事件监听模型 NIO核心概念 nio是实现reactor模式的底层API代码 单…

【SparkSQL】SparkSQL函数定义(重点:定义UDF函数、使用窗口函数)

【大家好&#xff0c;我是爱干饭的猿&#xff0c;本文重点介绍SparkSQL 定义UDF函数、SparkSQL 使用窗口函数。 后续会继续分享其他重要知识点总结&#xff0c;如果喜欢这篇文章&#xff0c;点个赞&#x1f44d;&#xff0c;关注一下吧】 上一篇文章&#xff1a;《【SparkSQL…
最新文章