版主: wanchong , wangyu , eepwwp , firedom

分享到:
共57条 1/6 1 2 3 4 5 6 »   

Edison / Gallileo 基础1 Gpio操作与中断 _Eclipse IDE

    [您是本帖的第5348位阅读者]
abgh668
我是MM
普通会员

最后登陆时间:2015-10-09 14:01:16

直达楼层
1# 发表于 2015-01-28 10:46:56
    在Eclipse 编写能让Edison / Galileo 运行的linux程序,大部分应用需要对引脚进行操作,
intel已经给我们提供了一个对引脚读写的类库,使用的时候需添加#include "mraa/gpio.h"类库

下面开始介绍mraa/gpio.h类库包含的函数

mraa_gpio_context mraa_gpio_init ( int pin)
描述
获取板卡中引脚号的实际地址
参数
pin:板卡引脚号
返回值
对应地址或者NULL
用法
mraa_gpio_contextgpio; //创建mraa_gpio_context结构体变量gpio
gpio= mraa_gpio_init(13); //把引脚13的实际地址写入gpio

mraa_result_t mraa_gpio_dir (mraa_gpio_context dev , gpio_dir_t dir)

描述
设置引脚模式 (输入或者输出)
参数
dev:板卡引脚变量
dir:硬件模式  MRAA_GPIO_IN(输入)  MRAA_GPIO_OUT(输出)
返回值
操作结果
用法
mraa_gpio_contextgpio; //创建mraa_gpio_context结构体变量gpio
gpio= mraa_gpio_init(13);
mraa_gpio_dir(gpio,MRAA_GPIO_IN); //设置13引脚为输入模式


mraa_result_t mraa_gpio_mode (mraa_gpio_context dev , gpio_mode_t mode )
描述
设置引脚是否接入内部电阻 (上拉或下拉引脚)
参数
dev:板卡引脚变量
mode:模式  
MRAA_GPIO_STRONG(正常模式)
MRAA_GPIO_PULLUP(上拉引脚)
MRAA_GPIO_PULLDOWN(下拉引脚)
返回值
操作结果
用法
mraa_gpio_contextgpio; //创建mraa_gpio_context结构体变量gpio
gpio= mraa_gpio_init(13);
mraa_gpio_mode(gpio,MRAA_GPIO_PULLUP);//上拉13引脚
mraa_result_t mraa_gpio_close (mraa_gpio_context dev)
描述
取消以前结构体变量赋予的引脚地址
参数
dev结构体变量
返回值
操作结果
用法
mraa_gpio_contextgpio; //创建mraa_gpio_context结构体变量gpio
gpio= mraa_gpio_init(13); //把引脚13的实际地址写入gpio
mraa_gpio_close(gpio);

int mraa_gpio_read (mraa_gpio_context dev)
描述
读取引脚状态
参数
dev对应引脚变量
返回值
读取的状态
用法
mraa_gpio_contextgpio; //创建mraa_gpio_context结构体变量gpio
gpio= mraa_gpio_init(13); //把引脚13的实际地址写入gpio
mraa_gpio_read(gpio);//读取13号引脚状态

mraa_result_t mraa_gpio_write (mraa_gpio_context dev , int value)
描述
写引脚状态
参数
dev对应引脚变量
value引脚状态
返回值
操作结果
用法
mraa_gpio_contextgpio; //创建mraa_gpio_context结构体变量gpio
gpio= mraa_gpio_init(13); //把引脚13的实际地址写入gpio
mraa_gpio_write(gpio,1);//13号引脚设置高电平

mraa_result_t mraa_gpio_use_mmaped(mraa_gpio_contextdev , mraa_boolean_t mmap)
描述
用内存映射mapp代替sysfs
参数
dev对应引脚变量
mmap开启或关闭 1 or 0
返回值
操作结果



重点介绍中断函数

mraa_result_t mraa_gpio_isr( mraa_gpio_context dev , gpio_edge_t  dev, void(*)(void *) fptr , void * args)
描述
设置外部中断
参数
dev对应引脚变量

edge 触发模式  
MRAA_GPIO_EDGE_NONE(没有中断)
MRAA_GPIO_EDGE_BOTH(引脚改变)
MRAA_GPIO_EDGE_RISING(上升沿)
MRAA_GPIO_EDGE_FALLING(下降沿)

