0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

零基礎(chǔ)開(kāi)發(fā)小安派-Eyes-S1外設(shè)篇——GPIO中斷編程

AIoT行業(yè)洞察 ? 來(lái)源:AIoT行業(yè)洞察 ? 作者:AIoT行業(yè)洞察 ? 2024-10-29 14:56 ? 次閱讀

AiPi-Eyes-S1是安信可開(kāi)源團(tuán)隊(duì)專(zhuān)門(mén)為Ai-M61-32S設(shè)計(jì)的一款開(kāi)發(fā)板,支持WiFi6、BLE5.3。所搭載的Ai-M61-32S 模組具有豐富的外設(shè)接口,具體包括 DVP、MJPEG、Dispaly、AudioCodec、USB2.0、SDU、以太網(wǎng) (EMAC)、SD/MMC(SDH)、SPI、UART、I2C、I2S、PWM、GPDAC、GPADC、ACOMP 和 GPIO 等。

AiPi-Eyes-S1集成了SPI屏幕接口,DVP攝像頭接口,外置ES8388音頻編解碼芯片以及預(yù)留TF卡座,并且引出USB接口,可接入U(xiǎn)SB攝像頭。

產(chǎn)品資料:https://docs.ai-thinker.com/eyes

wKgZoWcghwuAHTB6AAB12Pu7oeU039.jpg

從零開(kāi)始學(xué)習(xí)小安派:

1、零基礎(chǔ)開(kāi)發(fā)小安派-Eyes-S1【入門(mén)篇】——初識(shí)小安派-Eyes-S1

2、零基礎(chǔ)開(kāi)發(fā)小安派-Eyes-S1【入門(mén)篇】——安裝VMware與Ubuntu

3、入門(mén)篇:零基礎(chǔ)開(kāi)發(fā)小安派-Eyes-S1——新建工程并燒錄調(diào)試

4、零基礎(chǔ)開(kāi)發(fā)小安派-Eyes-S1入門(mén)篇——Win下SSH連接Linux

5、零基礎(chǔ)開(kāi)發(fā)小安派-Eyes-S1【入門(mén)篇】——Samba共享文件夾

6、零基礎(chǔ)開(kāi)發(fā)小安派-Eyes-S1【入門(mén)篇】——工程文件架構(gòu)

7、零基礎(chǔ)開(kāi)發(fā)小安派-Eyes-S1【外設(shè)篇】——GPIO 輸入輸出

上期的 GPIO 輸入輸出編程是基于在 main 函數(shù)中設(shè)置 while 循環(huán)不斷的改變 IO0 的電平,同時(shí)打印 IO1 的電平狀態(tài)。本期了解關(guān)于中斷編程的概念方法。

一、中斷概念了解

我們?cè)诔R?guī)的程序中,都是在 main 函數(shù)中設(shè)置 While 函數(shù)不斷運(yùn)行代碼。而中斷的概念則是打斷當(dāng)前的程序,并保護(hù)現(xiàn)場(chǎng),執(zhí)行另外的程序,而后回到最初打斷的位置,舉個(gè)恰當(dāng)?shù)睦?,比如我們?cè)谇么a,忽然外賣(mài)小哥敲門(mén)說(shuō)外賣(mài)到了,于是我們先 ctrl+s 保存,然后去拿完外賣(mài)順便吃了回來(lái)繼續(xù)敲代碼。敲代碼就是我們的常規(guī)程序(發(fā)量危),中斷源就是外賣(mài)小哥的敲門(mén)聲,而拿外賣(mài)吃外賣(mài)的過(guò)程就是中斷服務(wù)函數(shù)。這就是中斷的基本概念。

wKgaoWcghwuAYq4EAAAwTVrMMw4829.jpg

