<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>
關(guān) 閉

新聞中心

EEPW首頁(yè) > 工控自動(dòng)化 > 設計應用 > 基于μClinux的觸摸屏軟硬件關(guān)鍵技術(shù)分析

基于μClinux的觸摸屏軟硬件關(guān)鍵技術(shù)分析

作者: 時(shí)間:2008-11-26 來(lái)源:網(wǎng)絡(luò ) 收藏

  

  

  初始化

  在mc68328digi_()中向內核注冊設備驅動(dòng)函數:err=misc_register(mc68328_digi),在_ts_settings()中設定觸摸屏的當前參數:內核版本號、筆移動(dòng)判別閾值、采樣時(shí)間、消除抖動(dòng)開(kāi)關(guān)、消除抖動(dòng)時(shí)間等參數,這些均由用戶(hù)根據自己的液晶屏以及精度要求來(lái)定制,也可以在應用程序中用I/O()來(lái)設定,本文將在參數分析中具體分析這些參數的意義。

  打開(kāi)設備

  在ts_open()函數中,向內核注冊中斷。中斷也可以在系統初始化的時(shí)候向內核注冊,但是一般不建議這樣做,因為在加載的設備比較多時(shí),這樣做有可能造成中斷的沖突。打開(kāi)一個(gè)設備,才讓該設備占用中斷,是一個(gè)較好的策略。向內核注冊主要實(shí)現兩個(gè)功能,一是注冊中斷號,二是注冊中斷處理函數。

  本程序中,向內核注冊了兩個(gè),分別是:

  request_irq(PEN_IRQ_NUM, handle_pen_irq,IRQ_FLG_STD,

  “touch_screen”,NULL)和request_ irq(SPI_IRQ_NUM,handle_spi_irq, IRQ_FLG_STD,“spi_irq”,NULL);

  在前者中,PEN_IRQ_NUM是中斷號,可以指定,也可以動(dòng)態(tài)分配。在該中,指定筆中斷分配中斷號為19;handle_pen_irq是中斷處理函數,IRQ_FLG_STD是申請時(shí)的選項,它決定的一些特性,這里表示由系統內部占用;touch_ screen是設備名。在后者中,程序向內核注冊SPI中斷,用來(lái)在CPU和外設間傳遞數據,分配的中斷號是0,handle_spi_irq是SPI中斷處理函數。

  此外,在觸摸屏驅動(dòng)初始化子函數_ts_drv()中,進(jìn)行了如下工作:

  (1)觸摸屏狀態(tài)的初始化;

  (2)筆信息(pen_values)的初始化;

  (3)初始化定時(shí)器并設置超時(shí)函數handle_timeout();

  (4)初始化寄存器。初始化等待隊列,等待隊列是由等待觸摸事件發(fā)生的進(jìn)程組成的一個(gè)隊列,它包括頭尾指針和一個(gè)正在睡眠進(jìn)程的鏈表;

  (5)設置觸摸屏狀態(tài)為空閑。

  由于這里的初始化會(huì )占用一部分系統資源,所以把它們放在了打開(kāi)設備時(shí)處理,而不是最初的設備初始化部分,這樣也是出于節省資源的考慮。

  讀函數ts_read()

  一旦用戶(hù)程序調用read()對觸摸屏進(jìn)行讀操作,則驅動(dòng)程序調用入口點(diǎn)函數ts_read()進(jìn)行處理。如果此時(shí)沒(méi)有數據到來(lái),且驅動(dòng)程序選擇阻塞型操作,則調用interruptible_sleep_on(queue->proc_list)將進(jìn)程阻塞,并進(jìn)入等待隊列,同時(shí)設置觸摸屏狀態(tài)為等待;如果選擇了非阻塞型操作,則程序在沒(méi)有數據到達的時(shí)候立即返回,然后用異步觸發(fā)fasync()來(lái)通知數據的到來(lái)。

  在等待數據到來(lái)的過(guò)程中,如果有觸摸動(dòng)作(筆中斷pen_irq)發(fā)生,則進(jìn)入中斷處理程序。在中斷處理程序中對數據進(jìn)行采樣和轉化,把當前坐標信息放入隊列中。在進(jìn)程被喚醒后(使用wake_up_interruptible(queue->proc_list)來(lái)喚醒進(jìn)程),程序把位置坐標信息、事件序列信息等從隊列中取出,放入用戶(hù)空間(put_user),從而可以被用戶(hù)程序使用,避免了用戶(hù)直接和硬件打交道。



評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>