HPS端GPIO控制

HPS端GPIO控制该笔记主要记录 HPS 端的 GPIO 如何控制 包括控制 LED 和 Key1 GPIO 地址映射 PeripheralBa 000064M2 HPS 外设 1 GPIOControll 支持数字消抖可配置中断模式支持上限 71 个 IO 引脚 14 个输入引脚由三个控制器控制 GPIO1GPIO2

该笔记主要记录HPS端的GPIO如何控制,包括控制LED和Key

1.GPIO地址映射

Peripheral Base Address 0xf000_0000 64M

2.HPS外设

(1)GPIO Controller 
    支持数字消抖
    可配置中断模式
    支持上限71个IO 引脚,14个输入引脚
    由三个控制器控制,GPIO1 GPIO2 GPIO3
GPIO0 control GPIO[28:0] GPIO1 control GPIO[57:29] GPIO2 control GPIO[70:58]& GPI[13:0]

3.GPIO 寄存器组

    gpio_swporta_ddr:配置IO引脚方向
    gpio_swporta_dr:写数据到输出引脚上
    gpio_ext_porta:从输入端口读取数据

4.HPS_Led && Key

    LED和key连接到GPIO控制器上,我们可以通过控制GPIOcontroller实现操作HPS_Led & HPS_Key
    实现方式是通过软件API
    1)open:用来打开内存映射设备驱动   
    2)mmap:映射物理地址到物理用户空间
    3)alt_read_word:从指定寄存器读取一个值
    4)alt_write_word:写入一个值到指定寄存器
    5)munmap:清除内存映射
    6)close:关闭设备驱动
    7)alt_setbits_word:设定指定寄存器的指定位为1
    8)alt_clrbits_word: 设定指定寄存器的指定位为0 

5.对应到GPIO1寄存器:

    1)用open函数打开内存映射设备驱动
    2)mmap函数得到对应的虚拟基地址
    3)虚拟基地址+GPIO1控制器各寄存器的偏移地址,即得到GPIO1控制器各寄存器的地址入口 
    4)使用open mmap得出虚拟基地址
 if ((fd = open("d/dev/mem",(O_RDWR | O_SYNC))) == -1) { printf("ERROR:could not open \"dev/mem\"...\n"); retrun(1); } virtual_base = mmap (NULL,HW_REGS_SPAN,(PROT_READ | PROT_WRITE),MAP_SHARD,fd,HW_REGS_BASE);

        5)虚拟地址+GPIO寄存器偏移地址得到地址入口
        例:GPIO1方向寄存器gpio_swporta_ddr
        (virtual_base + ((uint32_t) ALT_GPIO1_SWPROTA_DDR_ADDR & (uint32_t) (HW_REGS_MASK)));
        6)通过software API结合bit_mask 操作HPS_LED HPS_Key
    
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

转载于:https://www.cnblogs.com/Lee-blog/p/6839535.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/230565.html原文链接:https://javaforall.net

(0)
上一篇 2026年2月15日 下午2:01
下一篇 2026年2月15日 下午2:22


相关推荐

  • Volatile详解,太详细了「建议收藏」

    Volatile详解,太详细了「建议收藏」Volatile可能是面试里面必问的一个话题吧,对他的认知很多朋友也仅限于会用阶段,今天我们换个角度去看看。先来跟着丙丙来看一段demo的代码:你会发现,永远都不会输出有点东西这一段代码,按道理线

    2022年7月4日
    25
  • linux 内核 addr2line,linux内核调试技巧之addr2line

    linux 内核 addr2line,linux内核调试技巧之addr2lineaddr2line 工具是一个可以将指令的地址和可执行影像转换为文件名 函数名和源代码行数的工具 这在内核执行过程中出现崩溃时 可用于快速定位出出错的位置 进而找出代码的 bug 用法 addr2line a addresses bbfdname target bfdname C demangle style efilename exe fi

    2026年3月18日
    2
  • 交换机堆叠配置

    交换机堆叠配置两台交换机堆叠 网络拓扑 堆叠配置 三台交换机堆叠 网络拓扑 堆叠配置

    2026年3月18日
    2
  • a4如何打印双面小册子_a4如何打印双面小册子[通俗易懂]

    a4如何打印双面小册子_a4如何打印双面小册子[通俗易懂]展开全部1、在Word中打开一篇文档,点击“文件”——“打印”菜单项,准备开始打印工作。2、弹出“32313133353236313431303231363533e4b893e5b19e31333433623230打印”对话框,在“打印机”名称框的左侧,点击“属性”按钮,点击此按钮,开始设置小册子打印。3、弹出打印机属性对话框,在“双面打印”部分,点击下拉菜单,选择“双面打印,短边“装订。(目…

    2025年9月23日
    8
  • java三大特征_java三大特性是什么?

    java三大特征_java三大特性是什么?java三大特性:1、封装,是指隐藏对象的属性和实现细节,仅对外提供公共访问方式;2、继承,从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力;3、多态,一个方法可以有多种实现版本,即“一种定义,多种实现”。Java三大特性,算是Java独特的表现,提到Java的三大特性,我们都会想到封装,继承和多态这是我们Java最重要的特性。封装(Encapsulat…

    2022年7月7日
    26
  • Tair缓存系统学习 (数据结构存储系统)

    Tair缓存系统学习 (数据结构存储系统)1 Tair 简介 nbsp nbsp nbsp nbsp Tair 是一个类似于 map 的 key value 结构存储系统 也就是缓存系统 具备标准的特性是 高性能 高扩展 高可靠 也就是传说中的三高产品 支持分布式集群部署 官网说目前支持 java 和 c 这两个版本 nbsp nbsp nbsp nbsp 适用场景是轻量级缓存应用 为小文件和零碎文件 固定数据文件存储的优化 nbsp 2 Tair 存储方式 nbsp nbsp nbsp nbsp 2 1 非持久化 nbsp nbsp nbsp nbsp nbsp nbsp nbsp

    2026年3月17日
    1

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号