国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

基于ADSP-BF561的嵌入式鍵盤設計與實現(xiàn)

發(fā)布時間:2010-4-4 14:05    發(fā)布者:我芯依舊
關鍵詞: 鍵盤 , 嵌入式 , 設計
1 引言

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

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

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

2 硬件設計方案

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

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


圖1鍵盤接口電路圖

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

3 鍵盤驅(qū)動的實現(xiàn)

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

3.1 按鍵消抖

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

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

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

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

3.2 鍵值掃描

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

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


圖2掃描算法流程圖

3.3 緩沖區(qū)同步

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

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


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

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

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

static DECLARE_MUTEX(mutex_sem); /*定義用于互斥的信號量,初值為1*/
/*定義控制驅(qū)動程序?qū)懢彌_區(qū)的信號量,初值為 KEYBUF_SIZE-1,表示緩沖區(qū)中的空位
數(shù) */
struct semaphore empty_sem;
sema_init (&empty_sem, KEYBUF_SIZE-1);
驅(qū)動程序填寫緩沖區(qū)過程的偽代碼如下:
down(empty_sem); //保證緩沖區(qū)中有空位,否則進程掛起
down(mutex_sem); //申請互斥信號量,保證對緩沖區(qū)的互斥訪問
鍵值送往環(huán)形緩沖寫指針所指地址;
char_buf_write =( char_buf_write +1) mod KEYBUF_SIZE;//修改寫指針
up(mutex_sem); //釋放互斥信號量
wake_up(&key_wait); //喚醒等待隊列中的進程
應用程序讀緩沖區(qū)過程的內(nèi)核實現(xiàn)偽代碼如下:
down(mutex_sem); //申請互斥信號量,保證對緩沖區(qū)的互斥訪問
環(huán)形緩沖讀指針所指地址的值送往用戶空間;
char_buf_read =( char_buf_read +1) mod KEYBUF_SIZE;//修改讀指針
up(mutex_sem); //釋放互斥信號量

4 結束語

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

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

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


作者:江蘭帆      來源:《微計算機信息》(嵌入式與SOC)2009年第6-2期
本文地址:http://m.qingdxww.cn/thread-10144-1-1.html     【打印本頁】

本站部分文章為轉載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀點和對其真實性負責;文章版權歸原作者及原出處所有,如涉及作品內(nèi)容、版權和其它問題,我們將根據(jù)著作權人的要求,第一時間更正或刪除。
您需要登錄后才可以發(fā)表評論 登錄 | 立即注冊

廠商推薦

  • Microchip視頻專區(qū)
  • 使用SAM-IoT Wx v2開發(fā)板演示AWS IoT Core應用程序
  • 使用Harmony3加速TCP/IP應用的開發(fā)培訓教程
  • 集成高級模擬外設的PIC18F-Q71家族介紹培訓教程
  • 探索PIC16F13145 MCU系列——快速概覽
  • 貿(mào)澤電子(Mouser)專區(qū)

相關在線工具

相關視頻

關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
快速回復 返回頂部 返回列表
主站蜘蛛池模板: 97人妻碰视频在线观看| 视频一区精品| 欧美日韩一区二区中文字幕视频 | 亚洲 另类色区 欧美日韩| 亚洲精品国产综合久久一线| 成人在线免费| 世界上第一个得抑郁症的人是谁 | 日韩久久中文字幕| 日韩在线黄色| 五月婷六月丁香| 亚洲另类第一页| 国产亚洲综合视频| 日韩一本道无码v| 亚洲午夜视频| 四虎影视免费看| 双龙高h| 97午夜伦伦电影理论片| 麒麟色欧美影院在线播放| 亚洲色图综合图片| 日日摸夜夜添夜夜添成人| 伊人国产在线视频| 亚洲一二三区视频| 公和熄洗澡三级中文字幕| 午夜视频无码国产在线观看| 午夜一级毛片免费视频| 色天使亚洲综合在线观看| 香蕉eeww99国产在线观看| 国产AV精品久久久免费看| 迅雷成人下载| 婷婷在线成人免费观看搜索 | 大香伊蕉在人线国产97| 日韩a视频在线观看| 日本一区二区三区在线网| 三级国产在线| 天堂在线观看免费视频| 中文天堂最新版www官网在线| 精品国产手机视频在在线| 人人精品久久| 日韩精品一区二区三区免费观看| 午夜小视频男女在线观看| 一句顶一万句在线阅读|