[海思]--Hi3516a--GPIO(用户层)

[海思]–Hi3516a–GPIO(用户层)控制篇

简介

gpio 玩过单片机的人都应该很熟悉了,然而在linux中,gpio操作属于内核层的范畴,用户想要直接配置gpio的模式和读取gpio的状态是比较困难的一件事情。那么本文主要讲述如何利用海思sdk已有的资源来实现用户层的gpio操作

海思GPIO配置说明

首先总的描述一下海思GPIO的配置过程,海思的GPIO大多数会含有管脚功能复用。那么步骤如下:
①将GPIOx_x的复用功能寄存器设置为 通用GPIO模式
②配置GPIOx_x的方向(dir),输入或是输出
③获取(input时)或设置(output时)GPIOx_x的值

**注:
①下面我以GPIO9_6为例
②SDIO1和SDIO2的相关管脚配置成GPIO模式时需要多配置一个MISC_CTRL3寄存器,具体请参考《Hi3516A/Hi3516D 专业型HD IP Camera Soc用户指南.pdf》-P1761页**


海思GPIO复用寄存器

①查看海思管脚名
查看海思管脚名


②根据管脚名,从查找复用寄存器
2.1复用寄存器基地址
复用寄存器基地址
2.2GPIO9_6管脚的复用寄存器
这里写图片描述


由上述从文档《Hi3516A/Hi3516D 专业型HD IP Camera Soc用户指南.pdf》查阅的资料得知,如果要配置 GPIO9_6 这个管脚为普通GPIO功能,那么需要将复用寄存器[ 0x200f000+0x088 ]([寄存器基地址+地址偏移] ),设置为0x00.


海思GPIO寄存器

'''步骤 1. 参考“管脚复用控制寄存器”配置管脚的相应位,使能需要使用 GPIO 管脚功能。'''
'''步骤 2. 配置寄存器 GPIO_DIR,选择 GPIO 是作为输入还是输出。'''
'''步骤 3. 当配置成输入管脚时,读取 GPIO_DATA 寄存器可查看输入信号值;当配置成输出管脚时,通过向 GPIO_DATA 寄存器写入输出值可控制 GPIO 管脚输出电平。'''

①各组管脚GPIO寄存器基地址
这里写图片描述


②地址偏移
这里写图片描述


③方向寄存器
这里写图片描述

④数据寄存器
当 GPIO_DIR 相应的比特配置为输入时,有效读取的结果将返回管脚的值;当配置为输出的时候,有效读取的结果将返回写入的值。GPIO_DATA 寄存器利用 PADDR[9:2]实现了读写寄存器比特的屏蔽操作。该寄存器对应 256 个地址空间。PADDR[9:2]分别对应 GPIO_DATA[7:0],当相应的 bit 为高时,则可以对相应的位进行读写操作;反之,若对应 bit 为低则不能进行操作。例如:
若地址为 0x3FC(0b11_1111_1100),则对 GPIO_DATA[7:0]这 8bit 操作全部有效。
若地址为 0x200(0b10_0000_0000),则仅对 GPIO_DATA[7]的操作有效。
这里写图片描述


代码

伪代码

综合上边所有的资料,我们可以写一下伪代码

'''设置Gpio9_6复用寄存器'''
setReg(0x200f0088,0x00);
'''设置Gpio9_6为输出方向'''
value = getReg(0x201d0400);
setReg(0x201d0400,value|(1<<6));
'''设置Gpio9_6为输出高电平'''
setReg(0x201d0100,0xff);
'''设置Gpio9_6为输出低电平'''
setReg(0x201d0100,0x00);

C代码

根据伪代码的理论,我这里写了一份基本上通用的GPIO用户层C++代码
hisiGpio.cpp代码可以从下载中心下载HisiGpio.cpp

/*
 * HisiGpio.h
 *
 *  Created on: 2018年1月11日
 *      Author: JasonHuo
 */

#ifndef COM_HISIGPIO_H_
#define COM_HISIGPIO_H_
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include "hi_comm_sys.h"
#include "mpi_sys.h"
void HisiGpioDirCfg(int group,int pin,bool isOutput);
void HisiGpioSetValue(int group,int pin,bool isHeight);
int HisiGpioGetValue(int group,int pin);
#endif /* COM_HISIGPIO_H_ */
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值