91在线观看视频-91在线观看视频-91在线观看免费视频-91在线观看免费-欧美第二页-欧美第1页

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

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

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

英創(chuàng)信息技術(shù)GPIO應(yīng)用于Linux LED子系統(tǒng)和輸入事件偵測(cè)介紹

英創(chuàng)信息技術(shù) ? 來源:英創(chuàng)信息技術(shù) ? 作者:英創(chuàng)信息技術(shù) ? 2020-02-06 11:30 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

GPIO(General-purpose input/output)即通用輸入輸出,根據(jù)名字就能夠了解到在實(shí)際應(yīng)用中可以有很多種用途,最常見的便是用來控制LED燈的亮滅,或用來偵測(cè)輸入信號(hào)的高低變化。英創(chuàng)工控主板都給用戶提供了豐富的GPIO資源,ESMARC系列的板卡擁有32位GPIO,為了方便用戶能夠更方便的進(jìn)行開發(fā),英創(chuàng)公司進(jìn)一步在軟件上也增加了一些實(shí)用的功能。在GPIO用作控制LED燈的時(shí)候,用戶可以直接使用Linux的LED子系統(tǒng)來對(duì)指定的GPIO口進(jìn)行設(shè)置和操作,比如LED的亮滅或者設(shè)置觸發(fā)方式等。如果是將GPIO設(shè)置為輸入狀態(tài)偵測(cè)輸入信號(hào)的高低變化,一旦電平發(fā)生變化,內(nèi)核就會(huì)通知應(yīng)用程序,這時(shí)使用select函數(shù)就可以接收到內(nèi)核發(fā)出的消息,不用再通過while或者for函數(shù)不斷的輪詢,實(shí)際的功能已經(jīng)在ESMARC系列的ESM6800主板上通過測(cè)試和驗(yàn)證了。下面就針對(duì)兩個(gè)功能來介紹一下具體的使用方法。

用戶使用GPIO控制LED燈,可以直接調(diào)用英創(chuàng)公司提供的API函數(shù),將GPIO置為輸出然后置高或者置低。不過Linux系統(tǒng)將控制LED燈的這部分功能整合起來,設(shè)計(jì)成了一個(gè)標(biāo)準(zhǔn)的LED子系統(tǒng),對(duì)LED子系統(tǒng)的操作在shell環(huán)境中就能完成。英創(chuàng)公司也將這部分功能的支持加入到了板卡中,如果熟悉使用LED子系統(tǒng)來控制的用戶,就可以選用這種方式。通過加載一個(gè)內(nèi)核模塊led-emtronix.ko來啟用LED子系統(tǒng),加載的時(shí)候通過參數(shù)gpios來設(shè)置需要使用LED子系統(tǒng)操作的GPIO,gpios參數(shù)為一個(gè)32位的整數(shù),代表32位GPIO,1表示enable而0表示disable。所以當(dāng)我們選用GPIO0~GPIO3時(shí),加載內(nèi)核模塊的命令如下:insmode led-emtronix.ko gpios=0x0f,加載完成后,用戶可以在/sys/class/leds/目錄下看到新生成了四個(gè)對(duì)應(yīng)的文件夾LED1、LED2、LED3和LED4,注意,為了方便用戶區(qū)分,LED子文件夾的標(biāo)號(hào)和GPIO的標(biāo)號(hào)是一一對(duì)應(yīng)的,比如GPIO10生成的子文件夾為L(zhǎng)ED10。

加載內(nèi)核模塊

我們選擇LED0這個(gè)目錄進(jìn)入,可以看到里面有許多文件,我們要使用到的文件為brightness和trigger這兩個(gè)。

文件列表

brightness這個(gè)文件用來控制LED的開關(guān),對(duì)應(yīng)板卡的GPIO電平高低,當(dāng)brightness文件的值為0時(shí),GPIO輸出低電平,當(dāng)brightness文件的值為1時(shí)GPIO則輸出高電平,需要注意的是,加載內(nèi)核模塊后,默認(rèn)情況為輸出低電平即brightness文件的值為0。在shell中需要查看brightness的值可以使用命令cat brightness:

查看brightness文件

如果是需要設(shè)置brightness文件的值,則可以使用echo命令:

設(shè)置brightness文件的值

另一個(gè)文件trigger的作用是設(shè)置觸發(fā)方式,默認(rèn)為none即沒有觸發(fā)方式。使用cat命令讀取trigger文件可以得到支持的所有觸發(fā)方式,如下圖看到有磁盤,定時(shí)器,心跳,背光等多種觸發(fā)方式:

查看觸發(fā)方式

有方括號(hào)的表示為現(xiàn)在的有效觸發(fā)方式,如果要選用heartbeat作為觸發(fā)方式,還是使用echo命令來進(jìn)行設(shè)置:

