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

當(dāng)前位置:首頁 > 嵌入式 > 嵌入式硬件
[導(dǎo)讀]隨著電子信息技術(shù)的飛速發(fā)展,信息家電和各式各樣的移動(dòng)終端得到越來越廣泛的應(yīng)用。在這些人機(jī)交互( HMI)較頻繁的嵌入式系統(tǒng)中,鍵盤是一種應(yīng)用昀為廣泛的輸入設(shè)備。

1 引言

隨著電子信息技術(shù)的飛速發(fā)展,信息家電和各式各樣的移動(dòng)終端得到越來越廣泛的應(yīng)用。在這些人機(jī)交互( HMI)較頻繁的嵌入式系統(tǒng)中,鍵盤是一種應(yīng)用昀為廣泛的輸入設(shè)備。由于嵌入式系統(tǒng)具有功耗低、體積小、專用性強(qiáng)等特點(diǎn),因此嵌入式鍵盤常常要求具有特殊的工作方式和特定的驅(qū)動(dòng)設(shè)計(jì)。

本文討論了基于 ADSP-BF561的非編碼矩陣鍵盤的硬件設(shè)計(jì),并詳細(xì)闡述和分析了鍵盤驅(qū)動(dòng)程序?qū)崿F(xiàn)中的關(guān)鍵問題。ADSP-BF561是 Analog Devices Inc.推出的針對(duì)多媒體和通信應(yīng)用方面的一款高性能 DSP產(chǎn)品,具有快速的數(shù)據(jù)處理能力和豐富的外設(shè)接口,已廣泛使用在各種網(wǎng)絡(luò)多媒體應(yīng)用中。

該鍵盤設(shè)計(jì)已應(yīng)用于一款以 uClinux 2.6和 ADSP-BF561作為軟硬件核心的網(wǎng)絡(luò)視頻電話終端產(chǎn)品,在實(shí)際應(yīng)用中表現(xiàn)出較好的穩(wěn)定性和實(shí)時(shí)性。

2 硬件設(shè)計(jì)方案

鍵盤的結(jié)構(gòu)通常有兩種形式:線性鍵盤和矩陣鍵盤。在線性鍵盤中,每個(gè)按鍵都和一個(gè) I/O口連接,資源利用率不高,一般只適用于按鍵較少的場(chǎng)合。矩陣鍵盤連接方式利用(N+M)個(gè) I/O口,可以輸入 (N×M)個(gè)按鍵開關(guān)。根據(jù)矩陣鍵盤識(shí)別鍵值方式的不同,又可分為編碼式鍵盤和非編碼鍵盤兩種。

本設(shè)計(jì)采用非編碼矩陣鍵盤實(shí)現(xiàn)。鍵盤電路由 5根行線和 6根列線組成,共使用 BF561的 11個(gè) GPIO(General purpose I/O port,通用輸入輸出)口,其接口電路如圖 1所示。



圖1鍵盤接口電路圖

該矩陣電路的 5個(gè)行引腳分別被接到 BF561的 GPIO43-GPIO47端口上,并且這五個(gè)端口被配置成輸入口,共用一個(gè)中斷源。同時(shí),將 6根列線分別接到 BF561的GPIO37-GPIO42端口上,配置為輸出口。在矩陣鍵盤中,每條水平線和垂直線在交叉處都不直接連通,而是通過一個(gè)按鍵加以連接。當(dāng)按鍵沒有按下時(shí),所有的輸入端都是高電平,代表無鍵按下,由于列線輸出是低電平,一旦有鍵按下,則輸入線(行線)就會(huì)被拉低,這樣便可以通過 GPIO口產(chǎn)生中斷,通知處理器有鍵按下。

3 鍵盤驅(qū)動(dòng)的實(shí)現(xiàn)

本設(shè)計(jì)利用 GPIO口來直接掃描矩陣鍵盤,從而簡化了掃描電路的設(shè)計(jì),降低了成本,但鍵盤的消抖、掃描等問題都需由軟件來妥善解決。