fptr 中断时运行的函数
args 传递参数到中断处理程序(fptr) ,不用传递填入NULL

返回值
操作结果

中断程序示例
[C] 纯文本查看 复制代码
?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include
#include
#include "mraa/gpio.h"
 
 
//中断触发运行的函数
voidtest(){
puts("test");
}
 
intmain()
{
    mraa_gpio_context gpio,gpio2;//创建结构体变量
    gpio = mraa_gpio_init(13);//读取13引脚地址到gpio变量
    gpio2= mraa_gpio_init(12);
 
    mraa_gpio_dir(gpio, MRAA_GPIO_OUT);//设置13引脚输出模式
 
    //中断设置-----------------------------------------
    mraa_gpio_dir(gpio2, MRAA_GPIO_IN);//设置12引脚输入模式
    gpio_edge_t edge = MRAA_GPIO_EDGE_BOTH;//设置引脚触发模式
    mraa_gpio_isr(gpio2,edge,&test,NULL);//设置中断
    //中断设置-------------------------------------------
 
    //呼吸灯-------------------------------------
    while(1){
        mraa_gpio_write(gpio,1);
        sleep(1);
        mraa_gpio_write(gpio,0);
        sleep(1);
    }
    //呼吸灯---------------------------------------------
    mraa_gpio_close(gpio);//释放引脚
 
 
}



mraa_result_tmraa_gpio_isr_exit(mraa_gpio_context dev)
描述
取消对应引脚中断
参数
dev对应引脚变量
返回值
操作结果


Gpio类库的介绍就到这里,本帖代与解释全部原创,已全部在Eclipse 编译 Edison运行通过



关键词:Edison    Gallileo    Eclipse    
此帖由abgh668于2015-01-28 10:47:47最后编辑

RE:Edison / Gallileo 基础1 Gpio操作与中断 _Eclipse IDE

609080
我是MM
普通会员

最后登陆时间:2015-12-24 14:39:34

2# 发表于 2015-01-28 11:42:46
马一个,等楼主更

RE:Edison / Gallileo 基础1 Gpio操作与中断 _Eclipse IDE

qqqqqqaaaaaa
我是MM
普通会员

最后登陆时间:2015-01-14 10:40:27

3# 发表于 2015-01-28 12:01:06
好棒!

RE:Edison / Gallileo 基础1 Gpio操作与中断 _Eclipse IDE

zhangxiaoming
我是MM
普通会员

最后登陆时间:2015-01-14 10:40:28

4# 发表于 2015-01-28 12:21:53
真的是很好的帖子~顶

RE:Edison / Gallileo 基础1 Gpio操作与中断 _Eclipse IDE

1feiyangyyyqqw
我是MM
普通会员

最后登陆时间:2015-01-14 10:40:32

5# 发表于 2015-01-28 13:18:40
顶一个

RE:Edison / Gallileo 基础1 Gpio操作与中断 _Eclipse IDE

11234908
我是MM
普通会员

最后登陆时间:2015-01-14 10:40:37

6# 发表于 2015-01-28 13:31:47
赞赞,学习了。

RE:Edison / Gallileo 基础1 Gpio操作与中断 _Eclipse IDE

adamaa
我是MM
普通会员

最后登陆时间:2015-01-14 10:40:44

7# 发表于 2015-01-28 13:40:51

RE:Edison / Gallileo 基础1 Gpio操作与中断 _Eclipse IDE

haorenxinshou
我是MM
普通会员

最后登陆时间:2015-01-14 10:40:45

8# 发表于 2015-01-28 15:36:44
谢谢楼主的经验分享

RE:Edison / Gallileo 基础1 Gpio操作与中断 _Eclipse IDE

yunhuayu
我是MM
普通会员

最后登陆时间:2015-01-14 10:40:49

9# 发表于 2015-01-28 15:37:34
楼主,能否请教几个问题啊

RE:Edison / Gallileo 基础1 Gpio操作与中断 _Eclipse IDE

kicker1
我是MM
普通会员

最后登陆时间:2015-12-24 14:36:12

10# 发表于 2015-01-28 16:04:40
好帖 , 楼主辛苦了, 大二了 荒废的时间太多了,决定过几天就买个开发版回家自学
共57条 1/6 1 2 3 4 5 6 »   
快速回复主题
  • 匿名不能发帖!请先 [ 登陆 注册 ]