Vivado中的IP核——uartlite详解

这篇具有很好参考价值的文章主要介绍了Vivado中的IP核——uartlite详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

如果想要使用uartlite这个模块,则需要其驱动程序,这些驱动程序中包含对寄存器的直接操作。赛灵思在BSP中提供了uartlite的驱动函数,但是感觉不好用,所以本文详细介绍uartlite的寄存器空间,以便于可以自己编写相应的驱动函数。
资料ID:PG142
文档查找软件:DocNav,在安装vivado时可以选择一并安装

uartlite的寄存器空间

用于操作uartlite的寄存器有4个,如下表所示。
Vivado中的IP核——uartlite详解
其中的第一列是寄存器的地址偏移量,这里的偏移是针对设备基地址,即Baseaddress。
STAT_REG表示的是uartlite的状态寄存器。
CTRL_REG表示的是uartlite的控制寄存器。
Rx FIFO和Tx FIFO分别表示uartlite的接收和发送寄存器。
接下来将对这四个寄存器的使用方法进行详细介绍。

Tx FIFO

Tx FIFO是一个32位的寄存器,它的作用只有一个,那就是将要传输的数据写入该寄存器。然后该寄存器中的数据会被放入到一个叫做发送FIFO的缓冲区中,该缓冲区最多可以存放16个数据。然后就是发送缓冲区中的数据。
Vivado中的IP核——uartlite详解
上图中,Data Bits表示一次传输的数据位数,可设置为5至8,图中显示的当Data Bits设置为8时,Tx FIFO这个寄存器中各个位的定义。这个0至7放置要传输的数据,其余位为保留位,即没有任何含义。
在使用过程中,如果发送缓冲区中已经有16个要发送的数据,此时如果再向此寄存器中写入数据,这时会产生一个总线错误并且该数据不会被写入缓冲区。这是一个只写寄存器,如果发送一个读信号,此时将会产生一个用0表示的读确认(猜想应该是读的结果是0)。

Rx FIFO

Rx FIFO也是一个32位的寄存器,它的作用也只有一个,那就是通过读取该寄存器的值来读取接收到的数据,注意,该寄存器读取的是接收缓冲区中的数据。类似于发送缓冲区,uartlite也包含一个接收缓冲区,缓冲区的大小也为16。
Vivado中的IP核——uartlite详解
Vivado中的IP核——uartlite详解
由图得,当Data Bits被设置为8时,0至7位表示接收到的数据,其余位为保留位。
当接收缓冲区中没有数据时,如果发送一个读请求到该寄存器,则会产生一个总线错误,并且读取的结果是未定义的。该寄存器是一个只读寄存器,当发送一个写信号时,将不会产生任何效果。

CTRL_REG

CTRL_REG也是一个32位寄存器,这32位中只有3位是有意义的,其余位均为保留位。各位的定义如下图。
Vivado中的IP核——uartlite详解
Vivado中的IP核——uartlite详解
第0位:当向该位写入1时,将会清除传输缓冲区中的数据
第1位:当向该位写入0时,将会清除接收缓冲区中的数据
第4位:当向该位写入1时,将会使能产生中断信号;当向该位写入0时,将使其不能产生中断信号

Status Register

Status Register是一个32位的寄存器,该寄存器中0至7位是有意义的,其余位为保留位,如下图所示。
Vivado中的IP核——uartlite详解
Vivado中的IP核——uartlite详解
这里的描述意义都是非常清楚的,选第2位和第3位介绍一下,因为后面的示例程序会使用到。
第2位:当该位为0时,表示此时传输缓冲区不为空;当该位为1时,表示此时传输缓冲区为空。
第3位:当该位为0时,表示此时传输缓冲区没有满;当该位为1时,表示此时传输缓冲区已经满了。文章来源地址https://www.toymoban.com/news/detail-441924.html

示例程序:判断发送缓冲区的大小是否为16

#include "xil_printf.h"

#define BaseAddress 0x40600000//这里的uartlite基地址可以从xparameter.h文件中找到
#define RxOffset 0x0
#define TxOffset 0x4
#define STAT_REG 0x08
#define CTRL_REG 0x0C

int main()
{
	/**********initialize uartlize***************/
	*(volatile int *)(BaseAddress + CTRL_REG) &= 0xFFFFFFEF;//disable interrupt
	*(volatile int *)(BaseAddress + CTRL_REG) |= 0x3;//clear Rx FIFO, clear Tx FIFO
	/********************************************/

	/*********transmit byte****************/
	char a = 'A';
	int i = 0;
	while((*(volatile int *)(BaseAddress + STAT_REG) & 0x8) != 0x8)
	{
		i++;
		*(volatile int *)(BaseAddress + TxOffset) = a;
	}

	while((*(volatile int *)(BaseAddress + STAT_REG) & 0x4) != 0x4);

	if(i == 16)
	{
		print("i is equal 16!!!!!!!\r\n");
		return 0;
	}
	else
	{
		print("i is not equal 16!!!!!!!\r\n");
		return 1;
	}
}