3.1 按鍵消抖

當(dāng)按鍵被按下或抬起的瞬間,由于觸點(diǎn)的彈性作用,會(huì)產(chǎn)生機(jī)械抖動(dòng),一般持續(xù)幾毫秒到十幾毫秒。這種抖動(dòng)對(duì)于用戶來說是感覺不到的,但嵌入式系統(tǒng)微處理器的運(yùn)行速度(即便是采用低速晶振)相對(duì)于人的手動(dòng)動(dòng)作是非常迅速的(處理器的速度是在微秒級(jí),而機(jī)械抖動(dòng)的時(shí)間至少是毫秒級(jí)的)。因此,有可能只按了一次按鍵,可是處理器卻已執(zhí)行了多次中斷的操作。

為了避免將用戶的一次按鍵誤當(dāng)作幾次按鍵來處理,必須要想辦法去掉這種抖動(dòng)。本文通過 uClinux提供的定時(shí)器機(jī)制,利用定時(shí)時(shí)間取代傳統(tǒng)的忙等方法,提高了系統(tǒng)的性能。當(dāng)鍵盤上有鍵被按下時(shí),鍵盤中斷處理程序被觸發(fā),其主要實(shí)現(xiàn)流程如下:

static void key_enter_irq(int idx, void *id)
{
關(guān)中斷;
kbd_Scan_timer.expires = jiffies + 2; //指定定時(shí)器到期的時(shí)間
add_timer(&kbd_Scan_timer); //將一個(gè) timer_list對(duì)象掛入定時(shí)器隊(duì)列
}

該定時(shí)器對(duì)象(kbd_Scan_timer)需在模塊初始化函數(shù)中定義,并指定相應(yīng)的處理函數(shù)。當(dāng)定時(shí)器到期時(shí),內(nèi)核就執(zhí)行指定的函數(shù),完成以下一些工作:掃描鍵盤,得到被按下鍵的掃描碼,查表轉(zhuǎn)換成相應(yīng)的鍵值后送入指定緩沖區(qū)中,開中斷并等待應(yīng)用程序接收。

3.2 鍵值掃描

在確定有鍵被按下后,即可進(jìn)入確定具體閉合鍵的過程。驅(qū)動(dòng)程序中采用掃描法實(shí)現(xiàn)按鍵的確定。由于行線連接在 GPIO的輸入口,且共用一個(gè)中斷輸入口,因此,在中斷到來時(shí),需要確定被按下的鍵在哪一行哪一列。

具體實(shí)現(xiàn)過程如圖 2所示:依次將列線置為低電平,即置某根列線為低電平時(shí),把其他列線置為高電平。在確定某根列線為低電平后,再逐行檢測(cè)各行線的電平狀態(tài)。若某行為低,則該行線與置為低電平的列線交叉處的按鍵即為閉合按鍵。由此便可得到閉合鍵的行值和列值,通常這就是一個(gè)掃描碼,然后可采用計(jì)算法或者查表法將閉合鍵的掃描碼轉(zhuǎn)換成應(yīng)用程序所能夠理解的鍵值。


圖2掃描算法流程圖

3.3 緩沖區(qū)同步

得到閉合鍵的掃描碼后,通常將掃描碼轉(zhuǎn)換成應(yīng)用程序可以理解的鍵值后放入一個(gè)緩沖區(qū)中,直到應(yīng)用程序處理按鍵為止。緩沖是一個(gè)很有用的措施,當(dāng)應(yīng)用程序在按鍵事件發(fā)生了卻不能及時(shí)處理它們時(shí),通過緩沖區(qū)就可以防止按鍵丟失。緩沖區(qū)的大小取決于應(yīng)用程序的需要。一般來說,都是把緩沖區(qū)作為一個(gè)環(huán)形隊(duì)列來管理。

