日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(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按鍵接口電路

仔細看圖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)確的。如果不消除"抖動"的影響,一次按鍵可能被理解為多次按鍵。

消除按鍵抖動影響的方法是:在判斷有鍵按下后,進行軟件延時(如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)下進行,因此先執(zhí)行如下命令。獲取

cd /home/kernel/rootfs/rootfs

(1)編寫led.c文件

建立led目錄:

mkdir usr/button

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

cd usr/ button

mkdir driver test

進入驅(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)系本站刪除。
換一批
延伸閱讀

ARM系統(tǒng)幾乎都采用Linux的操作系統(tǒng),而且?guī)缀跛械挠布到y(tǒng)都要單獨構(gòu)建自己的系統(tǒng),與其他系統(tǒng)不能兼容,這也導(dǎo)致其應(yīng)用軟件不能方便移植,這一點一直嚴(yán)重制約了ARM系統(tǒng)的發(fā)展和應(yīng)用。GOOGLE開發(fā)了開放式的Andro...

關(guān)鍵字: Linux x86 ARM

隨著計算需求的多樣化,尤其是隨著移動設(shè)備、嵌入式系統(tǒng)和云計算的興起,ARM 和 x86 架構(gòu)之間的爭論變得更加突出。ARM(高級 RISC 機器)和 x86 代表兩種不同類型的處理器架構(gòu),每種架構(gòu)都針對不同的工作負(fù)載和用...

關(guān)鍵字: Linux x86 ARM

從畫質(zhì)優(yōu)化 (NSS) 到幀率提升 (NFRU) 和光線追蹤(NSSD),Arm 計劃覆蓋移動端圖形處理的多個維度,推動邊緣 AI 圖形革命。而未來通過持續(xù)的技術(shù)迭代,Arm也將保持在移動計算領(lǐng)域的技術(shù)領(lǐng)先,滿足手游、A...

關(guān)鍵字: ARM 神經(jīng)圖形技術(shù) GPU AI ML

7月31日消息,據(jù)媒體報道,芯片架構(gòu)提供商Arm Holdings首席執(zhí)行官Rene Haas宣布,公司正加大投入開發(fā)自有芯片產(chǎn)品,此舉標(biāo)志著其從傳統(tǒng)IP授權(quán)模式向提供實體芯片的戰(zhàn)略重大轉(zhuǎn)變。

關(guān)鍵字: ARM META

7月28日消息,2025年,中國AI硬件市場規(guī)模將首次突破萬億元大關(guān)。

關(guān)鍵字: AI ARM

受生成式 AI 驅(qū)動, RISC-V 芯片市場快速發(fā)展。預(yù)計到2030年,RISC-V SoC出貨量將達到1618.1億顆,營收將達到927億美元。其中,用于AI加速器的RISC-V SoC出貨量將達到41億顆,營收將達...

關(guān)鍵字: RISC-V CPU AI CUDA ARM 推理
關(guān)閉