為什么要使用中斷?中斷是為了應(yīng)對(duì)各種突發(fā)事件,如敲代碼的時(shí)候忽然有人敲門(mén)送外賣(mài)。正如使用按鍵掃描檢測(cè)和外部中斷的區(qū)別來(lái)說(shuō),按鍵掃描會(huì)一直在循環(huán)中持續(xù)掃描按鍵在狀態(tài),正如我們?cè)谇么a時(shí),因?yàn)椴恢劳赓u(mài)什么時(shí)候送來(lái),還要時(shí)不時(shí)看看有沒(méi)有人敲門(mén),注意力都用在盯著門(mén)上了,怎么能認(rèn)真敲代碼。而中斷正如我們已經(jīng)設(shè)置好了耳朵,我們可以認(rèn)真敲代碼,當(dāng)有人敲門(mén)時(shí)我們?cè)僮匀欢坏娜ラ_(kāi)門(mén)即可,不需要一直盯著門(mén)看。

1.中斷源

在上面的例子中,中斷源就是外賣(mài)小哥的敲門(mén)聲。我們?cè)陂_(kāi)門(mén)之后他就會(huì)停止敲門(mén),但是實(shí)際上我們還是需要手動(dòng)的告訴 MCU 不用敲門(mén)了,這也就是要清除中斷源的操作。

2.中斷服務(wù)函數(shù)

中斷服務(wù)函數(shù),也就是我們觸發(fā)中斷后需要執(zhí)行的操作,這里的吃外賣(mài)過(guò)程就是中斷服務(wù)函數(shù)的執(zhí)行過(guò)程。一般會(huì)在中斷服務(wù)函數(shù)內(nèi)清除中斷源,也就是讓外賣(mài)小哥別敲門(mén)了。

二、中斷的配置函數(shù)

1.bflb_gpio_int_init

說(shuō)明: 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

說(shuō)明:gpio 外部中斷屏蔽開(kāi)關(guān)

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

wKgaoWcghw2AKo62AAAldwy-nnk328.jpg

3.bflb_gpio_get_intstatus

說(shuō)明: 獲取 gpio 外部中斷是否觸發(fā)的標(biāo)志

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

wKgZoWcghw6AMuTXAAAoErUTQ2w517.jpg

4.bflb_gpio_int_clear

說(shuō)明: 清除 gpio 中斷標(biāo)志

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

5.bflb_irq_attach

說(shuō)明:設(shè)置觸發(fā)中斷后進(jìn)入的回調(diào)函數(shù)

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

wKgaoWcghw-ALs0HAAAmczLIeDQ557.jpg

6.bflb_irq_enable

說(shuō)明:中斷使能

void bflb_irq_enable(int irq)

wKgZoWcghw-ABy0QAAAZpU_JkW4042.jpg

其他:bflb_gpio_uart_init

說(shuō)明: gpio 配置成 uart 的某一個(gè)功能,可配置的可能參考上一期的 gpio uart function

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

wKgaoWcghxCALggoAAAmIiNZCGs173.jpg

三、示例講解

這里還是對(duì) SDK 的中斷示例稍作修改

main

#include "bflb_gpio.h"
#include "bflb_mtimer.h"
#include "board.h"
struct bflb_device_s *gpio; //設(shè)置控制的外設(shè)句柄,取名gpio
void gpio_isr(int irq, void *arg) //中斷服務(wù)函數(shù)
{
bool intstatus = bflb_gpio_get_intstatus(gpio, GPIO_PIN_0);//檢測(cè)中斷是否發(fā)生
if (intstatus) { //前面的instatus是bool類(lèi)型,為true,也就是中斷發(fā)生
bflb_gpio_int_clear(gpio, GPIO_PIN_0);//清除中斷源,也就是例子里的敲門(mén)聲
printf("Finished eatingrn");//輸出信息,“吃完了”
}
}
int main(void)
{
board_init();
gpio = bflb_device_get_by_name("gpio"); //給外設(shè)句柄復(fù)位gpio句柄
printf("gpio interruptrn");
bflb_gpio_int_init(gpio, GPIO_PIN_0, GPIO_INT_TRIG_MODE_SYNC_LOW_LEVEL);//第三個(gè)參數(shù)設(shè)置為低電平觸發(fā)
bflb_gpio_int_mask(gpio, GPIO_PIN_0, false);//是否屏蔽中斷,設(shè)置為false
bflb_irq_attach(gpio->irq_num, gpio_isr, gpio);//第二個(gè)參數(shù)為中斷服務(wù)函數(shù)的函數(shù)名
bflb_irq_enable(gpio->irq_num);//中斷使能
while (1) {
printf("I am typing the codern");//在常規(guī)的while程序中輸出“我在敲代碼”
bflb_mtimer_delay_ms(2000);
}
}