環(huán)形緩沖區(qū)通常有一個(gè)讀指針和一個(gè)寫指針(如圖 3所示)。通過移動(dòng)讀指針和寫指針就可以實(shí)現(xiàn)緩沖區(qū)的數(shù)據(jù)讀取和寫入。當(dāng)一個(gè)按鍵被按下時(shí),鍵值將被放置在環(huán)形隊(duì)列的寫指針指向的位置。而應(yīng)用程序則是通過讀指針去讀取緩沖區(qū)中的鍵值。若緩沖區(qū)已滿,則任何下一個(gè)按鍵都將被丟棄。若緩沖區(qū)為空,則讀進(jìn)程阻塞。使用環(huán)形的緩沖區(qū)可以使得讀寫并發(fā)執(zhí)行,讀進(jìn)程和寫進(jìn)程可以采用 “生產(chǎn)者和消費(fèi)者”的模型來訪問緩沖區(qū),從而方便了緩沖的使用和管理,確保系統(tǒng)的安全性。


圖3環(huán)形緩沖區(qū)

應(yīng)用層中使用了 select系統(tǒng)調(diào)用,select會(huì)在一個(gè)循環(huán)中對(duì)每個(gè)需要監(jiān)聽的設(shè)備調(diào)用它們各自的 poll支持函數(shù)以使得當(dāng)前進(jìn)程被加入各個(gè)設(shè)備的等待隊(duì)列。若當(dāng)前沒有任何被監(jiān)聽的設(shè)備就緒,則內(nèi)核進(jìn)行調(diào)度(調(diào)用 schedule),當(dāng)前進(jìn)程讓出 CPU進(jìn)入阻塞狀態(tài),schedule返回時(shí)將再次循環(huán)檢測(cè)是否有操作可以進(jìn)行,如此反復(fù);否則,若有任意一個(gè)設(shè)備就緒,select都立即返回。

poll 函數(shù)中利用等待隊(duì)列,實(shí)現(xiàn)了應(yīng)用程序?qū)彌_區(qū)讀操作的同步。因此,只需再定義
兩個(gè)信號(hào)量,用于實(shí)現(xiàn)同步和互斥:

static DECLARE_MUTEX(mutex_sem); /*定義用于互斥的信號(hào)量,初值為1*/
/*定義控制驅(qū)動(dòng)程序?qū)懢彌_區(qū)的信號(hào)量,初值為 KEYBUF_SIZE-1,表示緩沖區(qū)中的空位
數(shù) */
struct semaphore empty_sem;
sema_init (&empty_sem, KEYBUF_SIZE-1);
驅(qū)動(dòng)程序填寫緩沖區(qū)過程的偽代碼如下:
down(empty_sem); //保證緩沖區(qū)中有空位,否則進(jìn)程掛起
down(mutex_sem); //申請(qǐng)互斥信號(hào)量,保證對(duì)緩沖區(qū)的互斥訪問
鍵值送往環(huán)形緩沖寫指針?biāo)傅刂罚?br />char_buf_write =( char_buf_write +1) mod KEYBUF_SIZE;//修改寫指針
up(mutex_sem); //釋放互斥信號(hào)量
wake_up(&key_wait); //喚醒等待隊(duì)列中的進(jìn)程
應(yīng)用程序讀緩沖區(qū)過程的內(nèi)核實(shí)現(xiàn)偽代碼如下:
down(mutex_sem); //申請(qǐng)互斥信號(hào)量,保證對(duì)緩沖區(qū)的互斥訪問
環(huán)形緩沖讀指針?biāo)傅刂返闹邓屯脩艨臻g;
char_buf_read =( char_buf_read +1) mod KEYBUF_SIZE;//修改讀指針
up(mutex_sem); //釋放互斥信號(hào)量

4 結(jié)束語

本文設(shè)計(jì)并實(shí)現(xiàn)了基于 ADSP-BF561的嵌入式矩陣鍵盤。利用 GPIO口直接掃描矩陣鍵盤,簡化了掃描電路的設(shè)計(jì),降低了成本;軟件實(shí)現(xiàn)上,利用定時(shí)器消抖,避免忙等,提高系統(tǒng)效率;利用環(huán)形緩沖管理按鍵信息,使用等待隊(duì)列和信號(hào)量實(shí)現(xiàn)緩沖的同步操作。

