0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

零基础开发小安派-Eyes-S1外设篇——GPIO中断编程

AIoT行业洞察 来源:AIoT行业洞察 作者:AIoT行业洞察 2024-10-29 14:56 次阅读

AiPi-Eyes-S1是安信可开源团队专门为Ai-M61-32S设计的一款开发板,支持WiFi6、BLE5.3。所搭载的Ai-M61-32S 模组具有丰富的外设接口,具体包括 DVP、MJPEG、Dispaly、AudioCodec、USB2.0、SDU、以太网 (EMAC)、SD/MMC(SDH)、SPI、UARTI2C、I2S、PWM、GPDAC、GPADC、ACOMP 和 GPIO 等。

AiPi-Eyes-S1集成了SPI屏幕接口,DVP摄像头接口,外置ES8388音频编解码芯片以及预留TF卡座,并且引出USB接口,可接入USB摄像头。

产品资料:https://docs.ai-thinker.com/eyes

wKgZoWcghwuAHTB6AAB12Pu7oeU039.jpg

从零开始学习小安派:

1、零基础开发小安派-Eyes-S1【入门篇】——初识小安派-Eyes-S1

2、零基础开发小安派-Eyes-S1【入门篇】——安装VMware与Ubuntu

3、入门篇:零基础开发小安派-Eyes-S1——新建工程并烧录调试

4、零基础开发小安派-Eyes-S1入门篇——Win下SSH连接Linux

5、零基础开发小安派-Eyes-S1【入门篇】——Samba共享文件夹

6、零基础开发小安派-Eyes-S1【入门篇】——工程文件架构

7、零基础开发小安派-Eyes-S1【外设篇】——GPIO 输入输出

上期的 GPIO 输入输出编程是基于在 main 函数中设置 while 循环不断的改变 IO0 的电平,同时打印 IO1 的电平状态。本期了解关于中断编程的概念方法。

一、中断概念了解

我们在常规的程序中,都是在 main 函数中设置 While 函数不断运行代码。而中断的概念则是打断当前的程序,并保护现场,执行另外的程序,而后回到最初打断的位置,举个恰当的例子,比如我们在敲代码,忽然外卖小哥敲门说外卖到了,于是我们先 ctrl+s 保存,然后去拿完外卖顺便吃了回来继续敲代码。敲代码就是我们的常规程序(发量危),中断源就是外卖小哥的敲门声,而拿外卖吃外卖的过程就是中断服务函数。这就是中断的基本概念。

wKgaoWcghwuAYq4EAAAwTVrMMw4829.jpg

为什么要使用中断?中断是为了应对各种突发事件,如敲代码的时候忽然有人敲门送外卖。正如使用按键扫描检测和外部中断的区别来说,按键扫描会一直在循环中持续扫描按键在状态,正如我们在敲代码时,因为不知道外卖什么时候送来,还要时不时看看有没有人敲门,注意力都用在盯着门上了,怎么能认真敲代码。而中断正如我们已经设置好了耳朵,我们可以认真敲代码,当有人敲门时我们再自然而然的去开门即可,不需要一直盯着门看。

1.中断源

在上面的例子中,中断源就是外卖小哥的敲门声。我们在开门之后他就会停止敲门,但是实际上我们还是需要手动的告诉 MCU 不用敲门了,这也就是要清除中断源的操作。

2.中断服务函数

中断服务函数,也就是我们触发中断后需要执行的操作,这里的吃外卖过程就是中断服务函数的执行过程。一般会在中断服务函数内清除中断源,也就是让外卖小哥别敲门了。

二、中断的配置函数

1.bflb_gpio_int_init

说明: gpio 外部中断初始化

void bflb_gpio_int_init(struct bflb_device_s *dev, uint8_t pin, uint8_t trig_mode);

wKgZoWcghwyAAomBAAAignMvaxE954.jpg

2.bflb_gpio_int_mask

说明:gpio 外部中断屏蔽开关

