闲来无事,发两个小程序玩玩

利用HI_MPI_SYS_SetReg、HI_MPI_SYS_GetReg实现GPIO驱动程序

#include /*

#define GPIO_IR_CUT (0x201C0000 + 0x400) //GPIO8_0 0x00

#define GPIO_CDSADC (0x201B0000 + 0x400) //GPIO7_6 0x40

#define GPIO_INFRARED (0x201C0000 + 0x400) //GPIO8_1 0x01

#define GPIO_LIGHTBOARD_LED (0x20180000 + 0x400) //GPIO4_2 0x04

#define GPIO_ONBOARD_LED (0x20150000 + 0x400) //GPIO1_7 0x80

#define GPIO_RESER (0x20180000 + 0x400) //GPIO4_6 0x40

#define GPIO_WIFI_EN (0x20140000 + 0x400) //GPIO0_3 0x08

#define GPIO_SPEAKER (0x20180000 + 0x400) //GPIO4_0 0x00

*/

#define GPIO_DATA(gpio_group_reg_base, gpio_offset) IO_ADDRESS(((gpio_group_reg_base) + 0x000) + (1 << ((gpio_offset) + 2)))

#define GPIO_DIR(gpio_group_reg_base) IO_ADDRESS((gpio_group_reg_base) + 0x400)

int h_gpio_group_reg_base = {

0x20140000, //GPIO0

0x20150000, //GPIO1

0x20160000, //GPIO2

0x20170000, //GPIO3

0x20180000, //GPIO4

0x20190000, //GPIO5

0x201A0000, //GPIO6

0x201B0000, //GPIO7

0x201C0000, //GPIO8

};

int hal_hi3518ev200_gpio_dir_config(unsigned char gpio_group, unsigned char gpio_offset, unsigned char flag)

{

unsigned int val = 0;

unsigned int addr = 0;

addr = GPIO_DIR(h_gpio_group_reg_base[gpio_group]);

if( 0 == HI_MPI_SYS_GetReg(addr,val) )

{

if(flag)

{

val |= 1 << gpio_offset;

}

else

{

val &= ~(1 << gpio_offset);

}

if( 0 == HI_MPI_SYS_SetReg(addr,val) )

{

printf("HI_MPI_SYS_SetReg success! val: %d\n",val);

return 0;

}

else

{

printf("HI_MPI_SYS_SetReg Error! val: %d\n",val);

return -1;

}

}

else

{

printf("HI_MPI_SYS_GetReg Error! val: %d\n",val);

return -1;

}

}

int gpio_write(unsigned char gpio_group, unsigned char gpio_offset, unsigned char flag)

{

unsigned int val = 0;

unsigned int addr = 0;

addr = GPIO_DATA(h_gpio_group_reg_base[gpio_group], gpio_offset);

if(flag)

{

val = 1 << gpio_offset;

}

else

{

val = 0;

}

if( 0 == HI_MPI_SYS_SetReg(addr,val) )

{

printf("HI_MPI_SYS_SetReg success! val: %d\n",val);

return 0;

}

else

{

printf("HI_MPI_SYS_SetReg Error! val: %d\n",val);

return -1;

}

}

int gpio_read(unsigned char gpio_group, unsigned char gpio_offset)

{

unsigned int val = 0;

unsigned int addr = 0;

addr = GPIO_DATA(h_gpio_group_reg_base[gpio_group], gpio_offset);

if( 0 == HI_MPI_SYS_GetReg(addr,val) )

{

if(val & (1 << gpio_offset))

{

val = 1;

}

else

{

val = 0;

}

printf("HI_MPI_SYS_GetReg Error! val: %d\n",val);

return val;

}

else

{

printf("HI_MPI_SYS_GetReg Error! val: %d\n",val);

return -1;

}

}

int hal_hi3518ev200_gpio_init(void) //gpio初始化函数

{

hal_hi3518ev200_gpio_dir_config(4,0,1); //GPIO_SPEAKER,设置GPIO4_0输出模式

hal_hi3518ev200_gpio_dir_config(0,3,1); //GPIO_WIFI_EN,设置GPIO0_3输出模式

hal_hi3518ev200_gpio_dir_config(4,6,0); //GPIO_RESER,设置GPIO4_6输入模式

hal_hi3518ev200_gpio_dir_config(1,7,1); //GPIO_ONBOARD_LED,设置GPIO1_7输出模式

hal_hi3518ev200_gpio_dir_config(4,2,1); //GPIO_LIGHTBOARD_LED,设置GPIO4_2输出模式

hal_hi3518ev200_gpio_dir_config(8,1,1); //GPIO_INFRARED,设置GPIO8_1输出模式

hal_hi3518ev200_gpio_dir_config(7,6,0); //GPIO_CDSADC,设置GPIO7_6输入模式

hal_hi3518ev200_gpio_dir_config(8,0,1); //GPIO_CDSADC,设置GPIO8_0输出模式

return 0;

}

int hal_hi3518ev200_speaker_enable(void) //使能喇叭

{

gpio_write(4,0,0); //输出0开启扬声器

return 0;

}

int hal_hi3518ev200_speaker_disable(void) //关闭喇叭

{

gpio_write(4,0,0); //输出1关闭扬声器

return 0;

}

int hal_hi3518ev200_wifi_poweron(void) //使能wifi供电

{

gpio_write(0,3,1); //输出1打开wifi供电

return 0;

}

int hal_hi3518ev200_wifi_powerdown(void) //关闭wifi供电

{

gpio_write(0,3,0); //输出0关闭wifi供电

return 0;

}

int hal_hi3518ev200_check_reset(void) //复位按键 >>>返回 1 按下, 返回 0 没按

{

int reset_value;

reset_value = gpio_read(4,6); //获取复位按键键值

return reset_value;

}

