该笔记主要记录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

HPS端的GPIO如何控制的更多相关文章

  1. 通过HPS控制FPGA端的GPIO

    该笔记主要记录HPS端如何通过AXI Bridge控制FPGA端口的GPIO,主要是如何操作FPGA侧的Led 1.AXI Bridge         AXIB主要包括H2FB.F2HB.LWH2F ...

  2. HPS端如何通过AXI Bridge控制FPGA端口的GPIO

    该笔记主要记录HPS端如何通过AXI Bridge控制FPGA端口的GPIO,主要是如何操作FPGA侧的Led 1.AXI Bridge         AXIB主要包括H2FB.F2HB.LWH2F ...

  3. android gpio口控制

    android gpio口控制  GPIO口控制方式是在jni层控制的方式实现高低电平输出,类似linux的控制句柄方式,在linux系统下将每个设备看作一个文件,android系统是基于linux内 ...

  4. OpenWRT GPIO人口控制 WLED

    Linux根据系统GPIO系统架构简介 关于这个GPIO我一直认为非常非常长的时间easy.但.当你需要给一个特定的系统,参与这些GPIO什么时候.你会找到.不对,实例,mt7620n. GPIO#7 ...

  5. 全志R58平台的GPIO引脚控制

    全志R58平台的GPIO引脚控制 2017/8/18 15:50 版本:V1.0 开发板:SC5806(全志R58平台) SDK:android4.4.4 本文以GPIO引脚PD24为例,在开发板的背 ...

  6. Win10 IoT C#开发 3 - GPIO Pin 控制发光二极管

    Windows 10 IoT Core 是微软针对物联网市场的一个重要产品,与以往的Windows版本不同,是为物联网设备专门设计的,硬件也不仅仅限于x86架构,同时可以在ARM架构上运行. 上一篇文 ...

  7. CC2530学习路线-基础实验-GPIO 按键控制LED灯亮灭(2)

    目录 1.前期预备知识 1.1 新大陆Zigbee模块按键电路图 1.2 CC2530相关寄存器 1.3 CC2530中断走向图 1.4 使用C语言为51单片机编写中断程序 1.5 *函数指针 2. ...

  8. 【HLSDK系列】服务端实体 edict_t 和 控制类

    我们来了解一下引擎是怎么管理实体的吧!我们这里就说说服务端的实体(edict_t) 服务端用 edict_t 这个结构体来保存一个实体,可以说一个 edict_t 就是一个 服务端实体,下文简称实体. ...

  9. linux下对/sys/class/gpio中的gpio的控制 (转)

        在嵌入式设备中对GPIO的操作是最基本的操作.一般的做法是写一个单独驱动程序,网上大多数的例子都是这样的.其实linux下面有一个通用的GPIO操作接口,那就是我要介绍的 “/sys/clas ...

随机推荐

  1. ES6 Map 原理

    ES6的Map的键可以是任意的数据结构,并且不重复. 那么map的底层原理是啥呢? Map利用链表,hash的思想来实现. 首先,Map可以实现删除,而且删除的数据可以是中间的值.而链表的优势就是在中 ...

  2. 总结:mysql的各种增删改查!

    (原创总结)分为数据库的增删改查,数据表(和字段)的增删改查,数据的增删改查 三部分!// 创建用户并授权 GRANT SELECT ON bodydb.user TO us@localhost ID ...

  3. 关闭Eslint检查

    Eslint是一个JavaScript的校验插件,通常用来校验语法或代码的书写风格.不过有点过于严格,通常缩减不同也会报错... 这会影响工作效率啊,最好就是在创建项目的时候不要ESlint(选择No ...

  4. Kibana创建索引成功,但一直不显示出来(Fielddata is disabled on text fields by default. Set fielddata=true........)

    现象 把EFK整个集群搭建完成后,通过Kibana操作界面创建索引(如图1),我创建了lile-zabbix*的索引,显示是创建成功了,但是只要我在重新刷新一次,已经创建的索引就“消失了”.后通过查看 ...

  5. 从零开始入门 | Kubernetes 中的服务发现与负载均衡

    作者 | 阿里巴巴技术专家  溪恒 一.需求来源 为什么需要服务发现 在 K8s 集群里面会通过 pod 去部署应用,与传统的应用部署不同,传统应用部署在给定的机器上面去部署,我们知道怎么去调用别的机 ...

  6. Netflix 开源 Polynote:对标 Jupyter,一个笔记本运行多种语言

    谈到数据科学领域的开发工具,Jupyter 无疑是非常知名的一种.它具有灵活高效的特点,非常适合进行开发.调试.分享和教学.近日,Netflix(奈飞)居然也玩起了跨界,他们开源了一个名为 Polyn ...

  7. Spring与Shiro整合

    Spring整合篇--Shiro 作者 : Stanley 罗昊 [转载请注明出处和署名,谢谢!] 什么是Shiro? 链接:https://www.cnblogs.com/StanleyBlogs/ ...

  8. setBounds方法,与setLayout(null)

    首先把相关容器的布局方式设为 setLayout(null); 然后调用组件的  setBounds() 方法 设置button的位置为(100,100) 长宽分别为 60,25 jButton.se ...

  9. Linux高级知识

    Linux高级知识 十一.LAMP架构 1.LAMP架构介绍.MySQL.MariaDB介绍.MySQL安装 2.MariaDB和Apache安装 3.安装PHP5和PHP7 4.Apache和PHP ...

  10. Numpy的基础用法

    1.用Numpy创建数组 numpy.array(object):创建数组,与array.array(typecode[, initializer])不同,array.array()只能创建一维数组 ...