当前位置: 手机中国论坛 > 资源分享 > 教程 > 帖子正文

[教程] 三星四核4418开发板荣品RP4418修改GPIO功能配置与分析

2016-06-27 17:08:40 352 评论(0)

RP4418开发板是一款高性能的四核Cortex-A9核心板,由深圳荣品电子设计、生产和发行销售。它采用三星S5P4418处理器,运行主频可高达1.4GHz,S5P4418内部集成了Mali-400 MP高性能图形引擎,支持3D图形流畅运行,并可播放1080P全高清视频。

搭载Android5.1操作系统,标配1G内存+16G存储,配置10.1寸LVDS接口的屏(1024*600分辨率)。支持5路USB HOST接口,一路OTG接口,支持一键USB启动,支持一键SD卡启动,支持MIPI LCD接口,支持HDMI接口,支持1路RS485接口,2路2W喇叭接口,支持待机功能,(电流小于0.1W,15mA)

对于企业产品研发或者项目方案的时候,用户在使用荣品开发板进行开发,如果硬件上有所修改,那么必须要修改GPIO,本篇主要介绍RP4418开发板的GPIO功能配置与说明。

对GPIO的认识主要有以下几方面:

●开发板GPIO引脚软硬件对应

●GPIO输出功能设置

●GPIO输入功能设置

●GPIO电平读取

●GPIO中断功能设置

1、开发板GPIO引脚软硬件对应:

在RP4418开发板内核中,所有GPIO引脚被分为ABCDE等几组,每组32个。每组引脚起始地址定义如下图。

【图片1】三星四核4418开发板荣品RP4418修改GPIO功能配置与分析

硬件引脚都对应分配在这几组引脚中:

例如:

GPIOB29对应PAD_GPIO_B + 29

硬件上的命名:GPIOB29

驱动、触摸屏驱动、按键驱动等都有对GPIO设置,请参考源码对应的修改进行理解。

3、GPIO输入功能设置:

如果我们想了解一个外部的电平的高低情况,那么我们可以通过GPIO连接该路电平,接着把GPIO设成输入功能即可。

软件上用一个函数即可让GPIO变成输入功能

int gpio_direction_input(unsigned gpio)

从这上面我们只看到一个参数,就是对应GPIO的值

比如我要让GPIOC10改成输入功能

gpio_direction_input(PAD_GPIO_C + 10);

4、GPIO电平读取:

当我们需要读取当前GPIO的值(输出、输入、复用功能都可以读取),我们也可以通过函数去读取。

static inline int gpio_get_value(unsigned gpio)

参数GPIO代表需要读取GPIO对应的值。

比如我要读GPIOC10的值

gpio_get_value(PAD_GPIO_C + 10)

5、GPIO中断功能设置:

当我们需要引脚中断功能的时候,那么我们就需要实现GPIO的中断功能。

外部引脚设置为中断功能。这个是软件人员最喜欢的GPIO,因为我们想要获取外部设备状态变化情况的时候,第一,我们可以通过中断功能马上得到当前状态(响应时间很短,能够快速进行处理),另外,比轮询的方式节约更多的代码量和减轻CPU的负载。

配置中断功能时,要用到这个函数:

【图片2】三星四核4418开发板荣品RP4418修改GPIO功能配置与分析

参数:

unsigned io :代表单个GPIO引脚

int on:置为1,则代表使能中断功能,置为0,则说明不使能中断功能,即不作为中断引脚。

我们当前使用的触摸屏驱动就是使用中断的方式

Gt9xx.c (driversinputtouchscreen)

触摸屏使用的了MCU_TOUCH_INT作为中断脚

【图片3】三星四核4418开发板荣品RP4418修改GPIO功能配置与分析

MCU_TOUCH_INT 对应的GPIO引脚为GPIOB29

接下我们看一下驱动里怎么把GPIOB29脚配置为中断功能

【图片4】三星四核4418开发板荣品RP4418修改GPIO功能配置与分析

GTP_GPIO_REQUEST(GTP_INT_PORT, "GTP_INT_IRQ");//先获取该引脚

gpio_direction_input(GTP_INT_PORT);//设为输入功能

nxp_soc_gpio_set_int_enable(GTP_INT_PORT,1);//再使能中断

GTP_GPIO_FREE(GTP_INT_PORT);//最后释放引脚

中断包含上升沿、下降沿、低电平、高电平这四种触发。

配置方面就有几种情况,请参考

irq.h (includelinux)

【图片5】三星四核4418开发板荣品RP4418修改GPIO功能配置与分析

我们使用的RP4418开发板触摸屏是下降沿触发,所以我们配置的函数

request_irq(ts->client->irq,goodix_ts_irq_handler,IRQ_TYPE_EDGE_FALLING,"goodix_ts", goodix_ts);

对于触发的几种方式,大家可以到网上查找资料进行分析了解。


不吐不快,我来说两句... 登录 | 注册

发布
暂时没有回复

您需要注册登录后,才能回帖哦! 登录 | 注册

最新动态
  • 嘘~这里的黎明静悄悄~