zoukankan      html  css  js  c++  java
  • HPS端的GPIO如何控制

    该笔记主要记录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"...
    ");
                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
  • 相关阅读:
    使用echo $? 查看命令成功执行的原理
    Ubuntu 12.04下NFS安装配置图解
    使用nfsstat命令查看NFS服务器状态
    ORACLE 中rownum和row_number()的使用区别(可指定取sql结果集的第几个数据)
    toad调用存储过程,存储过程调用sql 类
    指纹协查统计sql
    oracle 解锁表
    【转】经典排序算法
    wget 命令用法详解
    Linux 带宽、CPU、内存占用情况
  • 原文地址:https://www.cnblogs.com/FZLGYZ/p/10461559.html
Copyright © 2011-2022 走看看