娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

歷史上的今天

今天是:2025年02月15日(星期六)

2019年02月15日 | ARM開發(fā)之用linux通用GPIO接口宏函數(shù)操作IO口

發(fā)布者:rho27 來源: eefocus關(guān)鍵字:ARM  linux  GPIO  宏函數(shù)  操作IO口 手機(jī)看文章 掃描二維碼
隨時隨地手機(jī)看文章

ARM開發(fā)板:S5PV210




驅(qū)動步驟:


1.定義一個cdev設(shè)備結(jié)構(gòu)體變量


2.給cdev申請?jiān)O(shè)備號


3.定義一個文件操作集


4.設(shè)備初始化


5.注冊設(shè)備進(jìn)內(nèi)核


6.申請GPIO口




GPIO相關(guān)函數(shù)接口:


1.gpio_request(引腳,給引腳的名字)   ----申請GPIO口


第一個參數(shù):


在內(nèi)核代碼 \arch\arm\mach-s5pv210\include\mach\gpio.h 中有定義,如下圖(部分)

如GPJ2寄存器的第一個引腳,就是 S5PV210_GPJ2(0)




第二個參數(shù):


為管腳起一個名字而已。


例如:


申請GPJ2CON的第一個管腳,并取名為GPJ2_0:


gpio_request(S5PV210_GPJ2(0),"GPJ2_0");;





2.gpio_free(引腳)  ----釋放引腳


既然有 gpio_request來申請引腳,那用完了就要釋放掉。釋放引腳用函數(shù) gpio_free


例如:


釋放GPJ2_0引腳:gpio_free(S5PV210_GPJ2(0));




3.gpio_direction_output(引腳,0/1)   ----給引腳置0或1,并把引腳設(shè)置為輸出模式


例如:


給引腳GPJ2_0設(shè)置為輸出模式,并置1:gpio_direction_output(S5PV210_GPJ2(0),1);


返回值:失敗返回負(fù)值






4.gpio_direction_intput(引腳)   ----給引腳設(shè)置成輸入模式


例如:


給GPJ2_0 設(shè)置成輸入模式:gpio_direction_input(SPPV210_GPJ2(0));





5.gpio_set_value(引腳,0/1)   ----給引腳置0或1


例如:


給引腳GPJ2_0設(shè)置為1(高電平):gpio_set_value(S5PV210_GPJ2(0),1);


返回值:失敗返回負(fù)值






6.gpio_get_value(引腳)   ----獲取引腳的電平。看是0還是1


例如:


獲取GPJ2_0 的電平: int  ret;ret = gpio_get_value(S5PV210_GPJ2(0));






下面給出驅(qū)動代碼和應(yīng)用程序代碼:(實(shí)現(xiàn)Led燈輪流閃爍)


#include

#include

#include

#include

#include

#include

#include

#include

#include

 

/*1.定義設(shè)備結(jié)構(gòu)體*/

static struct cdev led_cdev;

static dev_t dev_num;

static char *gpio_name[]={"GPJ20","GPJ21","GPJ22","GPJ23"};

static struct class *led_class = NULL;

static struct device *led_device = NULL;

static char wbuf[1]={0};

 

 

static int led_open(struct inode *inode, struct file *f)

{

int i;

printk("led open\n");

for(i=0;i<4;i++)

{

gpio_direction_output(S5PV210_GPJ2(i),1);

}

return 0;

}

 

void led_up(char i)

{

char j;

int k = i-'0';

printk("GET[%c]\n",i);

printk("GET[%d]\n",k);

for(j=0;j<4;j++)

{

gpio_set_value(S5PV210_GPJ2(j),1);

}

gpio_set_value(S5PV210_GPJ2(k),0);

}

 

static ssize_t led_write(struct file *f, const char __user*buf,

size_t len, loff_t *t)

{

copy_from_user(wbuf,buf,len);

if(wbuf[0]=='0')

{

led_up(wbuf[0]);

}

 

if(wbuf[0]=='1')

{

led_up(wbuf[0]);

}

 

if(wbuf[0]=='2')

{

led_up(wbuf[0]);

}

 

if(wbuf[0]=='3')

{

led_up(wbuf[0]);

}

return 0;

}

 

/*3.定義文件操作集*/

static const struct file_operations fops={

.owner = THIS_MODULE,

.open = led_open,

.write = led_write,

};

 

 

static int __init led_init(void)

{

int ret;

int i;

/*2.申請?jiān)O(shè)備號*/

ret = alloc_chrdev_region(&dev_num,0,1,"led");

if(ret<0)

{

printk("failed to register dev num\n");

goto failed_register;

}

 

/*4.字符設(shè)備的初始化*/

cdev_init(&led_cdev,&fops);

/*5.注冊設(shè)備*/

ret = cdev_add(&led_cdev,dev_num,1);

if(ret<0)

{

printk("failed to add cdev\n");

goto failed_add;

}

 

/*6.申請IO口*/

for(i=0;i<4;i++)

{

ret = gpio_request(S5PV210_GPJ2(i),gpio_name[i]);

if(ret<0)

{

printk("failed to request GPIO\n");

goto failed_request_IO;

}

}

/*7.創(chuàng)建設(shè)備類*/

led_class = class_create(THIS_MODULE,"led_class");

if(led_class == NULL)

{

printk("failed to create class\n");

goto failed_create_class;

}

/*創(chuàng)建設(shè)備文件結(jié)點(diǎn)*/

led_device = device_create(led_class,NULL,dev_num,NULL,"led_dev");

if(led_device == NULL)

{

printk("failed to create device\n");

goto failed_create_device;

}

printk("init completed\n");

return 0;

 

failed_create_device:

class_destroy(led_class);

failed_create_class:

failed_request_IO:

while(i--)

{gpio_free(S5PV210_GPJ2(i));}

cdev_del(&led_cdev);

failed_add:

unregister_chrdev_region(dev_num,1);

failed_register:

return -1;

}

 

static void __exit led_exit(void)

{

device_destroy(led_class,dev_num);

class_destroy(led_class);


gpio_free(S5PV210_GPJ2(3));

gpio_free(S5PV210_GPJ2(2));

gpio_free(S5PV210_GPJ2(1));

gpio_free(S5PV210_GPJ2(0));

 

cdev_del(&led_cdev);

unregister_chrdev_region(dev_num,1);

printk("led uninstall!\n");

}

 

module_init(led_init);

module_exit(led_exit);

MODULE_LICENSE("GPL");


應(yīng)用程序:

#include

#include

 

int main()

{

char buf[1];

char i;

 

int fd = open("/dev/led_dev",O_WRONLY);

if(fd<0)

{

perror("failed to open");

return -1;

}

while(1)

{

for(i='0';i<'4';i++)

{

buf[0]=i;

write(fd,buf,1);

sleep(1);

}

}

return 0;

}



關(guān)鍵字:ARM  linux  GPIO  宏函數(shù)  操作IO口 引用地址:ARM開發(fā)之用linux通用GPIO接口宏函數(shù)操作IO口

上一篇:ARM開發(fā)之雜項(xiàng)設(shè)備的編寫----以LED驅(qū)動為例
下一篇:ARM開發(fā)之linux字符型驅(qū)動的編寫----LED驅(qū)動為例

推薦閱讀

機(jī)器人控制系統(tǒng)是機(jī)器人的大腦,是決定機(jī)器人功能和性能的主要因素。工業(yè)機(jī)器人控制技術(shù)的主要任務(wù)就是控制工業(yè)機(jī)器人在工作空間中的運(yùn)動位置、姿態(tài)、軌跡、操作順序及動作的時間等,具有編程簡單、軟件菜單操作、友好的人機(jī)交互界面、在線操作提示和使用方便等特點(diǎn)。目前機(jī)器人的應(yīng)用工程由單臺機(jī)器人工作站向機(jī)器人生產(chǎn)線發(fā)展,機(jī)器人控制器的聯(lián)網(wǎng)技術(shù)使...
雷軍微博談與高通的合作  新浪手機(jī)訊 2月15日上午消息,小米公司CEO雷軍在微博上談到與高通的合作,他表示驍龍855立項(xiàng)之初小米團(tuán)隊(duì)就參與了芯片產(chǎn)品討論,就因?yàn)橛芯薮笸度氩艙Q來驍龍855真·首發(fā)。  雷軍在微博寫道:“為了強(qiáng)化和Qualcomm合作,2017年8月,我們就成立了美國研發(fā)中心”。此外,他表示,小米團(tuán)隊(duì)參與了驍龍855產(chǎn)品的討論,不僅對方案設(shè)...
1. Android的一些有用的官方網(wǎng)站:http://android.git.kernel.org android源碼網(wǎng)站http://source.android.comhttp://code.google.com/androidhttp://developer.android.com2. 安裝git源碼管理工具# cd ~# mkdir bin# echo $PATH# curl http://android.git.kernel.org/repo > ~/bin/repo# chmod a+x ~/bin/repogit下載源碼方法:下載一個...
作為上一季度報(bào)告的一部分,Arm公司透露,他們的處理器設(shè)計(jì)的受歡迎程度繼續(xù)成倍增長。制造業(yè)合作伙伴已經(jīng)記錄了基于Arm設(shè)計(jì)的67億顆芯片的出貨量,這大約相當(dāng)于每秒鐘生產(chǎn)842顆芯片,這是一個前所未有的速度。 Arm也毫無疑問是世界上最高效的處理器設(shè)計(jì)者:比如的Mali GPU系列發(fā)展至今只包含9個型號,但自2015年以來一直是出貨量第一的GPU。如果Arm只賣...