設(shè)置trigger

設(shè)置之后可以通過示波器看到對(duì)應(yīng)的GPIO像心跳一樣,每秒會(huì)進(jìn)行一次拉高拉底。按照上面所介紹的方法,就能夠使用LED子系統(tǒng)來對(duì)板卡的GPIO進(jìn)行控制。

接下來介紹一下輸入事件通知的功能,英創(chuàng)板卡的GPIO上電是默認(rèn)都為輸入狀態(tài)(有3.3V上拉),在默認(rèn)狀態(tài)下是不會(huì)響應(yīng)輸入電平變化進(jìn)行事件通知的。要啟用這一功能,需要調(diào)用英創(chuàng)公司提供的,設(shè)置GPIO輸入狀態(tài)的API來實(shí)現(xiàn)。也就是在程序中需要調(diào)用一次API,設(shè)置GPIO為輸入,才會(huì)使能這一位GPIO的輸入事件通知功能,代碼如下:

int GPIO_OutDisable(int fd, unsigned int dwDisBits)

{

int rc;

struct double_pars dpars;

dpars.par1 = ESM6800_GPIO_OUTPUT_DISABLE;

dpars.par2 = dwDisBits;

rc = write(fd, &dpars, sizeof(struct double_pars));

return rc;

}

rc = GPIO_OutDisable(fd, i1); //set GPIO as input

if(rc < 0)

{

printf("GPIO_OutEnable::failed %d\n", rc);

return rc;

}

當(dāng)設(shè)置完成后,GPIO作為輸入狀態(tài),同時(shí)內(nèi)核會(huì)在輸入的電平變化時(shí)通知應(yīng)用層,使用select函數(shù)來監(jiān)聽GPIO的句柄的讀事件就能夠獲取到通知,用戶可以通過多線程的方式來實(shí)現(xiàn),代碼如下:

while( 1 )

{

//設(shè)置讀事件

FD_ZERO(&fdRead);

FD_SET(fd,&fdRead);

//設(shè)置超時(shí)時(shí)間

aTime.tv_sec = 0;

aTime.tv_usec = 20000;

ret = select(fd+1,&fdRead,NULL,NULL,&aTime);

//printf( "select ret = %d\n", ret);

if (ret < 0 )

{

printf("error!\n");

break;

}

if (ret > 0)

{

//判斷是否讀事件

if (FD_ISSET(fd,&fdRead))

{

//讀事件觸發(fā),進(jìn)行相應(yīng)的動(dòng)作

dwPinState = 0xffffffff;

rc = GPIO_PinState(fd, &dwPinState);

if(rc < 0)

{

printf("GPIO_PinState::failed %d\n", rc);

return rc;

}

printf("PinState = 0x%08x\n", dwPinState);

}

}

}

當(dāng)輸入電平發(fā)生變化,select偵測(cè)到讀事件,就可以進(jìn)行相應(yīng)的操作,示例代碼只是簡(jiǎn)單的讀取了當(dāng)前GPIO的輸入電平狀態(tài),用戶可以根據(jù)實(shí)際的應(yīng)用來修改。當(dāng)有多路GPIO用于偵測(cè)輸入電平變化的時(shí)候,在接收到讀事件后,如果需要判斷是哪一位GPIO偵測(cè)到電平變化,就要立刻讀取當(dāng)前GPIO的狀態(tài)來以此進(jìn)行判斷。對(duì)于不需要這一功能的用戶也不會(huì)有什么影響,當(dāng)調(diào)用函數(shù)將GPIO設(shè)置為輸入后,不使用select函數(shù)去監(jiān)聽GPIO的句柄即可,其他功能都和原來一致。

