1.GPIO框架层

1.1框架层内宏

1.1gpio 状态

#define PIN_LOW                 0x00
#define PIN_HIGH                0x01

1.2gpio工作模式

#define PIN_MODE_OUTPUT         0x00
#define PIN_MODE_INPUT          0x01
#define PIN_MODE_INPUT_PULLUP   0x02
#define PIN_MODE_INPUT_PULLDOWN 0x03
#define PIN_MODE_OUTPUT_OD      0x04

1.3中断触发模式

#define PIN_IRQ_MODE_RISING             0x00
#define PIN_IRQ_MODE_FALLING            0x01
#define PIN_IRQ_MODE_RISING_FALLING     0x02
#define PIN_IRQ_MODE_HIGH_LEVEL         0x03
#define PIN_IRQ_MODE_LOW_LEVEL          0x04

1.4中断的使能失能

#define PIN_IRQ_DISABLE                 0x00
#define PIN_IRQ_ENABLE                  0x01

1.5需要实现结构

struct rt_pin_ops
{void (*pin_mode)(struct rt_device *device, rt_base_t pin, rt_base_t mode);void (*pin_write)(struct rt_device *device, rt_base_t pin, rt_base_t value);int (*pin_read)(struct rt_device *device, rt_base_t pin);rt_err_t (*pin_attach_irq)(struct rt_device *device, rt_int32_t pin,rt_uint32_t mode, void (*hdr)(void *args), void *args);rt_err_t (*pin_detach_irq)(struct rt_device *device, rt_int32_t pin);rt_err_t (*pin_irq_enable)(struct rt_device *device, rt_base_t pin, rt_uint32_t enabled);rt_base_t (*pin_get)(const char *name);
};

1.6 向gpio框架注册函数

int rt_device_pin_register(const char *name, const struct rt_pin_ops *ops, void *user_data

1.2自定义一个gpio驱动

  1. 自定义一个外设gpio的数据结构
  2. 给每个gpio分配一个id
  3. 实现 struct rt_pin_ops 结构里的函数
  4. gpio框架注册函数 rt_device_pin_register

2 RTT 用户GPIO 函数接口

2.1 获取引脚编号

使用函数

pin_number = rt_pin_get("PF.9");

使用宏

GET_PIN(port, pin)

2.2设置引脚模式

void rt_pin_mode(rt_base_t pin, rt_base_t mode);

mode可选参数

#define PIN_MODE_OUTPUT 0x00 /* 输出 /
#define PIN_MODE_INPUT 0x01 /
输入 /
#define PIN_MODE_INPUT_PULLUP 0x02 /
上拉输入 /
#define PIN_MODE_INPUT_PULLDOWN 0x03 /
下拉输入 /
#define PIN_MODE_OUTPUT_OD 0x04 /
开漏输出 */

2.3设置引脚电平

void rt_pin_write(rt_base_t pin, rt_base_t value);

PIN_LOW 低电平,PIN_HIGH 高电平

2.4读取引脚电平

int rt_pin_read(rt_base_t pin);

2.5绑定引脚中断回调函数

rt_err_t rt_pin_attach_irq(rt_int32_t pin, rt_uint32_t mode,void (*hdr)(void *args), void *args);

中断触发模式 mode

#define PIN_IRQ_MODE_RISING 0x00 /* 上升沿触发 /
#define PIN_IRQ_MODE_FALLING 0x01 /
下降沿触发 /
#define PIN_IRQ_MODE_RISING_FALLING 0x02 /
边沿触发(上升沿和下降沿都触发)/
#define PIN_IRQ_MODE_HIGH_LEVEL 0x03 /
高电平触发 /
#define PIN_IRQ_MODE_LOW_LEVEL 0x04 /
低电平触发 */

2.6使能引脚中断

rt_err_t rt_pin_irq_enable(rt_base_t pin, rt_uint32_t enabled);

2.7脱离引脚中断回调函数

rt_err_t rt_pin_detach_irq(rt_int32_t pin);

2.8使用示例

/** 程序清单:这是一个 PIN 设备使用例程* 例程导出了 pin_beep_sample 命令到控制终端* 命令调用格式:pin_beep_sample* 程序功能:通过按键控制蜂鸣器对应引脚的电平状态控制蜂鸣器
*/#include <rtthread.h>
#include <rtdevice.h>/* 引脚编号,通过查看设备驱动文件drv_gpio.c确定 */
#ifndef BEEP_PIN_NUM#define BEEP_PIN_NUM            35  /* PB0 */
#endif
#ifndef KEY0_PIN_NUM#define KEY0_PIN_NUM            55  /* PD8 */
#endif
#ifndef KEY1_PIN_NUM#define KEY1_PIN_NUM            56  /* PD9 */
#endifvoid beep_on(void *args)
{rt_kprintf("turn on beep!\n");rt_pin_write(BEEP_PIN_NUM, PIN_HIGH);
}void beep_off(void *args)
{rt_kprintf("turn off beep!\n");rt_pin_write(BEEP_PIN_NUM, PIN_LOW);
}static void pin_beep_sample(void)
{/* 蜂鸣器引脚为输出模式 */rt_pin_mode(BEEP_PIN_NUM, PIN_MODE_OUTPUT);/* 默认低电平 */rt_pin_write(BEEP_PIN_NUM, PIN_LOW);/* 按键0引脚为输入模式 */rt_pin_mode(KEY0_PIN_NUM, PIN_MODE_INPUT_PULLUP);/* 绑定中断,下降沿模式,回调函数名为beep_on */rt_pin_attach_irq(KEY0_PIN_NUM, PIN_IRQ_MODE_FALLING, beep_on, RT_NULL);/* 使能中断 */rt_pin_irq_enable(KEY0_PIN_NUM, PIN_IRQ_ENABLE);/* 按键1引脚为输入模式 */rt_pin_mode(KEY1_PIN_NUM, PIN_MODE_INPUT_PULLUP);/* 绑定中断,下降沿模式,回调函数名为beep_off */rt_pin_attach_irq(KEY1_PIN_NUM, PIN_IRQ_MODE_FALLING, beep_off, RT_NULL);/* 使能中断 */rt_pin_irq_enable(KEY1_PIN_NUM, PIN_IRQ_ENABLE);
}
/* 导出到 msh 命令列表中 */
MSH_CMD_EXPORT(pin_beep_sample, pin beep sample);

RTT学习笔记11- gpio使用和GPIO设备驱动框架层相关推荐

  1. Spring框架学习笔记11:基于Java配置方式SSM框架西蒙购物网

    文章目录 一.网站功能需求 二.网站设计思路 1.设计模式 2.网站前台 3.网站后台 4.购物流程图 三.网站运行效果 四.网站实现步骤 (一)创建数据库与表 1.创建数据库 - simonshop ...

  2. linux块设备驱动编写,Linux内核学习笔记 -49 工程实践-编写块设备驱动的基础

    块设备可以随机存储.字符设备,比如键盘,只能按照输入顺序存取,不可随机,打乱输入的字节流. 文件系统层,包括常见的文件系统,以及虚拟文件系统层VFS,字符设备可以直接用应用程序打开.块设备不会在应用程 ...

  3. SpringMVC:学习笔记(11)——依赖注入与@Autowired

    SpringMVC:学习笔记(11)--依赖注入与@Autowired 使用@Autowired 从Spring2.5开始,它引入了一种全新的依赖注入方式,即通过@Autowired注解.这个注解允许 ...

  4. Hadoop学习笔记—11.MapReduce中的排序和分组

    Hadoop学习笔记-11.MapReduce中的排序和分组 一.写在之前的 1.1 回顾Map阶段四大步骤 首先,我们回顾一下在MapReduce中,排序和分组在哪里被执行: 从上图中可以清楚地看出 ...

  5. HALCON 20.11:深度学习笔记(11)---目标检测

    HALCON 20.11:深度学习笔记(11)---目标检测 HALCON 20.11.0.0中,实现了深度学习方法. 本章讲解了如何使用基于深度学习的对象检测. 通过对象检测,我们希望在图像中找到不 ...

  6. 台大李宏毅Machine Learning 2017Fall学习笔记 (11)Convolutional Neural Network

    台大李宏毅Machine Learning 2017Fall学习笔记 (11)Convolutional Neural Network 本博客主要整理自: http://blog.csdn.net/x ...

  7. 华为HCIA-datacom 学习笔记11——AAA原理与配置

    华为HCIA-datacom 学习笔记11--AAA原理与配置 AAA原理与配置 1.AAA概述 认证(authentication):验证用户是否获得访问权,确定哪些用户可以访问网络 授权(auth ...

  8. 点云学习笔记11——VoxelNet算法+代码运行

    点云学习笔记11--VoxelNet算法+代码运行 一.算法分析 摘要 介绍 相关工作 1.2. 贡献 2.VoxelNet 2.1.特征学习网络 2.1.1 特征学习网络 二.代码复现 2.1.环境 ...

  9. 凸优化学习笔记 11:对偶原理 拉格朗日函数

    前面讲了凸优化问题的定义,以及一些常见的凸优化问题类型,这一章就要引入著名的拉格朗日函数和对偶问题了.通过对偶问题,我们可以将一些非凸问题转化为凸优化问题,还可以求出原问题的非平凡下界,这对复杂优化问 ...

最新文章

  1. 编程中new[]和delete[]应该如何使用?
  2. tf.keras.layers.Flatten该网络中的第一层tf.keras.layers.Flatten将图像的格式从2d阵列(28乘28像素)转换为28 * 28 = 784像素的1d阵列。可以
  3. python目标跟踪_商汤开源最大目标跟踪库PySOT,代码已正式上线!
  4. android 点击item跳转页面,Android RecyclerView Item 点击事件,简单
  5. 解决php连接mysql数据库中文乱码问题
  6. mysql cluster proxy_GitHub - freedaxin/maya: a mysql cluster proxy powered by node.js
  7. 解决eclipse不会自动弹出Console控制台的问题
  8. C++ STL 数据结构与算法 —— 排序
  9. spring session spring:session:sessions:expires 源码跟踪
  10. 【sklearn第十四讲】决策树之分类篇
  11. Arduino驱动的安装
  12. 小程序审核规则大致内容
  13. Win10安装CUDA报错NVIDIA安装程序失败
  14. 郑大计算机专业英语01章,郑州大学远程教育《大学英语II》第01章在线测试
  15. Windows Server 安装 Adobe Flash Player
  16. 比尔盖兹的十一项人生建议
  17. 功能测试非常重要的43个功能测试点...
  18. Voxelization——体素化模型
  19. Linux:WCP知识库安装及配置
  20. 奇迹MU服务端架设——拓展功能技术分享

热门文章

  1. 2022年全球市场绝缘纸袋总体规模、主要生产商、主要地区、产品和应用细分研究报告
  2. wana服务器蓝屏自动重启,Windows运维之Windows server 2012 R2服务器反复蓝屏
  3. hive 时间处理函数
  4. 常用usb type c插座引脚图和功能差异
  5. jmf不支持64位win7系统
  6. matplotlib之2017年各产业第一季度国民生产总值行业构成分布饼图
  7. firefox下载“打开所在文件夹”失效问题
  8. 【软件测试】小本科+985硕渣投面字节跳动,共七面,已拿offer 面经分享
  9. 软件项目中的文档管理(上)
  10. Burpsuite抓包工具傻瓜式安装,安装既是中文