日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
如何在Linux中讀取GPIO電平?(linux讀gpio電平)

在Linux開(kāi)發(fā)中,GPIO(General Purpose Input Output)常常被用來(lái)作為外設(shè)控制、傳感器輸入等。讀取GPIO電平以獲取外設(shè)反饋,是開(kāi)發(fā)中常見(jiàn)的需求。本文將介紹在Linux中如何讀取GPIO電平的方法。

創(chuàng)新互聯(lián)專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于網(wǎng)站建設(shè)、網(wǎng)站制作、景谷網(wǎng)絡(luò)推廣、小程序制作、景谷網(wǎng)絡(luò)營(yíng)銷、景谷企業(yè)策劃、景谷品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營(yíng)等,從售前售中售后,我們都將竭誠(chéng)為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);創(chuàng)新互聯(lián)為所有大學(xué)生創(chuàng)業(yè)者提供景谷建站搭建服務(wù),24小時(shí)服務(wù)熱線:13518219792,官方網(wǎng)址:www.cdcxhl.com

一、GPIO的介紹

GPIO是一種通用輸入輸出引腳,可以被程序控制。在Linux開(kāi)發(fā)中,GPIO通常是通過(guò)Linux內(nèi)核提供的設(shè)備驅(qū)動(dòng)來(lái)進(jìn)行控制的。在Linux中,GPIO被抽象成了一個(gè)字符設(shè)備,對(duì)應(yīng)著一個(gè)設(shè)備節(jié)點(diǎn)(/dev/gpiochip0,/dev/gpiochip1等)。

二、GPIO的聲明

在使用GPIO之前,需要先進(jìn)行聲明和配置。

聲明方法如下:

#include

int gpio_request(unsigned int gpio, const char *label);

int gpio_direction_input(unsigned int gpio);

int gpio_direction_output(unsigned int gpio, int value);

gpio_request用于請(qǐng)求GPIO資源,gpio_direction_input和gpio_direction_output用于聲明使用的GPIO為輸入或輸出。

三、讀取GPIO電平

在GPIO聲明完成后,就可以進(jìn)行GPIO電平的讀取了。

讀取GPIO電平的方法如下:

#include

int gpio_get_value(unsigned int gpio);

這里的gpio_get_value用于讀取GPIO的電平值。gpio參數(shù)是指GPIO編號(hào),函數(shù)返回值為GPIO的電平(0或1)。

需要注意的是,gpio_get_value只適用于已經(jīng)聲明為輸入的GPIO,讀取輸出GPIO的電平需要使用gpio_direction_output和gpio_set_value,具體用法和說(shuō)明可以參考Linux內(nèi)核文檔。

四、實(shí)例分析

下面我們來(lái)舉個(gè)實(shí)例分析如何在Linux中讀取GPIO電平。

1.在Linux系統(tǒng)中添加了一個(gè)LED燈,通過(guò)GPIO控制。

2.需要讀取GPIO0的電平,以便得知LED燈的亮滅情況。

3.可以將GPIO0聲明為輸入,然后進(jìn)行電平讀取。

代碼如下:

#include

static unsigned int led_gpio = 0;

static int led_status = 0;

static int __init led_init(void)

{

int ret;

led_gpio = 0;

ret = gpio_request(led_gpio, “LED_GPIO”);

if (ret) {

printk(KERN_ERR “Unable to request GPIO %d, ret = %d\n”,

led_gpio, ret);

return ret;

}

gpio_direction_input(led_gpio);

led_status = gpio_get_value(LED_GPIO);

return 0;

}

模塊初始化時(shí),使用gpio_request請(qǐng)求GPIO0資源,然后聲明GPIO0為輸入。接著使用gpio_get_value讀取GPIO0的電平,根據(jù)讀取到的電平值判斷LED燈的狀態(tài)。

相關(guān)問(wèn)題拓展閱讀:

  • 14-Linux gpio模擬spi

14-Linux gpio模擬spi

首先是spidev,要在/dev/下面產(chǎn)生設(shè)備文件,需要spidev的支持

使用的是gpio模擬spi,gpio模擬spi的時(shí)序原理是bitbang文件實(shí)現(xiàn)的,所以這個(gè)也需要打開(kāi),如果是在openwrt下動(dòng)態(tài)加載的話就是如下兩個(gè)配置

如果是直接內(nèi)核的話是如下兩個(gè)

跟I2C的arch層一樣,主要是devices的添加和board_info的添加,如下

對(duì)于platform_add_devices,因?yàn)槭鞘褂胹pi_gpio,所以name是”spi_gpio”這樣才可以與driver里面的spi_gpio相互匹配probe到。

因?yàn)镾PI是可以一個(gè)總線上面掛多個(gè),然后通過(guò)片選腳CS進(jìn)行硬件切換,所以這變有個(gè)num_chipselect需要設(shè)置,如果有2個(gè)設(shè)置就設(shè)置2,一個(gè)設(shè)備就設(shè)置1,這邊設(shè)置好之后,后面board_info也要有對(duì)應(yīng)的個(gè)數(shù),而且片選引腳需要不同。

I2C是通過(guò)每個(gè)設(shè)備有自己不同的地址,通過(guò)地址來(lái)進(jìn)行軟件切換。

對(duì)于board_info使用的是spidev,drivers/spi/spidev.c文件,該文件的內(nèi)容是注冊(cè)一個(gè)spidev驅(qū)動(dòng)。該驅(qū)動(dòng)是一個(gè)字符設(shè)備驅(qū)動(dòng)。

如果設(shè)備與驅(qū)動(dòng)匹配,那么就會(huì)執(zhí)行spidev_probe()的內(nèi)容。在spidev_probe()函數(shù)中會(huì)調(diào)用device_create()成功后在 /dev 目錄下就會(huì)生成 spidev 相關(guān)的設(shè)備節(jié)點(diǎn)。

這邊有幾個(gè)參數(shù)要注意:

調(diào)試過(guò)程想看一些細(xì)節(jié)的debug信息可以打開(kāi)內(nèi)核的動(dòng)態(tài)debug信息,這個(gè)在以前的print system里面有

printk的等級(jí)設(shè)置成8.

開(kāi)始

定位到是 spi_gpio_request 的時(shí)候報(bào)錯(cuò)

后仿橘者面就將zkernel/3.10.49/arch/mips/mtk/ziroom/zrmt7628.c里面GPIO的信息調(diào)整下,

因?yàn)镾PI的引腳和LED的引腳號(hào)一樣

,內(nèi)核不知道哪里會(huì)檢測(cè)到。

修改后打印備薯如下:

之后在/dev/下面就生成了spidev1.0的設(shè)備

有了/dev/spidev1.0設(shè)備之后,就可以在應(yīng)用成操作改設(shè)備收發(fā)數(shù)據(jù)。

在drivers/spi/spidev.c里面已經(jīng)封裝好了ioctl的對(duì)應(yīng)接口,根據(jù)這些伍禪接口就可以測(cè)試使用。

在Documentation/spi/spidev_test.c下面有個(gè)應(yīng)用層的實(shí)例,打開(kāi)看下就清除了。

$(cc) spidev_test.c -o spidev_test生成可執(zhí)行文件spidev_test

然后拷貝到板子上,將MOSI和MISO短接就可以測(cè)試回環(huán)數(shù)據(jù)是否正常。

有邏輯分析儀的接上logic看波形就更加直觀。

gpio模擬SPI:

在ARM Linux下使用GPIO模擬SPI時(shí)序詳解:

linux SPI驅(qū)動(dòng):

linux 讀gpio電平的介紹就聊到這里吧,感謝你花時(shí)間閱讀本站內(nèi)容,更多關(guān)于linux 讀gpio電平,如何在Linux中讀取GPIO電平?,14-Linux gpio模擬spi的信息別忘了在本站進(jìn)行查找喔。

香港服務(wù)器選創(chuàng)新互聯(lián),2H2G首月10元開(kāi)通。
創(chuàng)新互聯(lián)(www.cdcxhl.com)互聯(lián)網(wǎng)服務(wù)提供商,擁有超過(guò)10年的服務(wù)器租用、服務(wù)器托管、云服務(wù)器、虛擬主機(jī)、網(wǎng)站系統(tǒng)開(kāi)發(fā)經(jīng)驗(yàn)。專業(yè)提供云主機(jī)、虛擬主機(jī)、域名注冊(cè)、VPS主機(jī)、云服務(wù)器、香港云服務(wù)器、免備案服務(wù)器等。


當(dāng)前標(biāo)題:如何在Linux中讀取GPIO電平?(linux讀gpio電平)
文章來(lái)源:http://m.5511xx.com/article/dphchej.html