到了这里,关于Vivado中的IP核——uartlite详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • DDR3 控制器 MIG IP 详解完整版 (VIVADO&Verilog)

    DDR系列文章分类地址: (1)DDR3 基础知识分享 (2)DDR3 控制器 MIG IP 详解完整版 (AXI4VivadoVerilog) (3)DDR3 控制器 MIG IP 详解完整版 (nativeVivadoVerilog) (4)基于 DDR3 的串口传图帧缓存系统设计实现 (5)基于 DDR3 的native接口串口局部传图缓存系统设计实现 (6)基于 DDR3 的

    2024年02月06日
    浏览(83)
  • AXI三种接口及DMA DDR XDMA介绍(应用于vivado中的ip调用)

    参考资源: 【SDK篇_58~62_AXI接口简介【Xilinx】+【Vivado】+【AXI4总线】+【FPGA】-哔哩哔哩】 关于AXI握手过程都讲解的很细致 ug1037(三种AXI的介绍,相关AXI IP的介绍) IHI0022D(握手过程的详细介绍) FPGA_HP:AXI4的学习与使用1——基础知识积累 这个博主写的其他内容也不错 从零学

    2024年01月24日
    浏览(46)
  • 小程序开发费用一览表,如果你也想要用低成本制作出自己的小程序,来了解一下!

    近几年来微信小程序的发展的十分的迅速,越来越多的用户对小程序已经非常熟悉,同时很多商家都看到了小程序的商机,其中小程序商城更是受到众多用户和商家的欢迎。 制作小程序商城主要的方式有两种,一种是源码定制开发,一种是直接套用小程序模板了。而其中大家

    2023年04月08日
    浏览(62)
  • DDR3 控制器 MIG IP 详解完整版 (native&VIVADO&Verilog)

    DDR系列文章分类地址: (1)DDR3 基础知识分享 (2)DDR3 控制器 MIG IP 详解完整版 (AXI4VivadoVerilog) (3)DDR3 控制器 MIG IP 详解完整版 (nativeVivadoVerilog) (4)基于 DDR3 的串口传图帧缓存系统设计实现 (5)基于 DDR3 的native接口串口局部传图缓存系统设计实现 (6)基于 DDR3 的

    2024年02月13日
    浏览(74)
  • vivado 使用IP Integrator源

    使用IP Integrator源 在Vivado Design Suite中,您可以在RTL中添加和管理IP子系统块设计(.bd)项目或设计。使用Vivado IP集成程序,您可以创建IP子系统块设计。IP集成程序使您能够通过实例化和将Vivado IP目录中的多个IP核互连。可以交互创建设计通过Vivado IDE中的IP integrator画布或通过

    2024年01月18日
    浏览(39)
  • Vivado CANFD IP 使用笔记

    1. IP设置:  接口说明:         APB接口用于配置IP内部寄存器、控制CAN报文收发;         can_clk:默认给40Mhz;         can_clk_x2:与can_clk同源,默认给80MHz;         apb_clk:系统时钟; 波特率计算:         80MHz / 2 / ((1+BRP)*((1+(1+TESG1)+(1+TESG2))); 寄存器表:         基地

    2024年02月08日
    浏览(38)
  • 【Vivado】clock ip核的使用

    ​ Clock在时序逻辑的设计中是不可或缺的,同时对于Clock的编写和优化也能体现一个FPGA工程师的技术水平,Clock的分频,倍频在设计项目时都有可能用到,对于分频,可以通过代码的方式进行实现,而倍频,就要用到我们今天的主角——Clock IP核。熟练使用Clock IP核是学习FPG

    2024年01月16日
    浏览(59)
  • 【Vivado】ram ip核的使用

    ​ ram 的英文全称是 Random Access Memory,即随机存取存储器, 它可以随时把数据写入任一指定地址的存储单元,也可以随时从任一指定地址中读出数据, 其读写速度是由时钟频率决定的。 ram 主要用来存放程序及程序执行过程中产生的中间数据、 运算结果等。 ​ rom为只读存储

    2024年02月02日
    浏览(35)
  • DDR3 控制器 MIG IP 详解完整版 (AXI4&VIVADO&Verilog)

    DDR系列文章分类地址: (1)DDR3 基础知识分享 (2)DDR3 控制器 MIG IP 详解完整版 (AXI4VivadoVerilog) (3)DDR3 控制器 MIG IP 详解完整版 (nativeVivadoVerilog) (4)基于 DDR3 的串口传图帧缓存系统设计实现 (5)基于 DDR3 的native接口串口局部传图缓存系统设计实现 (6)基于 DDR3 的

    2024年02月11日
    浏览(51)
  • Vivado中VIO IP核的使用

      Vivado中的VIO(Virtual Input/Output) IP核是一种用于调试和测试FPGA设计的IP核。它允许设计者通过使用JTAG接口读取和写入FPGA内部的寄存器,从而检查设计的运行状态并修改其行为。VIO IP核提供了一个简单易用的接口,使得用户可以轻松地与FPGA内部寄存器进行交互。通过使用

    2024年02月06日
    浏览(88)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包