史海拾趣

問答坊 | AI 解惑

淺談VHDL/Verilog的可綜合性以及對初學(xué)者的一些建議(轉(zhuǎn))

一、HDL不是硬件設(shè)計(jì)語言 過去筆者曾碰到過不少VHDL或Verilog HDL的初學(xué)者問一些相似的問題,諸如如何實(shí)現(xiàn)除法、開根號,如何寫循環(huán)語句等等。在這個論壇上,也時常能看到一些網(wǎng)友提出這一類的問題。 對于這些問題,首先要明確的是VHDL和Verigl ...…

查看全部問答∨

三點(diǎn)式振蕩電路組成法則

三點(diǎn)式振蕩電路組成法則…

查看全部問答∨

令人傷心的sqlite3

                  for(int i=20;i--;)                 {                     &nb ...…

查看全部問答∨

關(guān)于裸機(jī)IIS應(yīng)用 我要崩潰了。

這是我的程序。幫我看看吧。弄了幾天都還是沒一點(diǎn)聲音。小弟在此感謝了。 #include \"2440addr.h\" #define L3C (1= 1;         }         rGPBDAT  = rGPBDAT & ~(L3D | L3M | L3C) | (L3C ...…

查看全部問答∨

中場休息,問個問題:STM8有沒有指令編碼文檔?

準(zhǔn)備優(yōu)化一下自己的STM8_SWIM下載線,需要寫一個flashloader。 看了一下STVP里使用的flashloader算法,還是覺得有一些可以做到更加優(yōu)化/簡化的方法。 STM8的指令集找到了,但是里面沒有詳細(xì)的指令編碼,雖然編碼可以使用STM8的匯編器生成, ...…

查看全部問答∨

【曬經(jīng)典】電子指南針,簡單就是美!(第3、4季)

本帖最后由 dontium 于 2015-1-23 12:45 編輯 電路功能:隨著方向不同,發(fā)出不同頻率的聲音。特別適合盲人朋友使用的電子指南針。它的電路可以拆成兩部分看。以中間的運(yùn)放為界。左邊:1、霍爾元件IC1,信號是UGN-3501M。說起霍爾元件可以說是傳感 ...…

查看全部問答∨

我想維修護(hù)欄管led燈管,

我想維修護(hù)欄管led燈管,苦于沒有信號源。用什么可以信號源,同時要便宜的。淘寶上有這種東西賣嗎?我管內(nèi)ic是cd4050be和hef4094bp.…

查看全部問答∨

求助CD4511驅(qū)動四位數(shù)碼管顯示程序

單片機(jī)新手求助CD4511驅(qū)動四位數(shù)碼管顯示  ,不懂CD4511七個端口怎么就能驅(qū)動四位連體的數(shù)碼管顯示的,求高手 說明一下是怎么實(shí)現(xiàn)四位數(shù)的同時顯示.............順便說一下小弟想用c語言來編單片機(jī)的程序…

查看全部問答∨

【解密05】基于51單片機(jī)的無線遙控坦克DIY 之 遙控手柄電路

       上一回我們介紹完了坦克一端的硬件部分,這回繼續(xù)介紹一下手柄一端的硬件,比較之前的電路手柄這邊的電路要簡單一些了,還是老習(xí)慣我們先分析一下手柄的功能,如圖5-1。        手柄的主要任務(wù) ...…

查看全部問答∨

基于AT89C51和AD0809的數(shù)字電壓表設(shè)計(jì)

哪位大神能幫忙設(shè)計(jì)一下硬件電路和程序(C語言),基于AT89C51和AD0809的數(shù)字電壓表,使用proteus仿真和keil C的。急求!…

查看全部問答∨
小廣播
設(shè)計(jì)資源 培訓(xùn) 開發(fā)板 精華推薦

最新單片機(jī)文章

 
EEWorld訂閱號

 
EEWorld服務(wù)號

 
汽車開發(fā)圈

 
機(jī)器人開發(fā)圈

電子工程世界版權(quán)所有 京ICP證060456號 京ICP備10001474號-1 電信業(yè)務(wù)審批[2006]字第258號函 京公網(wǎng)安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 全州县| 顺昌县| 宾阳县| 万载县| 常宁市| 太仓市| 吉林省| 新蔡县| 合水县| 沅陵县| 吴堡县| 九台市| 舞阳县| 江津市| 德钦县| 勐海县| 张掖市| 安康市| 罗江县| 城口县| 遂川县| 青阳县| 抚顺市| 喀喇沁旗| 枣强县| 河北区| 滨州市| 望江县| 凌源市| 天津市| 丘北县| 南漳县| 凤阳县| 和硕县| 犍为县| 尚志市| 海原县| 盐边县| 喀喇沁旗| 崇文区| 布尔津县|