int hal_hi3518ev200_led_control(int led_index ,int value) //led控制 led_index 0:板载LED;1:灯板LED || value 1:亮 0:灭

{

if(led_index == 0)

{

gpio_write(1,7,~value)) //板载LED

}

else

{

gpio_write(4,2,~value)) //灯板LED

}

return 0;

}

int hal_hi3518ev200_get_cds_value(void) //光敏 1白天 0 夜晚

{

int reset_value;

reset_value = gpio_read(7,6); //获取复位按键键值

return reset_value;

}

int hal_hi3518ev200_set_ircut_value(int value) //icut 0/1 切换

{

gpio_write(8,0,value)) //板载LED

return 0;

}

int main(void)

{

hal_hi3518ev200_gpio_init();

return 0;

}

该程序就是操作GPIO的寄存器,分为两步,一步复用,一步使能方向。

当然,对于复杂一点的GPIO操作的话,驱动肯定是不能这样写的了,还是老老实实写成module的模式。

gpio复用 海思_实现海思平台GPIO驱动相关推荐

  1. gpio复用 海思_对海思上GPIO的一点理解

    [i=s] 本帖最后由 initios 于 2017-2-22 16:48 编辑 [/i] 最近兄弟我在折腾一块3516cv200+IMX323的板子,弄到GPIO这块时,一开始一头雾水,一番搜索加看 ...

  2. 3520dv500 海思_【海思Hi3516CV500系列芯片】价格_厂家 - 中国供应商

    所有产品均为***原厂原装***A,货源稳定,型号齐全,价格公道.1.索尼系列有:ICX887AQA.ICX663BKA-A.ICX673AKA-7.ICX811AKA-A.ICX662BKA-A.I ...

  3. android 副屏驱动_高通 android平台LCD驱动分析

    目前手机芯片厂家提供的源码里包含整个LCD驱动框架,一般厂家会定义一个xxx_fb.c的源文件,注册一个平台设备和平台驱动,在驱动的probe函数中来调用register_framebuffer(), ...

  4. gpio复用 海思_我的内核学习笔记15:海思Hi3516平台GPIO使用记录

    本文介绍海思平台 Hi3516 的 GPIO 使用,包括手册介绍及用户空间控制. 一.GPIO概览 Hi3516 芯片支持 12 组GPIO(General Purpose Input/Output) ...

  5. 我的内核学习笔记15:海思Hi3516平台GPIO使用记录

    本文介绍海思平台 Hi3516 的 GPIO 使用,包括手册介绍及用户空间控制. 一.GPIO概览 Hi3516 芯片支持 12 组GPIO(General Purpose Input/Output) ...

  6. 海思平台gpio模拟spi驱动总结

    1. 海思平台gpio如何映射到编号 #define GPIO_TO_PIN(bank, gpio) (8 * (bank) + (gpio)) 海思gpio引脚每组总是从0~7,而且引脚从头都有唯一 ...

  7. mysql移植海思_海思Hi3518EV200(5)图像sensor驱动开发

    1. sensor开发框图 2. 设备驱动加载及硬件系统配置 load3518e脚本主要是用来配置硬件系统的参数(引脚复用.sensor时钟.VI时钟)加载驱动(.ko),包括访问sensor的I2C ...

  8. [转帖]华为的“大海思”与“小海思”

    华为的"大海思"与"小海思" https://www.cnbeta.com/articles/tech/828275.htm 没先到华为海思这么狠.. 作为华为 ...

  9. 海思Hi3518EV100开发(1)——Sensor驱动

    本文是一篇转载,虽然平台不大一样,应该差别不大.原文地址为:https://yq.aliyun.com/articles/542505?spm=a2c4e.11153940.0.0.7a522e13Y ...

最新文章

  1. JBuilder中光标错位的解决办法
  2. python周志_Python学习周志—第一周(入门知识)
  3. 每日涉猎技术点存档(2019年02月)
  4. JAVA-入门(内含jdk配置)
  5. 震惊!三个万引大佬嘴仗,原来是为了他……?
  6. 《揭秘 CSS》开源啦
  7. php实现微信小程序人脸识别登录
  8. 怎么在linux系统上安装软件,教你如何在Linux系统安装软件
  9. android同步服务器时间同步,Android时间与服务器同步方案
  10. wgs84坐标转换,地图拾取wgs84坐标工具推荐
  11. 外贸开发信各国发送的最佳时间
  12. 古风排版 分数 20作者 陈越单位 浙江大学
  13. 【Python】从0开始写爬虫——扒一下狗东
  14. 解决插入word文档中的图片变得不清晰问题
  15. H G W S哪一个不是状态函数_师大版成语词典发布!不学不是师大人!
  16. P2770【USACO 2014 January Gold】难度系数
  17. Excel快捷的把列宽调整到合适的宽度
  18. 熵值法的Python实现
  19. Python面试题(三)
  20. 使用Google地图的测距功能

热门文章

  1. 1730: 数区间(线段覆盖,贪心)
  2. 虚拟机建立快照_使用qmeu-img创建虚拟机(创建虚拟机,虚拟机快照)
  3. 穿越时空,跟我一起探索云栖数字谷(2021云栖大会免费送票)
  4. PolarDB-X 2.0 全局 Binlog 和备份恢复能力解读
  5. 如何通过Graph+AI的方法打造高精度风控模型?
  6. 大文件下载及视频点播的CDN加速实践
  7. Bilibili资深运维工程师:DCDN在游戏应用加速中的实践
  8. 阿里面试官:什么样的人能在阿里晋升?
  9. 支付宝研究员王益的建议:“学好语文,才能写好代码”
  10. 用Unity盖房子(一):《勇者斗恶龙:建造者2》游戏功能的猜想