<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 嵌入式Linux下使用GPIO中斷功能

嵌入式Linux下使用GPIO中斷功能

作者: 時(shí)間:2017-03-06 來(lái)源:網(wǎng)絡(luò ) 收藏

  1). 簡(jiǎn)介

本文引用地址:http://dyxdggzs.com/article/201703/344828.htm

  應用是嵌入式設備最基本的應用之一, 本文就基于Embedded 系統演示開(kāi)發(fā)中斷以及輸出相關(guān)的基本應用示例.

  本文所采用的硬件平臺來(lái)自與Toradex發(fā)布的基于NXP iMX7 SoC的Colibri iMX7 ARM計算機模塊配合Colibri Eva Board.

  2). 準備

  a). ToradexColibri iMX7S (基于NXP iMX7SSoC)計算機模塊配合Colibri Eva Board開(kāi)發(fā)載板.

  b). Embedded 使用Toradex官方發(fā)布的 release V2.6.1, 更新方法請見(jiàn)這里.

  3). 軟硬件安裝

  a). 本文所實(shí)現的應用原理為使用兩個(gè)GPIO接口, 一個(gè)作為按鍵輸入使用, 另外一個(gè)作為輸出驅動(dòng)載板上面的LED. 每次按鍵后, 會(huì )將LED狀態(tài)翻轉, 也就是點(diǎn)亮和熄滅交替.

  b). 硬件連接,將Colibri Eva載板X(qián)3連接器C19和X21連接器SW6連接,作為按鍵輸入端; 將X3連接器A19和X21連接器LED1連接, 用于驅動(dòng)LED1.

  c). 在Ubuntu 14.04 開(kāi)發(fā)主機配置開(kāi)發(fā)環(huán)境, 這里使用Eclipse作為開(kāi)發(fā)IDE, 具體配置可以參考這里的Linux開(kāi)發(fā)上手指南.

  4). GPIO應用示例

  a). 運行Eclipse, 創(chuàng )建一個(gè)新項目, 命名 ”gpiointtest” , 配置為 ”Empty Project” 和 “Cross GCC”.

  b). 在 ”gpiointtest” 項目下首先新建GPIO操作相關(guān)的header和source文件

  ./ Header 文件 ” gpioconfig.h” 代碼如下, 主要定義一些全局環(huán)境變量和聲明GPIO基本的操作函數

  https://github.com/simonqin09/gpiointtest/blob/master/gpioconfig.h

  ./ source文件 “gpioconfig.c” 代碼如下,主要是GPIO基本操作函數

  https://github.com/simonqin09/gpiointtest/blob/master/gpioconfig.c

  c). 主函數文件為 “gpiointtest.c”, 源代碼如下, 其主要實(shí)現的功能要點(diǎn)下面會(huì )逐一列出.

  https://github.com/simonqin09/gpiointtest/blob/master/gpiointtest.c

  ./ 參考Colibri iMX7數據手冊以及這里的GPIO號碼定義規則, 本文所使用的C19和A19引腳對應的GPIO為GPIO-53和GPIO-52, 因此主程序在最開(kāi)始就做了定義, 對應變量gpio2和gpio1.

  ./ 變量定義完成后第二部分就是GPIO的export和配置, 將gpio1配置為輸出, gpio2 配置為中斷輸入, 上升沿觸發(fā).

  ./ 這里我們采用 ”poll” 函數作為中斷事件處理函數, 使用的也是其標準用法, 這里就不贅述.

  ./ 這里詳細說(shuō)明下在觸發(fā)事件后的處理, 也就是 ” if (fdset[1].revents & POLLPRI)” 里面的內容. 首先通過(guò)“l(fā)seek” 函數將文件還原以便處理下一次中斷觸發(fā); 然后通過(guò) ”cnt” 變量的判定排除程序運行第一次默認觸發(fā)的中斷; 最后在有效中斷觸發(fā)情況下, 再通過(guò) “usleep” 和 gpio2 當前value的讀取來(lái)排除機械按鍵抖動(dòng), 這樣在每次確定按鍵的前提下, 將gpio1 的輸出做反轉, 對應也就是LED亮和滅.

  d). 編譯項目, 然后將可執行文件scp下載到colibri imx7執行, 執行情況如下. 在測試中也可以發(fā)現當出現按鍵抖動(dòng)的時(shí)候, 按鍵次數統計輸出會(huì )跳過(guò)抖動(dòng)的那次計數, 同樣LED控制也不會(huì )被干擾.

    

  

  e). 當在所需要同時(shí)控制的GPIO數量比較多的情況下, 采用 ”epoll” 函數效率會(huì )高于 “poll”, 因此這里也將基于“epoll” 的主程序代碼羅列如下, 其思路和上面是一致的, 就不贅述.



關(guān)鍵詞: Linux GPIO

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>