nrf52840 gpiote如何配置中断输入_【RTThread笔记】PIN设备中断实验

点击上方「嵌入式大杂烩」,选择「置顶公众号」第一时间查看编程笔记!

通用I/O的特性

通用I/O口主要特性如下:

1、输入输出模式可控制。

(1)输出模式一般包括:推挽、开漏、上拉、下拉。引脚为输出模式时,可以通过配置引脚输出的电平状态为高电平或低电平来控制连接的外围设备。

(2)输入模式一般包括:浮空、上拉、下拉、模拟。引脚为输入模式时,可以读取引脚的电平状态,即高电平或低电平。

2、可编程控制中断:中断触发模式可配置,一般有下图所示5种中断触发模式:

2c358e8a6bc632868eb4a21733d7f8ff.png

上一篇笔记【RT-Thread笔记】IO设备模型及PIN设备分享了PIN设备的输入输出例子。这篇笔记分享PIN设备的中断实验。

PIN设备中断实验

应用程序通过 RT-Thread 提供的 PIN 设备管理接口来访问 GPIO,中断用到的是rt_pin_attach_irq()接口及rt_pin_irq_enable接口:

4a74fcff21e04670ef9bc7e4d510360d.png

cfb1b48783ca7b60d2b3b466ab48140c.png

04a8ec74419f3fc83ab02871730e6f9c.png

根据原理图:

f64d402dafb654438cee63d690cf635c.png

按键KEY0被按下时其对应的GPIO引脚应读取到低电平,所以引脚模式设置为下拉输入。废话不多说,直接看代码:

#include 
#include
#include

#define STACK_SIZE          512
#define THREAD_PRIORITY 25
#define TIMESLICE 5

/* 中断回调函数 ---------------------------------------------------------------------------- */
static void hdr_callback(void *args){
char *str = args;
rt_kprintf("KEY0 pressed. %s\n", str);
}

/* irq线程入口函数 -------------------------------------------------------------------------*/
static void irq_thread_entry(void *parameter){
/* 配置KEY0引脚为上拉输入 */
rt_pin_mode(PIN_KEY0, PIN_MODE_INPUT_PULLUP);

/* 绑定中断回调函数,下降沿模式,回调函数参数为字符串"--By ZhengNian" */
rt_pin_attach_irq(PIN_KEY0, PIN_IRQ_MODE_FALLING, hdr_callback, (void*)"--By ZhengNian");

/* 使能引脚中断 */
rt_pin_irq_enable(PIN_KEY0, PIN_IRQ_ENABLE);
}

/* 主函数 ----------------------------------------------------------------------------------*/
int main(void){
/* 定义线程句柄 */
rt_thread_t tid;

/* 创建动态pin线程 :优先级 25 ,时间片 5个系统滴答,线程栈512字节 */
tid = rt_thread_create("irq_thread",
irq_thread_entry,
RT_NULL,
STACK_SIZE,
THREAD_PRIORITY,
TIMESLICE);

/* 创建成功则启动动态线程 */
if (tid != RT_NULL)
{
rt_thread_startup(tid);
}
return 0;
}

示例代码很简单,创建一个irq线程,irq线程里配置进行KEY0引脚配置,然后绑定中断回调函数,最后使能KEY0中断。中断回调函数就是KEY0触发中断之后执行的函数。

运行结果:

73afa482074abce1053a5b679c766b45.png

可见,实验结果与预想的一致。使用PIN设备框架接口很方便地实现GPIO中断功能。

RTT中有许多通用地设备驱动框架共供我们使用,其中PIN设备驱动框架是最基础也是最简单地,掌握PIN设备驱动框架之后离掌握其它设备框架还远吗~

每天进步一点点~

以上就是本次的笔记分享,如有错误欢迎之处!欢迎收藏、转发、再看~

猜你喜欢:

STM32的ISP下载的原理是什么呢?

这两个C运算符你可能没用过,但却很有用~

STM32 TALK | 无感FOC方案原理机器控制难点分析

b04bdb93056448a31bdcac18299fa94e.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值