void bflb_gpio_int_mask(struct bflb_device_s *dev, uint8_t pin, bool mask);

wKgaoWcghw2AKo62AAAldwy-nnk328.jpg

3.bflb_gpio_get_intstatus

说明: 获取 gpio 外部中断是否触发的标志

bool bflb_gpio_get_intstatus(struct bflb_device_s *dev, uint8_t pin);

wKgZoWcghw6AMuTXAAAoErUTQ2w517.jpg

4.bflb_gpio_int_clear

说明: 清除 gpio 中断标志

void bflb_gpio_int_clear(struct bflb_device_s *dev, uint8_t pin);

5.bflb_irq_attach

说明:设置触发中断后进入的回调函数

int bflb_irq_attach(int irq, irq_callback isr, void *arg)

wKgaoWcghw-ALs0HAAAmczLIeDQ557.jpg

6.bflb_irq_enable

说明:中断使能

void bflb_irq_enable(int irq)

wKgZoWcghw-ABy0QAAAZpU_JkW4042.jpg

其他:bflb_gpio_uart_init

说明: gpio 配置成 uart 的某一个功能,可配置的可能参考上一期的 gpio uart function

void bflb_gpio_uart_init(struct bflb_device_s *dev, uint8_t pin, uint8_t uart_func);

wKgaoWcghxCALggoAAAmIiNZCGs173.jpg

三、示例讲解

这里还是对 SDK 的中断示例稍作修改

main

#include "bflb_gpio.h"
#include "bflb_mtimer.h"
#include "board.h"
struct bflb_device_s *gpio; //设置控制的外设句柄,取名gpio
void gpio_isr(int irq, void *arg) //中断服务函数
{
bool intstatus = bflb_gpio_get_intstatus(gpio, GPIO_PIN_0);//检测中断是否发生
if (intstatus) { //前面的instatus是bool类型,为true,也就是中断发生
bflb_gpio_int_clear(gpio, GPIO_PIN_0);//清除中断源,也就是例子里的敲门声
printf("Finished eatingrn");//输出信息,“吃完了”
}
}
int main(void)
{
board_init();
gpio = bflb_device_get_by_name("gpio"); //给外设句柄复位gpio句柄
printf("gpio interruptrn");
bflb_gpio_int_init(gpio, GPIO_PIN_0, GPIO_INT_TRIG_MODE_SYNC_LOW_LEVEL);//第三个参数设置为低电平触发
bflb_gpio_int_mask(gpio, GPIO_PIN_0, false);//是否屏蔽中断,设置为false
bflb_irq_attach(gpio->irq_num, gpio_isr, gpio);//第二个参数为中断服务函数的函数名
bflb_irq_enable(gpio->irq_num);//中断使能
while (1) {
printf("I am typing the codern");//在常规的while程序中输出“我在敲代码”
bflb_mtimer_delay_ms(2000);
}
}

效果

当正常识别串口信息时,只会每两秒打印一次“I am typing the code”

当我用 IO0 去碰一下 TTL 的 GND 脚,也就是拉低,触发了中断,每进入一次中断会打印一次“Finished eating”

wKgZoWcghxCADLj4AAAhst6Okhg580.jpg

这里打印了许多次,说明我触发了多次中断,毕竟只是使用杜邦线碰一下地,程序的运行和检测是十分快的,所以及时碰一下还是触发了许多次中断,实际上使用按键会更加灵敏,需要注意的是,不要在中断中使用 delay 延迟函数!中断是为了应对突发状况,处理的越快越好,而延迟会让整个系统暂停在中断里等待,相当于堵塞在这里,直到延迟结束。

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • GPIO
    +关注

    关注

    16

    文章

    1197

    浏览量

    51968
  • 中断编程
    +关注

    关注

    0

    文章

    5

    浏览量

    7384
  • 零基础
    +关注

    关注

    0

    文章

    13

    浏览量

    2908
