溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何分析RT-Thread的PIN設(shè)備中斷實(shí)驗(yàn)

發(fā)布時(shí)間:2021-12-17 14:57:25 來源:億速云 閱讀:723 作者:柒染 欄目:互聯(lián)網(wǎng)科技

這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)碛嘘P(guān)如何分析RT-Thread的PIN設(shè)備中斷實(shí)驗(yàn),文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

通用I/O的特性

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

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

(1)輸出模式一般包括:推挽、開漏、上拉、下拉。引腳為輸出模式時(shí),可以通過配置引腳輸出的電平狀態(tài)為高電平或低電平來控制連接的外圍設(shè)備。

(2)輸入模式一般包括:浮空、上拉、下拉、模擬。引腳為輸入模式時(shí),可以讀取引腳的電平狀態(tài),即高電平或低電平。

2、可編程控制中斷:中斷觸發(fā)模式可配置,一般有下圖所示5種中斷觸發(fā)模式:

如何分析RT-Thread的PIN設(shè)備中斷實(shí)驗(yàn)


下面分享PIN設(shè)備的中斷實(shí)驗(yàn)。

 

PIN設(shè)備中斷實(shí)驗(yàn)

應(yīng)用程序通過 RT-Thread 提供的 PIN 設(shè)備管理接口來訪問 GPIO,中斷用到的是rt_pin_attach_irq()接口及rt_pin_irq_enable接口:

如何分析RT-Thread的PIN設(shè)備中斷實(shí)驗(yàn)

如何分析RT-Thread的PIN設(shè)備中斷實(shí)驗(yàn)

如何分析RT-Thread的PIN設(shè)備中斷實(shí)驗(yàn)


根據(jù)原理圖:

如何分析RT-Thread的PIN設(shè)備中斷實(shí)驗(yàn)


按鍵KEY0被按下時(shí)其對(duì)應(yīng)的GPIO引腳應(yīng)讀取到低電平,所以引腳模式設(shè)置為下拉輸入。廢話不多說,直接看代碼:

#include <rtthread.h>
#include <rtdevice.h>
#include <board.h>

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

/* 中斷回調(diào)函數(shù) ---------------------------------------------------------------------------- */
static void hdr_callback(void *args)
{
char *str = args;
rt_kprintf("KEY0 pressed. %s\n", str);
}

/* irq線程入口函數(shù) -------------------------------------------------------------------------*/
static void irq_thread_entry(void *parameter)
{
/* 配置KEY0引腳為上拉輸入 */
rt_pin_mode(PIN_KEY0, PIN_MODE_INPUT_PULLUP);

/* 綁定中斷回調(diào)函數(shù),下降沿模式,回調(diào)函數(shù)參數(shù)為字符串"--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);
}

/* 主函數(shù) ----------------------------------------------------------------------------------*/
int main(void)
{
   /* 定義線程句柄 */
   rt_thread_t tid;

   /* 創(chuàng)建動(dòng)態(tài)pin線程 :優(yōu)先級(jí) 25 ,時(shí)間片 5個(gè)系統(tǒng)滴答,線程棧512字節(jié) */
   tid = rt_thread_create("irq_thread",
                 irq_thread_entry,
                 RT_NULL,
                 STACK_SIZE,
                 THREAD_PRIORITY,
                 TIMESLICE);

   /* 創(chuàng)建成功則啟動(dòng)動(dòng)態(tài)線程 */
   if (tid != RT_NULL)
   {
    rt_thread_startup(tid);
   }
   return 0;
}
 

示例代碼很簡(jiǎn)單,創(chuàng)建一個(gè)irq線程,irq線程里配置進(jìn)行KEY0引腳配置,然后綁定中斷回調(diào)函數(shù),最后使能KEY0中斷。中斷回調(diào)函數(shù)就是KEY0觸發(fā)中斷之后執(zhí)行的函數(shù)。

運(yùn)行結(jié)果:

如何分析RT-Thread的PIN設(shè)備中斷實(shí)驗(yàn)


可見,實(shí)驗(yàn)結(jié)果與預(yù)想的一致。使用PIN設(shè)備框架接口很方便地實(shí)現(xiàn)GPIO中斷功能。

RTT中有許多通用地設(shè)備驅(qū)動(dòng)框架共供我們使用,其中PIN設(shè)備驅(qū)動(dòng)框架是最基礎(chǔ)也是最簡(jiǎn)單地,掌握PIN設(shè)備驅(qū)動(dòng)框架之后離掌握其它設(shè)備框架還遠(yuǎn)嗎~

上述就是小編為大家分享的如何分析RT-Thread的PIN設(shè)備中斷實(shí)驗(yàn)了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI