www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁 > 單片機 > 單片機
[導(dǎo)讀]1實驗?zāi)康模?)了解按鍵原理及其與S3C2410的接口電路設(shè)計(2)了解S3C2410芯片的外部中斷處理機制(3)掌握按鍵中斷驅(qū)動的編寫及測試過程2實驗原理(1)按鍵的硬件原理在嵌入式系統(tǒng)中,按鍵的硬件原理比較簡單,通過

1實驗?zāi)康?p>

(1)了解按鍵原理及其與S3C2410的接口電路設(shè)計

(2)了解S3C2410芯片的外部中斷處理機制

(3)掌握按鍵中斷驅(qū)動的編寫及測試過程


2實驗原理

(1)按鍵的硬件原理

在嵌入式系統(tǒng)中,按鍵的硬件原理比較簡單,通過一個上拉電阻將處理器的外部中斷(或GPIO)引腳拉高,電阻的另一端連接按鍵并接地即可實現(xiàn)。如圖2-1所示:

2-1按鍵接口電路

仔細(xì)看圖2-1,不難知道,當(dāng)按鍵被按下時,EINT0上將產(chǎn)生低電平,這個低電平將中斷CPU,CPU可以依據(jù)中斷判斷按鍵被按下。

(2)按鍵“消抖”

所有按鍵、觸摸屏等機械設(shè)備都存在一個固有的問題,那就是"抖動",按鍵從最初接通到穩(wěn)定接通要經(jīng)過數(shù)毫秒乃至數(shù)十毫秒,其間可能發(fā)生多次"接通―斷開"的過程。因此僅僅依據(jù)中斷被產(chǎn)生就認(rèn)定有一次按鍵行為是很不準(zhǔn)確的。如果不消除"抖動"的影響,一次按鍵可能被理解為多次按鍵。

消除按鍵抖動影響的方法是:在判斷有鍵按下后,進(jìn)行軟件延時(如20ms,在延時過程中要屏蔽對應(yīng)中斷),再判斷鍵盤狀態(tài),如果仍處于按鍵按下狀態(tài),則可以判定該按鍵被按下。圖2-2是典型的包含消抖功能的按鍵中斷處理流程。


圖2-2按鍵中斷處理流程

3實驗任務(wù)

(1)編寫按鍵中斷設(shè)備驅(qū)動程序,驅(qū)動程序中手動定義設(shè)備名稱及主設(shè)備號為213,實現(xiàn)與BUTTON設(shè)備相應(yīng)的端口配置,中斷的申請,以及讀寫設(shè)備的接口函數(shù)等。

(2)將驅(qū)動編譯成模塊,并實現(xiàn)模塊的加載及卸載。

(3)編寫驅(qū)動的測試程序,在程序中實現(xiàn)打開BUTTON設(shè)備和LED設(shè)備,主循環(huán)中不斷讀取按鍵的狀態(tài),當(dāng)按鍵按下時,控制LED亮一段時間(1S左右)后滅掉。

4.實驗步驟

以下操作都在nfs文件系統(tǒng)目錄(/home/kernel/rootfs/rootfs)下進(jìn)行,因此先執(zhí)行如下命令。獲取

cd /home/kernel/rootfs/rootfs

(1)編寫led.c文件

建立led目錄:

mkdir usr/button

進(jìn)入button目錄,在該目錄下建立兩個子目錄driver和test,前者用來存放驅(qū)動程序,后者用來存放驅(qū)動測試程序:

cd usr/ button

mkdir driver test

進(jìn)入驅(qū)動程序目錄,建立設(shè)備驅(qū)動文件button.c:

cd driver

vi button.c

按鍵驅(qū)動程序如下button.c所示:

/***************************頭文件***************************/

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

//***********************定義設(shè)備結(jié)構(gòu)體及相關(guān)宏***************************

#define DEVICE_NAME"button"http://定義設(shè)備名

#define DEVICE_MAJOR213//手動定義BUTTON設(shè)備的主設(shè)備號為213

static int button_major = DEVICE_MAJOR ;

#define BUTTON_IRQ IRQ_EINT0//定義BUTTON對應(yīng)S3C2410的外部中斷0

#define BUTTON S3C2410_GPF0//定義BUTTON對應(yīng)S3C2410的GPF0端口

#defineBUTTON_EINT0 S3C2410_GPF0_EINT0

#defineBUTTON_INP S3C2410_GPF0_INP

#define BUTTON_UP0//按鍵抬起狀態(tài)

#define BUTTON_DOWN1//按鍵按下狀態(tài)

#define BUTTON_X2//不確定狀態(tài),本實例中可理解為抖動狀態(tài)

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

struct button_dev

{

struct cdev cdev;//BUTTON設(shè)備對應(yīng)一個字符設(shè)備結(jié)構(gòu)體

int status;//按鍵狀態(tài)標(biāo)識:抬起、按下、抖動

};

static struct button_dev dev;

//*****************************函數(shù)聲明*********************************

void s3c2410_button_s3c2410_button_InitIO(void);//初始化IO端口的函數(shù)

/*

******************************s3c2410_button_InitIO**********************

*描述:初始化IO端口

*參數(shù):無

*返回值:無

*************************************************************************

*/

void s3c2410_button_InitIO(void)

{

s3c2410_gpio_cfgpin(BUTTON,BUTTON_EINT0); //配置按鍵中斷的端口為中斷功能

}

/*

******************************isr_button()*******************************

*描述:EINT0的中斷處理函數(shù),設(shè)置按鍵狀態(tài)為BUTTON_X

*參數(shù):irq :中斷號; dev_id;regs;

*返回值:成功返回0

*在linux/interrupt.h中定義了typedef irqreturn_t (*irq_handler_t)(int, void *);

*************************************************************************

*/

static irqreturn_t isr_button(int irq,void *dev_id,struct pt_regs *regs)

{

disable_irq(0);//禁止中斷

dev.status = BUTTON_X;//將按鍵置為抖動狀態(tài),說明有按鍵中斷,但不一定有鍵按下

enable_irq(0);//使能中斷

return 0;

}

/*

**************************s3c2410_button_open()**************************

*描述:打開設(shè)備函數(shù),向系統(tǒng)申請中斷

*參數(shù):struct inode *inode,struct file *filp

*返回值:失敗返回錯誤代碼ret,成功返回0

*************************************************************************

*/

static int s3c2410_button_open(struct inode *inode,struct file *filp)

{

int ret;

ret=request_irq(BUTTON_IRQ,isr_button,IRQF_SAMPLE_RANDOM,DEVICE_NAME,NULL); //申請中斷

if(ret) {//申請失敗

printk("BUTTON_IRQ: could not register interruptn");

return ret;

}

return 0;

}

/*

************************s3c2410_button_release()*************************

*描述:注銷設(shè)備函數(shù),實現(xiàn)中斷釋放

*參數(shù):struct inode *inode,struct file *filp

*返回值:0

*************************************************************************

*/

static int s3c2410_button_release(struct inode *inode,struct file *filp)

{

free_irq(BUTTON_IRQ,NULL); //釋放中斷

return 0;

}

/*

**************************3c2410_button_ioctl()**************************

*描述:IO控制函數(shù),本實例中不做任何事

*參數(shù):cmd:用戶定義的IO控制命令; arg:傳遞用戶參數(shù)

*返回值:0

*************************************************************************

*/

static int s3c2410_button_ioctl(struct inode *inode,struct file *filp,

unsigned int cmd,unsigned long arg)

{

return 0;

}

/*

**************************s3c2410_button_read()**************************

*描述:讀函數(shù),讀取按鍵的狀態(tài)

*參數(shù):buffer:用來存儲按鍵狀態(tài);

count:用來記錄用戶讀取了多少個字符

*返回值:count:用戶讀取的字符數(shù)

*************************************************************************

*/

static ssize_t s3c2410_button_read(struct file *filp,char *buffer,size_t count,loff_t *ppos)

{

int ret = count;

if(dev.status = BUTTON_X){//如果按鍵狀態(tài)是BUTTON_X,說明有按鍵中斷產(chǎn)生。

msleep(20);//延時20毫秒去除按鍵抖動

disable_irq(0);//禁止中斷

s3c2410_gpio_cfgpin(BUTTON,BUTTON_INP); //配置按鍵中斷的端口為輸入功能

if(!s3c2410_gpio_getpin(BUT

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫毥谦F公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險,如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團(tuán))股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