收藏 人收藏

    评论

    相关推荐

    零基开发小安-Eyes-DU之【PWM循环呼吸灯】

    上周发布了新的开源硬件——小安-Eyes-DU,DU板子亮点是什么?小安来解释下。 小安-
    的头像 发表于 08-14 15:37 756次阅读
    <b class='flag-5'>零基</b>础<b class='flag-5'>开发</b><b class='flag-5'>小安</b><b class='flag-5'>派</b>-<b class='flag-5'>Eyes</b>-DU之【PWM循环呼吸灯】

    如何用小安-Eyes-S1做一个电子木鱼?

    2024年的第一教程来了,本篇学习如何添加LVGL事件,并制作完成一个电子木鱼(小美苦苦哀求,我略微出手而已)。祝大家2024积德累功,心想事成!接下来看看如何用小安-Eyes-S1
    的头像 发表于 01-13 15:18 990次阅读
    如何用<b class='flag-5'>小安</b><b class='flag-5'>派</b>-<b class='flag-5'>Eyes-S1</b>做一个电子木鱼?

    零基开发小安-Eyes-S1外设——GPIO 输入输出

    等。 AiPi-Eyes-S1集成了SPI屏幕接口,DVP摄像头接口,外置ES8388音频编解码芯片以及预留TF卡座,并且引出USB接口,可接入USB摄像头。 从开始学习小安
    的头像 发表于 10-25 13:50 985次阅读
    <b class='flag-5'>零基</b>础<b class='flag-5'>开发</b><b class='flag-5'>小安</b><b class='flag-5'>派</b>-<b class='flag-5'>Eyes-S1</b><b class='flag-5'>外设</b><b class='flag-5'>篇</b>——<b class='flag-5'>GPIO</b> 输入输出

    零基开发安信可小安-Eyes-S1【入门】——初识小安-Eyes-S1

    初识小安-Eyes-S1 前言:本教程针对零基础人员可以快速上手小安-
    发表于 09-08 11:06

    小安-Eyes-S1/S2多功能开发板简介

    今天,我们在小安放出新鲜的开发板产品AiPi-Eyes-S1小安-
    的头像 发表于 06-19 10:10 919次阅读
    <b class='flag-5'>小安</b><b class='flag-5'>派</b>-<b class='flag-5'>Eyes-S1</b>/<b class='flag-5'>S</b>2多功能<b class='flag-5'>开发</b>板简介

    安信可开源工程——小安-Eyes-S1/S2多功能开发

    前言 AiPi-Eyes-S1 是安信可开源团队专门为Ai-M61-32S设计的一款开发板,支持WiFi6、BLE5.3。所搭载的Ai-M61-32S 模组具有丰富的
    的头像 发表于 06-20 09:51 634次阅读
    安信可开源工程——<b class='flag-5'>小安</b><b class='flag-5'>派</b>-<b class='flag-5'>Eyes-S1</b>/<b class='flag-5'>S</b>2多功能<b class='flag-5'>开发</b>板

    安信可开源硬件——小安-Eyes-DU开发

    安信可科技又来一款小安开源硬件——小安-Eyes-DU开发板,来看看参数~ 01概述
    的头像 发表于 08-07 14:52 781次阅读
    安信可开源硬件——<b class='flag-5'>小安</b><b class='flag-5'>派</b>-<b class='flag-5'>Eyes</b>-DU<b class='flag-5'>开发</b>板

    小安-Eyes-S1外设接口简介

    前言:本教程针对零基础人员可以快速上手小安-Eyes-S1实现一些简单的应用开发,仅供参考学习,本人也在学习的过程中,感谢大家支持。
    的头像 发表于 09-18 09:55 815次阅读

    零基开发小安-Eyes-S1【入门】——初识小安-Eyes-S1

    前言:本教程针对零基础人员可以快速上手小安-Eyes-S1实现一些简单的应用开发,仅供参考学习,本人也在学习的过程中,感谢大家支持。
    的头像 发表于 09-18 15:41 690次阅读
    <b class='flag-5'>零基</b>础<b class='flag-5'>开发</b><b class='flag-5'>小安</b><b class='flag-5'>派</b>-<b class='flag-5'>Eyes-S1</b>【入门<b class='flag-5'>篇</b>】——初识<b class='flag-5'>小安</b><b class='flag-5'>派</b>-<b class='flag-5'>Eyes-S1</b>

    小安-Eyes-S1安装VMware与Ubuntu教程

    设置了中文,换好了国内的清华APT源,安装VScode与必要的插件,拉取了截至目前更新的小安最新的SDK和子模块,配置好了编译环境。由于集成度较高,本次下载的压缩包高达10G。选择上传了百度云(主要是莫工有会员),若有其他需求后期也可以上传至其他云。
    的头像 发表于 09-24 10:58 852次阅读
    <b class='flag-5'>小安</b><b class='flag-5'>派</b>-<b class='flag-5'>Eyes-S1</b>安装VMware与Ubuntu教程

    功德+1,用小安-Eyes-S1做一个电子木鱼

    2024积德累功,心想事成!接下来 看看如何用小安-Eyes-S1做一个电子木鱼 。 01、GUI-Guider 页面设计 先新建一个工程。 直接进入 UI 设计界面,这里用到了两个组件, 一个是图片按钮,一个是文本框 。 先
    的头像 发表于 01-16 14:33 705次阅读
    功德+<b class='flag-5'>1</b>,用<b class='flag-5'>小安</b><b class='flag-5'>派</b>-<b class='flag-5'>Eyes-S1</b>做一个电子木鱼

    开发教程 零基开发小安-Eyes-S1入门——Win下SSH连接Linux

    AiPi-Eyes-S1 是安信可开源团队专门为Ai-M61-32S设计的一款开发板,支持WiFi6、BLE5.3。所搭载的Ai-M61-32S 模组具有丰富的
    的头像 发表于 09-24 14:31 260次阅读
    <b class='flag-5'>开发</b>教程 <b class='flag-5'>零基</b>础<b class='flag-5'>开发</b><b class='flag-5'>小安</b><b class='flag-5'>派</b>-<b class='flag-5'>Eyes-S1</b>入门<b class='flag-5'>篇</b>——Win下SSH连接Linux

    零基开发小安-Eyes-S1【入门】——工程文件架构

    -Eyes-S1【入门】——初识小安-Eyes-S12、零基
    的头像 发表于 11-06 16:10 115次阅读
    <b class='flag-5'>零基</b>础<b class='flag-5'>开发</b><b class='flag-5'>小安</b><b class='flag-5'>派</b>-<b class='flag-5'>Eyes-S1</b>【入门<b class='flag-5'>篇</b>】——工程文件架构

    零基开发小安-Eyes-S1外设】——PWM

    】——工程文件架构7、零基开发小安-Eyes-S1外设
    的头像 发表于 11-06 16:10 113次阅读
    <b class='flag-5'>零基</b>础<b class='flag-5'>开发</b><b class='flag-5'>小安</b><b class='flag-5'>派</b>-<b class='flag-5'>Eyes-S1</b>【<b class='flag-5'>外设</b><b class='flag-5'>篇</b>】——PWM

    零基开发小安-Eyes-S1 外设 ——I2C

    。 AiPi-Eyes-S1集成了SPI屏幕接口,DVP摄像头接口,外置ES8388音频编解码芯片以及预留TF卡座,并且引出USB接口,可接入USB摄像头。 从开始学习小安
    的头像 发表于 11-27 16:39 131次阅读
    <b class='flag-5'>零基</b>础<b class='flag-5'>开发</b><b class='flag-5'>小安</b><b class='flag-5'>派</b>-<b class='flag-5'>Eyes-S1</b> <b class='flag-5'>外设</b><b class='flag-5'>篇</b> ——I2C