英創(chuàng)公司希望通過增加一些類似的實(shí)用功能,讓用戶的開發(fā)能夠更加方便,如果在使用過程中遇到任何問題,可以和英創(chuàng)公司的工程師聯(lián)系尋求技術(shù)支持。

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

    關(guān)注

    87

    文章

    11511

    瀏覽量

    213872
  • 嵌入式主板
    +關(guān)注

    關(guān)注

    7

    文章

    6102

    瀏覽量

    36313
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    科普|信創(chuàng)是什么?一文讀懂“信息技術(shù)應(yīng)用創(chuàng)新”戰(zhàn)略

    什么是信創(chuàng)?信創(chuàng),即“信息技術(shù)應(yīng)用創(chuàng)新”,是國(guó)家推動(dòng)IT系統(tǒng)自主可控、安全可控的重要戰(zhàn)略工程。它不僅是技術(shù)層面的創(chuàng)新,更承載著保障國(guó)家網(wǎng)絡(luò)安
    的頭像 發(fā)表于 06-13 10:06 ?2029次閱讀
    科普|信<b class='flag-5'>創(chuàng)</b>是什么?一文讀懂“<b class='flag-5'>信息技術(shù)</b>應(yīng)用創(chuàng)新”戰(zhàn)略

    RK3568驅(qū)動(dòng)指南|第十二篇 GPIO子系統(tǒng)-第130章 GPIO的調(diào)試方法

    RK3568驅(qū)動(dòng)指南|第十二篇 GPIO子系統(tǒng)-第130章 GPIO的調(diào)試方法
    的頭像 發(fā)表于 06-03 11:32 ?538次閱讀
    RK3568驅(qū)動(dòng)指南|第十二篇 <b class='flag-5'>GPIO</b><b class='flag-5'>子系統(tǒng)</b>-第130章 <b class='flag-5'>GPIO</b>的調(diào)試方法

    迅為RK3568開發(fā)板驅(qū)動(dòng)指南GPIO子系統(tǒng)GPIO子系統(tǒng)API函數(shù)的引入

    迅為RK3568開發(fā)板驅(qū)動(dòng)指南GPIO子系統(tǒng)GPIO子系統(tǒng)API函數(shù)的引入
    的頭像 發(fā)表于 05-29 14:05 ?464次閱讀
    迅為RK3568開發(fā)板驅(qū)動(dòng)指南<b class='flag-5'>GPIO</b><b class='flag-5'>子系統(tǒng)</b><b class='flag-5'>GPIO</b><b class='flag-5'>子系統(tǒng)</b>API函數(shù)的引入

    迅為RK3568驅(qū)動(dòng)指南GPIO子系統(tǒng) GPIO操作函數(shù)實(shí)驗(yàn)

    迅為電子RK3568開發(fā)板驅(qū)動(dòng)指南GPIO子系統(tǒng) GPIO操作函數(shù)實(shí)驗(yàn)
    的頭像 發(fā)表于 05-28 15:24 ?420次閱讀
    迅為RK3568驅(qū)動(dòng)指南<b class='flag-5'>GPIO</b><b class='flag-5'>子系統(tǒng)</b> <b class='flag-5'>GPIO</b>操作函數(shù)實(shí)驗(yàn)

    RK3568驅(qū)動(dòng)指南|第十二篇 GPIO子系統(tǒng)-第135章 GPIO子系統(tǒng)與pinctrl子系統(tǒng)相結(jié)合實(shí)驗(yàn)

    RK3568驅(qū)動(dòng)指南|第十二篇 GPIO子系統(tǒng)-第135章 GPIO子系統(tǒng)與pinctrl子系統(tǒng)相結(jié)合實(shí)驗(yàn)
    的頭像 發(fā)表于 05-23 13:47 ?376次閱讀
    RK3568驅(qū)動(dòng)指南|第十二篇 <b class='flag-5'>GPIO</b><b class='flag-5'>子系統(tǒng)</b>-第135章 <b class='flag-5'>GPIO</b><b class='flag-5'>子系統(tǒng)</b>與pinctrl<b class='flag-5'>子系統(tǒng)</b>相結(jié)合實(shí)驗(yàn)

    飛凌嵌入式ElfBoard ELF 1板卡-input子系統(tǒng)之input子系統(tǒng)簡(jiǎn)介

    Linux系統(tǒng)中,Input子系統(tǒng)是一個(gè)用于處理輸入設(shè)備的軟件框架。它提供了一種統(tǒng)一的接口和機(jī)制,使得各種
    發(fā)表于 04-15 10:27

    嵌入式學(xué)習(xí)-飛凌嵌入式ElfBoard ELF 1板卡-Pinctrl和GPIO子系統(tǒng)之ioctl介紹

    本帖最后由 jf_13411809 于 2025-3-27 09:53 編輯 在Linux中,GPIO引腳通常可以通過ioctl系統(tǒng)調(diào)用與相應(yīng)的GPIO設(shè)備進(jìn)行交互和控制。通過i
    發(fā)表于 03-27 09:12

    飛凌嵌入式ElfBoard ELF 1板卡-Pinctrl和GPIO子系統(tǒng)LED驅(qū)動(dòng)

    /environment-setup-cortexa7hf-neon-poky-linux-gnueabi elf@ubuntu:~/work/test/04_Pinctrl和GPIO子系統(tǒng)/
    發(fā)表于 03-27 08:54

    嵌入式學(xué)習(xí)-飛凌嵌入式ElfBoard ELF 1板卡-Pinctrl和GPIO子系統(tǒng)GPIO子系統(tǒng)

    GPIO(General Purpose Input/Output)子系統(tǒng)用于控制和管理通用輸入/輸出引腳的一部分。它提供了一種標(biāo)準(zhǔn)化的方式來訪問和操作硬件平臺(tái)上的
    發(fā)表于 03-25 13:29

    飛凌嵌入式ElfBoard ELF 1板卡-Pinctrl和GPIO子系統(tǒng)之ioctl介紹

    Linux中,GPIO引腳通常可以通過ioctl系統(tǒng)調(diào)用與相應(yīng)的GPIO設(shè)備進(jìn)行交互和控制。通過ioctl命令,可以向GPIO設(shè)備發(fā)送不同
    發(fā)表于 03-25 13:28

    飛凌嵌入式ElfBoard ELF 1板卡-Pinctrl和GPIO子系統(tǒng)GPIO子系統(tǒng)

    GPIO(General Purpose Input/Output)子系統(tǒng)用于控制和管理通用輸入/輸出引腳的一部分。它提供了一種標(biāo)準(zhǔn)化的方式來訪問和操作硬件平臺(tái)上的
    發(fā)表于 03-24 15:41

    飛凌嵌入式ElfBoard ELF 1板卡-Pinctrl和GPIO子系統(tǒng)之Pinctrl子系統(tǒng)

    、SPI、I2C、GPIO等。 二、引腳復(fù)用:i.MX6ULL支持引腳的多功能復(fù)用,即一個(gè)引腳可以用于多種不同的功能。pinctrl子系統(tǒng)允許驅(qū)動(dòng)程序?qū)⒁_設(shè)置為特定功能的輸入或輸出,
    發(fā)表于 03-22 09:23

    GPIO在嵌入式系統(tǒng)中的作用

    在現(xiàn)代電子系統(tǒng)中,嵌入式系統(tǒng)因其小型化、低成本和高效率而變得越來越流行。這些系統(tǒng)廣泛應(yīng)用于從簡(jiǎn)單的家用電器到復(fù)雜的工業(yè)自動(dòng)化設(shè)備。在這些系統(tǒng)
    的頭像 發(fā)表于 01-09 09:45 ?939次閱讀

    中科創(chuàng)達(dá)榮獲2024年軟件和信息技術(shù)服務(wù)優(yōu)秀企業(yè)

    及前百家企業(yè)”名單。中科創(chuàng)達(dá)憑借非凡的技術(shù)實(shí)力與持續(xù)的創(chuàng)新能力,成功入選“2024年度軟件和信息技術(shù)服務(wù)競(jìng)爭(zhēng)力百?gòu)?qiáng)企業(yè)”以及“2024年軟件和信息技術(shù)服務(wù)優(yōu)秀企業(yè)”。
    的頭像 發(fā)表于 10-30 11:44 ?979次閱讀

    linux--LED子系統(tǒng)一文讀懂

    Linux內(nèi)核中,LED子系統(tǒng)扮演著控制LED燈的核心角色,它通過一套規(guī)范化的驅(qū)動(dòng)架構(gòu),簡(jiǎn)化了LED驅(qū)動(dòng)程序的開發(fā)流程,讓開發(fā)者能夠更專注
    的頭像 發(fā)表于 08-02 16:09 ?3416次閱讀
    <b class='flag-5'>linux--LED</b><b class='flag-5'>子系統(tǒng)</b>一文讀懂
    主站蜘蛛池模板: 一级黄色毛片播放 | 免费看男女做好爽好硬视频 | 日本美女视频网站 | 狠狠色丁香婷婷综合久久片 | 国产精品福利一区 | 1024手机最新手机在线 | 色噜噜狠狠狠狠色综合久一 | 天天操夜夜草 | 国产一级特黄在线播放 | 四虎影院最新网站 | 乱肉情欲杂乱小说 | 黄色网址在线免费观看 | 99xxxx开心 | 99久久免费中文字幕精品 | 爱插综合网 | 成人99国产精品一级毛片 | 一级福利视频 | 一级特黄色片 | 98色花堂国产第一页 | 五月天丁香婷婷网 | 亚洲wwwwww| 夜间免费小视频 | 狼狼鲁狼狼色 | 久久青草精品免费资源站 | 免费能看的黄色网址 | 精品视频日本 | 国产老头和美女在线观看 | 国产在线观看www鲁啊鲁免费 | 超薄肉色丝袜精品足j福利 超黄视频在线观看 | 一区二区三区亚洲视频 | 久久噜国产精品拍拍拍拍 | 天天射久久| 免费又爽又黄1000禁片 | 天天做人人爱夜夜爽2020 | 欧美性第一页 | 人人澡 人人澡 人人看 | 伊人精品视频在线 | 久久国产午夜精品理论片34页 | 又粗又长又大真舒服好爽漫画 | 欧美一级特黄aaaaaa在线看首页 | 午夜欧美日韩 |