首页 > 其他分享 >AvalonMM接口PIO IP的介绍和PIO的读写操作详解

AvalonMM接口PIO IP的介绍和PIO的读写操作详解

时间:2024-07-12 16:35:02浏览次数:15  
标签:读写操作 IP PIO 端口 IOWR base 寄存器 data

一、PIO寄存器介绍

Avalon®-MM主机外设(如CPU)通过四个32位寄存器控制并与PIO核通信,如下所示。该表假设PIO核的I/O端口被配置为n位宽度。

image-20240712145028146

以上截图来自Intel Embedded Peripherals IP User Guide

data寄存器

如果将PIO硬件配置为输入或仅输入输出模式,则从数据读取将返回输入端口上存在的值。如果PIO Core硬件配置为仅输出模式,则从数据寄存器读取将返回输出端口上的值。而如果将PIO Core硬件配置为双向模式,则从数据寄存器中读取将返回取决于方向寄存器值的值,设置为1将返回输出端口上存在的值,设置为0将返回未定义的值。

写入数据会将值存储到驱动输出端口的寄存器中。如果PIO核心硬件配置为仅输入模式,则写入数据无效。如果PIO内核硬件处于双向模式,则仅当方向寄存器中的相应位设置为1(输出)时,寄存器值才会出现在输出端口上。

direction寄存器

假设端口是双向的,则方向寄存器控制每个PIO端口的数据方向。当方向上的位n设置为1时,端口n驱动数据寄存器相应位中的值。

仅当将PIO硬件配置为双向模式时,方向(direction)寄存器才存在。在仅输入,仅输出和输入输出模式下,方向寄存器不存在。在这种情况下,读取方向返回未定义的值,写入方向无效。模式(输入,输出,输入输出或双向)在系统生成时指定,并且无法在运行时更改。

复位后,所有方向寄存器位均为0,因此所有双向I / O端口均配置为输入。如果这些PIO端口连接到设备引脚,则引脚将保持高阻抗状态。在双向模式下,您将需要写入方向寄存器以更改PIO端口(0输入,1输出)的方向。

interruptmask寄存器

将中断屏蔽寄存器中的某个位置1,可以启用相应PIO输入端口的中断。中断行为取决于PIO内核的硬件配置。

仅当硬件配置为生成IRQ时,中断屏蔽寄存器才存在。如果内核无法生成IRQ,则读取中断屏蔽将返回未定义的值,而写入中断屏蔽则无效。

复位后,中断屏蔽的所有位均为零,因此所有PIO端口的中断均被禁用。

edgecapture寄存器

每当在输入端口n上检测到边沿时,边沿捕获寄存器中的位n就会设置为1。Avalon-MM主外设可以读取边缘捕获寄存器,以确定是否在任何PIO输入端口上发生了边缘。如果边缘捕捉寄存器位已预先设置,则in_port切换活动将不会更改值。

如果关闭了为边缘捕获寄存器启用位清除选项,则将任何值写入边缘捕获寄存器都将清除寄存器中的所有位。否则,向寄存器中的特定位写入1只会清除该位。

在Platform Designer中生成IP的过程中指定了要检测的边缘类型。仅当硬件配置为捕获边缘时,edgecapture寄存器才存在。如果未将内核配置为捕获边缘,则从edgecapture读取将返回未定义的值,并且写入edgecapture无效。

中断行为

PIO内核输出单个IRQ信号,该信号可以连接到系统中的任何主外围设备。主机可以读取数据寄存器或边缘捕获寄存器,以确定哪个输入端口引起了中断。

当硬件配置为电平敏感中断时,只要数据和中断屏蔽寄存器中的相应位为1,就确定IRQ。当硬件配置为边缘敏感中断时,只要边缘捕获和中断掩码中的相应位为IRQ,就置位。寄存器为1。IRQ一直保持有效,直到通过禁用中断屏蔽中的相应位或写入边沿捕获来明确确认为止。

二、读写PIO寄存器

参考intelFPGA\22.1std\ip\altera\sopc_builder_ip\altera_avalon_pio\inc\altera_avalon_pio_regs.h获取PIO寄存器读写宏定义函数。

读写寄存器0(data寄存器)

#define IORD_ALTERA_AVALON_PIO_DATA(base)             IORD(base, 0) //读寄存器0
#define IOWR_ALTERA_AVALON_PIO_DATA(base, data)       IOWR(base, 0, data)//写寄存器0

读写寄存器1(direction寄存器)

#define IORD_ALTERA_AVALON_PIO_DIRECTION(base)        IORD(base, 1) //读寄存器1
#define IOWR_ALTERA_AVALON_PIO_DIRECTION(base, data)  IOWR(base, 1, data)//写寄存器1

读写寄存器2(interruptmask寄存器)

#define IORD_ALTERA_AVALON_PIO_IRQ_MASK(base)         IORD(base, 2) //读寄存器2
#define IOWR_ALTERA_AVALON_PIO_IRQ_MASK(base, data)   IOWR(base, 2, data)//写寄存器2

 

读写寄存器3(edgecapture寄存器)

#define IORD_ALTERA_AVALON_PIO_EDGE_CAP(base)         IORD(base, 3) //读寄存器3
#define IOWR_ALTERA_AVALON_PIO_EDGE_CAP(base, data)   IOWR(base, 3, data)//写寄存器3

 

所以可以直接调用可以直接调用函数IOWR(base, offset, data)和IORD(base, offset)来读写这4个寄存器。

应用举例:

#define KEY_BASE 0x50050//外设基地址定义
IOWD(LED_BASE, 3);//读取寄存器3的值
IOWR(KEY_BASE, 3, 0x00);//将0x00写入到3寄存器

 

其中,base是要访问的IO口的基地址,data是要写入的数据。offset取值是0、1、2、3,代表PIO四个不同的寄存器。

 

标签:读写操作,IP,PIO,端口,IOWR,base,寄存器,data
From: https://www.cnblogs.com/DoreenLiu/p/18298708

相关文章

  • 【版面有限,早投稿早录用】第三届图像处理、目标检测与跟踪国际学术会议(IPODT 2024)
    第三届图像处理、目标检测与跟踪国际学术会议(IPODT2024)将于2024年8月9-11日在中国南京召开。本次会议旨在为全球的研究人员、工程师、学者和业界专家提供一个展示和讨论图像处理、目标检测与跟踪最新进展的平台,促进这些领域的科研与技术发展。会议内容涵盖从基础研究到应用开......
  • [TCP/IP]可靠性
    重传机制TCP实现可靠传输的方式之一,是通过序列号与确认应答。在TCP中,当发送端的数据到达接收主机时,接收端主机会返回一个确认应答消息,表示已收到消息。但在错综复杂的网络,并不一定能如上图那么顺利能正常的数据传输,万一数据在传输过程中丢失了呢?所以TCP针对数据包丢失的......
  • JavaScript进阶(四)---js解构
    目录一.定义:二.类型:1.数组解构:1.1变量和值不匹配的情况1.2多维数组2.对象解构3.对象数组解构4.函数参数解构5.扩展运算符一.定义:JavaScript中的解构(Destructuring)是一种语法糖,它允许我们从数组或对象中提取数据,并将这些数据赋值给新的变量。解构使得代码更......
  • [NOIP2014] 解方程
    思路首先我们可以观察到\(n\)和\(m\)与\(a_i\)相比小的很多,所以我们可以考虑直接暴力求解但是\(a_i\)太大了,所以如果需要直接计算的话需要全程使用高精度算法。因为高精度算法代码量有大速度又慢我们可依考虑将\(a_i\)转化为一个极大的指数取模的结果,因为只有是模数的......
  • 如何使用 Unity 的 ScriptableObjects 和 Resources 系统来创建一个简易的数据库系统,
    1.引言问题:如何在Unity中存储数据?解决方案:使用ScriptableObjects和Resources系统创建一个易于使用和管理的数据库。优势:自动读写数据自动处理资源实例化和更改无需额外插件使用用户定义键进行访问可扩展性强2.实现2.1项目结构四个主要的脚本:Item......
  • 2022 RoboCom CAIP(本科组)国赛个人题解
    RC-u1智能红绿灯为了最大化通行效率同时照顾老年人穿行马路,在某养老社区前,某科技公司设置了一个智能红绿灯。这个红绿灯是这样设计的:路的两旁设置了一个按钮,老年人希望通行马路时会按下按钮;在没有人按按钮的时候,红绿灯一直为绿灯;当红绿灯为绿灯时,有人按下按钮,第一次按下......
  • SOMEIPSRV_SD_MESSAGE_06:当需要返回特定版本的次要版本时
    测试目的:验证当请求返回特定次版本的服务实例时,服务发现消息中的MinorVersion字段是否被正确设置为该特定版本。描述本测试用例旨在确保SOME/IP服务发现协议中,当请求特定次版本的服务实例时,MinorVersion字段被设置为请求的特定版本号。测试拓扑:具体步骤:DUT配置:在<D......
  • WPF WebBrowser navigate to website via url and escape script error warning
    Copyfrom https://www.iditect.com/faq/csharp/wpf-webbrowser-control--how-to-suppress-script-errors.html#:~:text=To%20suppress%20these%20script%20errors%2C%20you%20can%20handle,using%20the%20Cancel%20property%20of%20the%20WebBrowserNavigatingEventArgs%20pa......
  • Redis数据结构—跳跃表 skiplist 实现源码分析
    Redis是一个开源的内存数据结构存储系统,它可以用作数据库、缓存和消息中间件。Redis的数据结构非常丰富,其中跳跃表(skiplist)是一种重要的数据结构,它被用来实现有序集合(sortedsets)。跳跃表是一种概率型数据结构,它通过多层链表来实现快速的查找操作。跳跃表的结构类似于多层索引,......
  • 宝塔面板环境站点开启CDN后如何获取真实IP地址(多设置方法)
    这个问题是周末的时候帮助一个网友设置的,这里把问题简单的整理出来。这个同学有在使用宝塔面板搭建的WEB环境,且他的网站有开启和使用CDN加速,但是在加速之后呢日志中看不到真实的访客IP地址,而是CDN的节点IP,这个就不利于分析数据。所以,需要确保CDN能正常使用,而且日志的IP地址也能看......