基于S3C2410微處理器的觸摸屏設計
圖4 定時中斷服務程序流程圖
在s3c2410_ts_init()中的另一個重要任務是執行接口函數s3c2410_ts_open(),在這個函數中初始化緩沖區的頭尾指針、觸摸屏狀態變量及觸摸屏事件等待隊列。
module_exit()
該函數調用s3c2410_ts_exit(),主要任務是撤銷驅動程序向內核的登記以及釋放申請的中斷資源。
接口函數s3c2410_ts_read( )
這個函數實現的任務是將事件隊列從設備緩存中讀到用戶空間的數據緩存中。實現的過程主要是通過一個循環,只有在事件隊列的頭、尾指針不重合時,才能成功的從tsdev.tail指向的隊列尾部讀取到一組觸摸信息數據,并退出循環。否則調用讀取函數的進程就要進入睡眠。
坐標讀取函數s3c2410_get_XY()
在定時器中斷處理程序中,當查詢到與相連的EINT5/GPF5為低電平時,即表示有有效事件,應該調用s3c2410_get_XY()函數采集筆觸信息。
ADS7843有多種轉換時序,時序規定了芯片與設備及CPU間是如何配合工作的。設計中采用16個時鐘周期啟動一次轉換的坐標轉換方式。ADS7843的操作時序如圖5所示。坐標的讀取是通過多次采集取平均值的方法,以X坐標的讀取為例,其讀取過程如圖6所示。循環過程中的每一步都在8個時鐘周期內完成,數據的處理嚴格按照時序進行,Y坐標的采集與X坐標類似。
圖5 ADS7843操作時序
圖6 X坐標采集流程
結語
在觸摸屏的設計中,抗干擾設計是難點和重點,直接關系到觸摸屏的工作性能。實驗發現坐標采集時,丟棄第一次采集值讀取的坐標轉換值效果較好。本文所介紹的驅動程序已經在博創公司的教學實驗設備UP-NETARM2410-S平臺上經過實際驗證,從數據穩定性和系統負載的角度看,效果良好。同時通過修改程序內部的定時器時鐘頻率可以改變筆在屏上移動所產生的數據量。
參考文獻:
1. 毛德操,胡希明著.Linux內核源代碼情景分析.杭州:浙江大學出版社,2001
2. 孫天澤,袁文菊,張海峰等.嵌入式設計及Linux驅動開發指南.北京:電子工業出版社,2005
3. R Love. Linux內核設計與實現. 陳莉君,康華,張波等譯.北京:機械工業出版社,2006
4. 殷惠莉,劉少君,黃道平.基于uClinux觸摸屏的設計.電子工程師.2004(2) .
評論