效果

當(dāng)正常識(shí)別串口信息時(shí),只會(huì)每?jī)擅氪蛴∫淮巍癐 am typing the code”

當(dāng)我用 IO0 去碰一下 TTL 的 GND 腳,也就是拉低,觸發(fā)了中斷,每進(jìn)入一次中斷會(huì)打印一次“Finished eating”

wKgZoWcghxCADLj4AAAhst6Okhg580.jpg

這里打印了許多次,說(shuō)明我觸發(fā)了多次中斷,畢竟只是使用杜邦線碰一下地,程序的運(yùn)行和檢測(cè)是十分快的,所以及時(shí)碰一下還是觸發(fā)了許多次中斷,實(shí)際上使用按鍵會(huì)更加靈敏,需要注意的是,不要在中斷中使用 delay 延遲函數(shù)!中斷是為了應(yīng)對(duì)突發(fā)狀況,處理的越快越好,而延遲會(huì)讓整個(gè)系統(tǒng)暫停在中斷里等待,相當(dāng)于堵塞在這里,直到延遲結(jié)束。

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • GPIO
    +關(guān)注

    關(guān)注

    16

    文章

    1188

    瀏覽量

    51820
  • 中斷編程
    +關(guān)注

    關(guān)注

    0

    文章

    5

    瀏覽量

    7373
  • 零基礎(chǔ)
    +關(guān)注

    關(guān)注

    0

    文章

    13

    瀏覽量

    2904
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    零基礎(chǔ)開(kāi)發(fā)小安-Eyes-DU之【PWM循環(huán)呼吸燈】

    上周發(fā)布了新的開(kāi)源硬件——小安-Eyes-DU,DU板子亮點(diǎn)是什么?小安來(lái)解釋下。 小安-
    的頭像 發(fā)表于 08-14 15:37 ?727次閱讀
    <b class='flag-5'>零基</b>礎(chǔ)<b class='flag-5'>開(kāi)發(fā)</b><b class='flag-5'>小安</b><b class='flag-5'>派</b>-<b class='flag-5'>Eyes</b>-DU之【PWM循環(huán)呼吸燈】

    如何用小安-Eyes-S1做一個(gè)電子木魚(yú)?

    2024年的第一教程來(lái)了,本篇學(xué)習(xí)如何添加LVGL事件,并制作完成一個(gè)電子木魚(yú)(小美苦苦哀求,我略微出手而已)。祝大家2024積德累功,心想事成!接下來(lái)看看如何用小安-Eyes-S1
    的頭像 發(fā)表于 01-13 15:18 ?934次閱讀
    如何用<b class='flag-5'>小安</b><b class='flag-5'>派</b>-<b class='flag-5'>Eyes-S1</b>做一個(gè)電子木魚(yú)?

    零基礎(chǔ)開(kāi)發(fā)小安-Eyes-S1外設(shè)——GPIO 輸入輸出

    等。 AiPi-Eyes-S1集成了SPI屏幕接口,DVP攝像頭接口,外置ES8388音頻編解碼芯片以及預(yù)留TF卡座,并且引出USB接口,可接入U(xiǎn)SB攝像頭。 從開(kāi)始學(xué)習(xí)小安
    的頭像 發(fā)表于 10-25 13:50 ?897次閱讀
    <b class='flag-5'>零基</b>礎(chǔ)<b class='flag-5'>開(kāi)發(fā)</b><b class='flag-5'>小安</b><b class='flag-5'>派</b>-<b class='flag-5'>Eyes-S1</b><b class='flag-5'>外設(shè)</b><b class='flag-5'>篇</b>——<b class='flag-5'>GPIO</b> 輸入輸出

    零基礎(chǔ)開(kāi)發(fā)安信可小安-Eyes-S1【入門(mén)】——初識(shí)小安-Eyes-S1

    初識(shí)小安-Eyes-S1 前言:本教程針對(duì)零基礎(chǔ)人員可以快速上手小安-
    發(fā)表于 09-08 11:06

    小安-Eyes-S1/S2多功能開(kāi)發(fā)板簡(jiǎn)介

    今天,我們?cè)?b class='flag-5'>小安放出新鮮的開(kāi)發(fā)板產(chǎn)品AiPi-Eyes-S1小安-
    的頭像 發(fā)表于 06-19 10:10 ?859次閱讀
    <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'>開(kāi)發(fā)</b>板簡(jiǎn)介

    安信可開(kāi)源工程——小安-Eyes-S1/S2多功能開(kāi)發(fā)

    前言 AiPi-Eyes-S1 是安信可開(kāi)源團(tuán)隊(duì)專(zhuān)門(mén)為Ai-M61-32S設(shè)計(jì)的一款開(kāi)發(fā)板,支持WiFi6、BLE5.3。所搭載的Ai-M61-32S 模組具有豐富的
    的頭像 發(fā)表于 06-20 09:51 ?604次閱讀
    安信可開(kāi)源工程——<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'>開(kāi)發(fā)</b>板

    安信可開(kāi)源硬件——小安-Eyes-DU開(kāi)發(fā)

    安信可科技又來(lái)一款小安開(kāi)源硬件——小安-Eyes-DU開(kāi)發(fā)板,來(lái)看看參數(shù)~ 01概述
    的頭像 發(fā)表于 08-07 14:52 ?760次閱讀
    安信可開(kāi)源硬件——<b class='flag-5'>小安</b><b class='flag-5'>派</b>-<b class='flag-5'>Eyes</b>-DU<b class='flag-5'>開(kāi)發(fā)</b>板

    小安-Eyes-S1外設(shè)接口簡(jiǎn)介

    前言:本教程針對(duì)零基礎(chǔ)人員可以快速上手小安-Eyes-S1實(shí)現(xiàn)一些簡(jiǎn)單的應(yīng)用開(kāi)發(fā),僅供參考學(xué)習(xí),本人也在學(xué)習(xí)的過(guò)程中,感謝大家支持。
    的頭像 發(fā)表于 09-18 09:55 ?783次閱讀

    零基礎(chǔ)開(kāi)發(fā)小安-Eyes-S1【入門(mén)】——初識(shí)小安-Eyes-S1

    前言:本教程針對(duì)零基礎(chǔ)人員可以快速上手小安-Eyes-S1實(shí)現(xiàn)一些簡(jiǎn)單的應(yīng)用開(kāi)發(fā),僅供參考學(xué)習(xí),本人也在學(xué)習(xí)的過(guò)程中,感謝大家支持。
    的頭像 發(fā)表于 09-18 15:41 ?654次閱讀
    <b class='flag-5'>零基</b>礎(chǔ)<b class='flag-5'>開(kāi)發(fā)</b><b class='flag-5'>小安</b><b class='flag-5'>派</b>-<b class='flag-5'>Eyes-S1</b>【入門(mén)<b class='flag-5'>篇</b>】——初識(shí)<b class='flag-5'>小安</b><b class='flag-5'>派</b>-<b class='flag-5'>Eyes-S1</b>

    小安-Eyes-S1安裝VMware與Ubuntu教程

    設(shè)置了中文,換好了國(guó)內(nèi)的清華APT源,安裝VScode與必要的插件,拉取了截至目前更新的小安最新的SDK和子模塊,配置好了編譯環(huán)境。由于集成度較高,本次下載的壓縮包高達(dá)10G。選擇上傳了百度云(主要是莫工有會(huì)員),若有其他需求后期也可以上傳至其他云。
    的頭像 發(fā)表于 09-24 10:58 ?821次閱讀
    <b class='flag-5'>小安</b><b class='flag-5'>派</b>-<b class='flag-5'>Eyes-S1</b>安裝VMware與Ubuntu教程

    零基礎(chǔ)開(kāi)發(fā)安信可小安-Eyes-S1【入門(mén)】——安裝VMware與Ubuntu

    Ubuntu 18.04已經(jīng)給大家設(shè)置了中文,換好了國(guó)內(nèi)的清華APT源,安裝VScode與必要的插件,拉取了截至目前更新的小安最新的SDK和子模塊,配置好了編譯環(huán)境。由于集成度較高,本次下載的壓縮包
    的頭像 發(fā)表于 09-26 09:00 ?725次閱讀
    <b class='flag-5'>零基</b>礎(chǔ)<b class='flag-5'>開(kāi)發(fā)</b>安信可<b class='flag-5'>小安</b><b class='flag-5'>派</b>-<b class='flag-5'>Eyes-S1</b>【入門(mén)<b class='flag-5'>篇</b>】——安裝VMware與Ubuntu

    功德+1,用小安-Eyes-S1做一個(gè)電子木魚(yú)

    2024積德累功,心想事成!接下來(lái) 看看如何用小安-Eyes-S1做一個(gè)電子木魚(yú) 。 01、GUI-Guider 頁(yè)面設(shè)計(jì) 先新建一個(gè)工程。 直接進(jìn)入 UI 設(shè)計(jì)界面,這里用到了兩個(gè)組件, 一個(gè)是圖片按鈕,一個(gè)是文本框 。 先
    的頭像 發(fā)表于 01-16 14:33 ?623次閱讀
    功德+<b class='flag-5'>1</b>,用<b class='flag-5'>小安</b><b class='flag-5'>派</b>-<b class='flag-5'>Eyes-S1</b>做一個(gè)電子木魚(yú)

    開(kāi)發(fā)教程 零基礎(chǔ)開(kāi)發(fā)小安-Eyes-S1入門(mén)——Win下SSH連接Linux

    AiPi-Eyes-S1 是安信可開(kāi)源團(tuán)隊(duì)專(zhuān)門(mén)為Ai-M61-32S設(shè)計(jì)的一款開(kāi)發(fā)板,支持WiFi6、BLE5.3。所搭載的Ai-M61-32S 模組具有豐富的
    的頭像 發(fā)表于 09-24 14:31 ?211次閱讀
    <b class='flag-5'>開(kāi)發(fā)</b>教程 <b class='flag-5'>零基</b>礎(chǔ)<b class='flag-5'>開(kāi)發(fā)</b><b class='flag-5'>小安</b><b class='flag-5'>派</b>-<b class='flag-5'>Eyes-S1</b>入門(mén)<b class='flag-5'>篇</b>——Win下SSH連接Linux

    零基礎(chǔ)開(kāi)發(fā)小安-Eyes-S1【入門(mén)】——工程文件架構(gòu)

    -Eyes-S1【入門(mén)】——初識(shí)小安-Eyes-S12、零基礎(chǔ)
    的頭像 發(fā)表于 11-06 16:10 ?29次閱讀
    <b class='flag-5'>零基</b>礎(chǔ)<b class='flag-5'>開(kāi)發(fā)</b><b class='flag-5'>小安</b><b class='flag-5'>派</b>-<b class='flag-5'>Eyes-S1</b>【入門(mén)<b class='flag-5'>篇</b>】——工程文件架構(gòu)

    零基礎(chǔ)開(kāi)發(fā)小安-Eyes-S1外設(shè)】——PWM

    】——工程文件架構(gòu)7、零基礎(chǔ)開(kāi)發(fā)小安-Eyes-S1外設(shè)
    的頭像 發(fā)表于 11-06 16:10 ?32次閱讀
    <b class='flag-5'>零基</b>礎(chǔ)<b class='flag-5'>開(kāi)發(fā)</b><b class='flag-5'>小安</b><b class='flag-5'>派</b>-<b class='flag-5'>Eyes-S1</b>【<b class='flag-5'>外設(shè)</b><b class='flag-5'>篇</b>】——PWM