目前,此設(shè)計(jì)已經(jīng)成功應(yīng)用于一款網(wǎng)絡(luò)視頻電話終端,測(cè)試表明,該方案在一定的要求 下完全符合性能要求,并具有較好的穩(wěn)定性和實(shí)時(shí)性。

本文作者創(chuàng)新點(diǎn):本設(shè)計(jì)利用定時(shí)器消抖,避免忙等,提高系統(tǒng)效率;利用環(huán)形緩沖管理按鍵信息,使用等待隊(duì)列和信號(hào)量實(shí)現(xiàn)緩沖的安全同步。


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

LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: 驅(qū)動(dòng)電源

在工業(yè)自動(dòng)化蓬勃發(fā)展的當(dāng)下,工業(yè)電機(jī)作為核心動(dòng)力設(shè)備,其驅(qū)動(dòng)電源的性能直接關(guān)系到整個(gè)系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動(dòng)勢(shì)抑制與過流保護(hù)是驅(qū)動(dòng)電源設(shè)計(jì)中至關(guān)重要的兩個(gè)環(huán)節(jié),集成化方案的設(shè)計(jì)成為提升電機(jī)驅(qū)動(dòng)性能的關(guān)鍵。

關(guān)鍵字: 工業(yè)電機(jī) 驅(qū)動(dòng)電源

LED 驅(qū)動(dòng)電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個(gè)照明設(shè)備的使用壽命。然而,在實(shí)際應(yīng)用中,LED 驅(qū)動(dòng)電源易損壞的問題卻十分常見,不僅增加了維護(hù)成本,還影響了用戶體驗(yàn)。要解決這一問題,需從設(shè)計(jì)、生...

關(guān)鍵字: 驅(qū)動(dòng)電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動(dòng)電源的公式,電感內(nèi)電流波動(dòng)大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關(guān)鍵字: LED 設(shè)計(jì) 驅(qū)動(dòng)電源

電動(dòng)汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動(dòng)汽車的核心技術(shù)之一是電機(jī)驅(qū)動(dòng)控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機(jī)驅(qū)動(dòng)系統(tǒng)中的關(guān)鍵元件,其性能直接影響到電動(dòng)汽車的動(dòng)力性能和...

關(guān)鍵字: 電動(dòng)汽車 新能源 驅(qū)動(dòng)電源

在現(xiàn)代城市建設(shè)中,街道及停車場(chǎng)照明作為基礎(chǔ)設(shè)施的重要組成部分,其質(zhì)量和效率直接關(guān)系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進(jìn)步,高亮度白光發(fā)光二極管(LED)因其獨(dú)特的優(yōu)勢(shì)逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關(guān)鍵字: 發(fā)光二極管 驅(qū)動(dòng)電源 LED

LED通用照明設(shè)計(jì)工程師會(huì)遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關(guān)鍵字: LED 驅(qū)動(dòng)電源 功率因數(shù)校正

在LED照明技術(shù)日益普及的今天,LED驅(qū)動(dòng)電源的電磁干擾(EMI)問題成為了一個(gè)不可忽視的挑戰(zhàn)。電磁干擾不僅會(huì)影響LED燈具的正常工作,還可能對(duì)周圍電子設(shè)備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關(guān)鍵字: LED照明技術(shù) 電磁干擾 驅(qū)動(dòng)電源

開關(guān)電源具有效率高的特性,而且開關(guān)電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機(jī)重量也有所下降,所以,現(xiàn)在的LED驅(qū)動(dòng)電源

關(guān)鍵字: LED 驅(qū)動(dòng)電源 開關(guān)電源

LED驅(qū)動(dòng)電源是把電源供應(yīng)轉(zhuǎn)換為特定的電壓電流以驅(qū)動(dòng)LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: LED 隧道燈 驅(qū)動(dòng)電源
關(guān)閉