立即注册
登录
电子工程网
新闻
新品
文章
下载
视频
工具
论坛
研讨会
空间
穿prada的008的个人空间
https://www.eechina.com/space-uid-108322.html
[收藏]
[复制]
[RSS]
空间首页
博客
主题
留言板
个人资料
论坛
BBS
我的空间
好友
帖子
收藏
道具
勋章
任务
博客
【Rayeager PX2】PX2上使用GPIO口的例程
已有 1800 次阅读
2015-7-8 17:29
|
GPIO
之前楼主在论坛中已经分享了简单驱动的编写,现在楼主再来教刚接触板子的新手们如何引用调用GPIO,不过这里楼主并没有将GPIO口的函数封装成库,然后在eclipse上调用,楼主这边的例子,只是简单的用adb工具进入板中,然后用一个测试程序使用端口,有兴趣想要在安卓界面调用端口的,可以参考楼主之前写的那编jni调用的帖子。
首先我们依旧来简单地说下步骤,
1.在/kernel/drivers下建个文件夹,自己创建并添加Kconfig和makefile,内容如下,
gpio_K.png
(51.34 KB, 下载次数: 0)
下载附件
5 天前
上传
2.在该目录下写个gpio驱动,内容在最后
3.返回drivers目录,在目录下修改Kconfig和makefile,修改内容如下
4.进入内核,打开已写好的驱动。
驱动内容如下,
/***********************************************************************************
* driver for GPIO
*
**********************************************************************************/
#include <linux/miscdevice.h>
#include <linux/input.h>
#include <linux/clk.h>
#include <linux/delay.h>
#include <asm/io.h>
#include <asm/uaccess.h>
#include <linux/module.h>
#include <linux/init.h>
#include <mach/gpio.h>
#include <linux/gpio.h>
#define DEVICE_NAME "rkpx2_GPIO" //定义设备名
#define RKPX2_GPIO_MAJOR 101 //定义设备号
static struct class *dev_class//定义设备结构体
static int gpio_open(struct inode *inode, struct file *file)
{
int i
int err
i=0
err = gpio_request(RK30_PIN4_PD1, "GPIO4_D1")//申请端口gpio4_1,成功返回0,失败返回负的错误值
if(err)
{
printk(KERN_ERR "RK_PX2 failed to request GPIO4_D1 \n")
return err
}//若申请失败,则报错,然后推出,
err = gpio_request(RK30_PIN4_PD2, "GPIO4_D2")//申请端口gpio4_2,成功返回0,失败返回负的错误值
if(err)
{
printk(KERN_ERR "RK_PX2 failed to request GPIO4_D2 \n")
return err
}
err = gpio_request(RK30_PIN4_PD3, "GPIO4_D3")//申请端口gpio4_3,成功返回0,失败返回负的错误值
if(err)
{
printk(KERN_ERR "RK_PX2 failed to request GPIO4_D3 \n")
return err
}
err = gpio_request(RK30_PIN4_PD4, "GPIO4_D4")//申请端口gpio4_4,成功返回0,失败返回负的错误值
if(err)
{
printk(KERN_ERR "RK_PX2 failed to request GPIO4_D4 \n")
return err
}
printk(KERN_INFO "RK_PX2 GPIO opened 4 !\n")
gpio_direction_output(RK30_PIN4_PD1,1)//决定GPIO的方向,为输出
gpio_direction_output(RK30_PIN4_PD2,1)
gpio_direction_output(RK30_PIN4_PD3,1)
gpio_direction_output(RK30_PIN4_PD4,1)
return 0
}
static int gpio_close(struct inode *inode, struct file *file)
{
gpio_free(RK30_PIN4_PD1)
gpio_free(RK30_PIN4_PD2)
gpio_free(RK30_PIN4_PD3)
gpio_free(RK30_PIN4_PD4) //释放端口,
printk(KERN_INFO "RK_PX2 GPIO driver successfully close\n")
return 0
}
static int gpio_read(struct file *file, char *buffer, size_t size, loff_t *pos) //从内核中读取GPIO引脚的值
{
int ret
char key_buf[4]
if (gpio_get_value(RK30_PIN4_PD1)==0){
key_buf[0]=0
}else{
key_buf[0]=1
}
if (gpio_get_value(RK30_PIN4_PD2)==0){
key_buf[1]=0
}else{
key_buf[1]=1
}
if (gpio_get_value(RK30_PIN4_PD3)==0){
key_buf[2]=0
}else{
路过
鸡蛋
鲜花
握手
雷人
收藏
邀请
举报
全部
作者的其他最新博客
•
解决Popmetal板上I2C挂载额驱动不正常,含陀螺仪、重力传感器
•
RK3288开发板PopMetal上的GPIO驱动实例
•
PX2关于Adb工具的使用
•
PX2关于Adb工具的使用
•
PX2分享Android预设桌面定制与电量图标修改以及版本更改
•
yeelink在PX2上的运用(远程控制)
评论 (
0
个评论)
您需要登录后才可以评论
登录
|
立即注册
评论
穿prada的008
加为好友
给我留言
打个招呼
发送消息
关于我们
-
服务条款
-
使用指南
-
站点地图
-
友情链接
-
联系我们
电子工程网
© 版权所有
京ICP备16069177号
| 京公网安备11010502021702
返回顶部