資料介紹
隨著信息查詢(xún)技術(shù)的發(fā)展,觸摸屏因具有堅(jiān)固耐用、反應(yīng)速度快、節(jié)省空間、易于交流等優(yōu)點(diǎn),而得到了廣泛應(yīng)用[1]。觸摸屏作為一種新興的電腦輸入設(shè)備,是目前最簡(jiǎn)單、方便的一種人機(jī)交互設(shè)備。
1 硬件簡(jiǎn)介
1.1 TQ2440開(kāi)發(fā)板簡(jiǎn)介
天嵌公司生產(chǎn)的TQ2440開(kāi)發(fā)板,微處理器采用Samsung S3C2440AL,板載64 MB SDRAM、256 MB Nand Flash、2 MB Nor Flash,板載5線異步串行口(UART0)、100 Mb/s DM9000網(wǎng)卡、USB HOST接口、USB Device接口和一個(gè)SD卡接口,集成了4線電阻式觸摸屏接口和JTAG接口等,音頻接口采用芯片UDA1341,立體聲音頻輸出,可錄音。
1.2 S3C2440處理器簡(jiǎn)介
S3C2440是由三星公司推出的16/32 bit RISC微處理器,最高主頻可達(dá)533 MHz,為手持設(shè)備和一般類(lèi)型應(yīng)用提供了低價(jià)格、低功耗、高性能小型微控制器的解決方案。處理器內(nèi)部集成SDRAM控制器、LCD控制器、4通道DMA、3通道UART、I2C總線、I2S總線、SD接口、PWMtimer、觸摸屏接口、8通道10 bit A/D控制器和camera接口等,很便于一般開(kāi)發(fā)。
1.3 觸摸屏
按照觸摸屏的工作原理和傳輸信息的介質(zhì)一般可分為4種,分別為電阻式、紅外線式、電容感應(yīng)式以及表面聲波式。本次設(shè)計(jì)采用的是東華3.5英寸觸摸屏,為4線電阻式觸摸屏。具體參數(shù)為:型號(hào): WXCAT35-TG3#001F;尺寸:103 mm×83 mm;顯示面積:70.08 mm(H)×52.56 mm(V);顯示顏色:16.7兆色分辨率;對(duì)比度:300:1;亮度:320 cd/m2;電源:5 V電壓供電。
電阻式觸摸屏利用壓力感應(yīng)進(jìn)行控制,由觸摸檢測(cè)部件和觸摸屏控制器組成。觸摸檢測(cè)部件安裝在顯示器屏幕前面,用于檢測(cè)用戶(hù)觸摸位置,并將觸摸位置信息送到觸摸屏控制器;觸摸屏控制器的主要作用是從觸摸點(diǎn)檢測(cè)裝置上接收觸摸信息,并將它轉(zhuǎn)換成觸點(diǎn)坐標(biāo),再送給CPU,它同時(shí)能接收來(lái)自CPU的命令并加以執(zhí)行。觸摸屏的屏體部分是一塊與顯示器表面非常配合的多層復(fù)合薄膜,由一層玻璃或有機(jī)玻璃作為基層,表面涂有一層透明的導(dǎo)電層氧化銦(OTI),上面再覆蓋有一層外表面硬化處理、光滑防刮的塑料層,它的內(nèi)表面也涂有一層OTI,在兩層導(dǎo)電層之間有許多細(xì)?。ㄐ∮?/1 000)的透明隔離點(diǎn)把它們隔開(kāi)絕緣。當(dāng)手指接觸屏幕時(shí),兩層OTI導(dǎo)電層將出現(xiàn)一個(gè)接觸點(diǎn),因其中一面導(dǎo)電層接通Y軸方向的5 V均勻電壓場(chǎng),使得偵測(cè)層的電壓由零變?yōu)榉橇悖刂破鱾蓽y(cè)到這個(gè)接通數(shù)據(jù)后,進(jìn)行 A/D轉(zhuǎn)換,并將得到的電壓值與5 V相比較,即可得出觸摸點(diǎn)的Y軸坐標(biāo)。同理可得出X軸的坐標(biāo)。
S3C2440的觸摸屏接口包括觸摸觸點(diǎn)控制邏輯和有中斷產(chǎn)生邏輯的ADC接口邏輯,可以控制或選擇觸摸屏觸點(diǎn)用于XY坐標(biāo)的轉(zhuǎn)換。觸摸屏接口為了完成相應(yīng)的工作,具有4種工作模式[2]:
?。?)正常轉(zhuǎn)換模式:此模式與通用的AD轉(zhuǎn)換模式相似,可以在ADCCON(ADC控制寄存器)中設(shè)置,在ADCDAT0(ADC數(shù)據(jù)寄存器0)中完成數(shù)據(jù)讀寫(xiě)。
?。?)X/Y坐標(biāo)各自轉(zhuǎn)換:觸摸屏控制器支持兩種轉(zhuǎn)換模式,X/Y坐標(biāo)各自轉(zhuǎn)換與X/Y坐標(biāo)自動(dòng)轉(zhuǎn)換。各自轉(zhuǎn)換是在X模式下,將X坐標(biāo)寫(xiě)入ADCDAT0后產(chǎn)生中斷;在Y模式下,將Y坐標(biāo)寫(xiě)入ADCDAT1后產(chǎn)生中斷。
?。?)X/Y坐標(biāo)自動(dòng)轉(zhuǎn)換:在此模式下,觸摸屏控制器先后轉(zhuǎn)換觸摸點(diǎn)的X坐標(biāo)與Y坐標(biāo)。當(dāng)X坐標(biāo)與Y坐標(biāo)都轉(zhuǎn)換完成時(shí),中斷控制器產(chǎn)生中斷。
?。?)等待中斷模式:當(dāng)觸摸筆按下時(shí),觸摸屏產(chǎn)生中斷(INT_TC)。等待中斷模式必須將寄存器rADCTSC設(shè)置為0xd3;在觸摸屏控制器產(chǎn)生中斷以后,必須將此模式清除。
如果GCLK是50 MHz且預(yù)分頻器的分頻值設(shè)置為49 MHz,10 bit的轉(zhuǎn)換時(shí)間按下式計(jì)算:
A/D轉(zhuǎn)換頻率=50 MHz/(49+1)MHz=1 MHz
轉(zhuǎn)換時(shí)間=1/(1 MHz/5個(gè)周期)=1/200 kHz=5 ?滋s,可見(jiàn)轉(zhuǎn)換時(shí)間很短。
2 觸摸屏驅(qū)動(dòng)程序
2.1 建立嵌入式Linux系統(tǒng)開(kāi)發(fā)環(huán)境
建立此開(kāi)發(fā)環(huán)境的步驟為:
?。?)在Windows XP SP3系統(tǒng)下安裝虛擬機(jī)vmware5.5.3,在虛擬機(jī)里安裝Redhat9.0系統(tǒng)。在Redhat9.0系統(tǒng)下編譯開(kāi)發(fā)板所需的鏡像和文件,使用虛擬機(jī)工具實(shí)現(xiàn)了Windows和Redhat的文件共享,在Windows系統(tǒng)下可以直接下載鏡像和文件到開(kāi)發(fā)板上。
?。?)使用Windows XP SP3自帶的超級(jí)終端,并使用串口線連接PC和開(kāi)發(fā)板。這樣就可以在PC上對(duì)開(kāi)發(fā)板進(jìn)行相關(guān)的操作。
?。?)本次實(shí)驗(yàn)開(kāi)發(fā)板使用的是Linux2.6.30.4內(nèi)核,而Redhat9.0系統(tǒng)是2.4.20.8內(nèi)核,所以需要下載適合開(kāi)發(fā)板的編譯器。下載最新版本的支持EABI技術(shù)的交叉編譯器(本次實(shí)驗(yàn)使用的是EABI_4.3.3_2009版本),復(fù)制到Redhat9.0系統(tǒng)目錄/opt/EABI_4.3.3_2009/下,打開(kāi)系統(tǒng)文件/etc/profile(可在終端使用命令vim /etc/profile),添加相應(yīng)語(yǔ)句(本次實(shí)驗(yàn)使用vim命令打開(kāi)profile文件,在第20行添加語(yǔ)句pathmunge/opt/EABI_4.3.3_2009/4.3.3/bin)讓編譯器生效,這樣就可以在PC上交叉編譯開(kāi)發(fā)板所需要的文件。至此開(kāi)發(fā)環(huán)境已經(jīng)建立。
2.2 Linux內(nèi)核的移植
本次實(shí)驗(yàn)使用的boatload是天嵌公司自己開(kāi)發(fā)的u-boot,用J-TAG燒寫(xiě)方式寫(xiě)入NOR Flash,然后便可以使用u-boot自帶的USB下載(需要在Windows下安裝USB下載驅(qū)動(dòng)程序)功能下載開(kāi)發(fā)板上需要的Linux內(nèi)核鏡像了,這樣方便而且高效。下載Linux2.6.30.4內(nèi)核源代碼,復(fù)制到Redhat9.0系統(tǒng)目錄/opt下,并解壓。在目錄/opt/linux2.6.30.4/目錄下便可以進(jìn)行修改和編譯開(kāi)發(fā)板上需要的內(nèi)核鏡像。在移植觸摸屏驅(qū)動(dòng)之前,需要移植板載256 MB NAND Flash的驅(qū)動(dòng)、yaffs文件系統(tǒng),這樣便完善了串口驅(qū)動(dòng)程序,最后移植LCD屏的驅(qū)動(dòng)。
2.3 觸摸屏驅(qū)動(dòng)程序
Linux系統(tǒng)將存儲(chǔ)器和外設(shè)分為字符設(shè)備、塊設(shè)備、網(wǎng)絡(luò)設(shè)備三大類(lèi)。觸摸屏屬于字符設(shè)備,以串行順序依次進(jìn)行訪問(wèn)。在Linux系統(tǒng)中,以文件名的形式在/dev目錄下建立觸摸屏設(shè)備文件, 應(yīng)用程序可以通過(guò)系統(tǒng)調(diào)用函數(shù)open()打開(kāi)此文件,建立起與設(shè)備的連接,然后通過(guò)函數(shù)read()、write()、release()、ioctl()等常規(guī)的文件操作對(duì)目標(biāo)設(shè)備進(jìn)行操作。Linux為了把所有的設(shè)備當(dāng)作文件系統(tǒng)進(jìn)行管理,為所有的文件及設(shè)備文件定義了統(tǒng)一的操作函數(shù)接口file_operations,每個(gè)文件都通過(guò)指向file_operations結(jié)構(gòu)的指針字段與它自己的函數(shù)集相關(guān)聯(lián)。file_operations中成員為一系列指向各操作函數(shù)的指針,這些操作函數(shù)主要負(fù)責(zé)系統(tǒng)調(diào)用的實(shí)現(xiàn),不同類(lèi)型的設(shè)備文件系統(tǒng)有不同類(lèi)型的file_operations結(jié)構(gòu)[4]。觸摸屏的 file_operations 結(jié)構(gòu)定義為:
static struct file_operation s3c2410_fops=
{
owner: THIS_MODULE,
open: s3c2410_ts_open, //打開(kāi)
read: s3c2410_ts_read, //讀坐標(biāo)
release:
s3c2410_ts_release,
#ifdef USE_ASYNC
Fasync:s3c2410_ts_fasync,//fasync()函數(shù)
#endif
poll:s3c2410_ts_poll,//輪詢(xún)
}
結(jié)構(gòu)中s3c2410_ts_open函數(shù)為file_operations中函數(shù)指針open所指向的函數(shù),即打開(kāi)觸摸屏設(shè)備時(shí) open操作即為調(diào)用s3c2410_ts_open函數(shù),完成觸摸屏初始狀態(tài)參數(shù)的設(shè)置、消息隊(duì)列初始化等。read所指向s3c2410_ts_
read函數(shù)主要是向消息隊(duì)列提供觸摸屏坐標(biāo)采集數(shù)據(jù),以供應(yīng)用程序調(diào)用。s3c2410_ts_poll為查詢(xún)?cè)O(shè)備的可讀寫(xiě)狀態(tài),s3c2410_ts_release則在釋放設(shè)備時(shí)調(diào)用。
在觸摸屏驅(qū)動(dòng)程序中定義了一組宏,用于控制觸摸屏和ADC進(jìn)入不同的工作模式,如等待中斷、X/Y位置轉(zhuǎn)換等。定義了觸摸屏結(jié)構(gòu)體TS_DEV包含一個(gè)緩沖區(qū)、自旋鎖、等待隊(duì)列和fasync_struct指針,結(jié)構(gòu)為:
typedef struct
{
unsigned int penStatus;
TS_RET buf[MAX_TS_BUF]; /*緩沖區(qū)*/
unsigned int head,tail; /*緩沖區(qū)頭和尾*/
wait_queue_head_t wq; /*等待隊(duì)列*/
spinlock_t lock;
#ifdef USE_ASYNC
struct fasync_struct *aq;
#endif
struct cdev cdev;
}TS_DEV;
觸摸屏結(jié)構(gòu)體中的TS_RET包含屏幕的X、Y坐標(biāo)和觸摸狀態(tài)信息(PEN_DOWN、PEN_UP),這個(gè)信息會(huì)在用戶(hù)讀取觸摸屏信息時(shí)復(fù)制到用戶(hù)空間,結(jié)構(gòu)為:
typedef struct
{
unsigned short pressure;
unsigned short x;//X坐標(biāo)
unsigned shorty;//Y坐標(biāo)
unsigned short pad;
}TS_RET;
觸摸屏工作時(shí)會(huì)產(chǎn)生兩類(lèi)中斷:一類(lèi)是觸點(diǎn)中斷(INT_TC),一類(lèi)是X/Y位置轉(zhuǎn)換中斷(INT_ADC)。使用函數(shù)s3c2410_isr_tc用來(lái)處理觸摸屏的觸點(diǎn)/抬起中斷,在觸點(diǎn)中斷發(fā)生后,若之前處于PEN_UP狀態(tài),則應(yīng)該啟動(dòng)X/Y位置轉(zhuǎn)換;當(dāng)處于PEN_DOWN狀態(tài)時(shí),則調(diào)用函數(shù)tsEvent完成緩沖區(qū)的填充、等待隊(duì)列的喚醒和異步通知信號(hào)的釋放。使用函數(shù)s3c2410_isr_adc來(lái)處理X/Y位置轉(zhuǎn)換中斷,當(dāng)X/Y位置轉(zhuǎn)換中斷發(fā)生后,讀取X、Y的坐標(biāo)值,填入緩沖區(qū)。在函數(shù)s3c2410_isr_adc中通過(guò)調(diào)用函數(shù)s3c2410_get_XY來(lái)獲取X、Y坐標(biāo)的。最后由函數(shù)s3c2410_ts_poll實(shí)現(xiàn)輪詢(xún)接口,將等待隊(duì)列添加到結(jié)構(gòu)體poll_table中,當(dāng)緩沖區(qū)有數(shù)據(jù)時(shí),返回資源可讀取標(biāo)志,否則返回0。函數(shù)s3c2410_ts_fasync完成觸摸屏對(duì)應(yīng)用程序的異步通知。在程序的最后,由函數(shù)__init s3c2410_ts_init和__exit s3c2410_ts_exit完成從內(nèi)核中加載和卸載觸摸屏驅(qū)動(dòng)程序,加載函數(shù)__init s3c2410_ts_init還需要完成申請(qǐng)?jiān)O(shè)備號(hào)、添加cdev、申請(qǐng)中斷、設(shè)置觸摸屏控制引腳等多項(xiàng)工作,卸載函數(shù)_exit s3c2410_ts_exit完成釋放設(shè)備號(hào)、刪除cdev、釋放中斷等工作[3]。
2.4 實(shí)驗(yàn)操作過(guò)程
將編寫(xiě)好的觸摸屏驅(qū)動(dòng)ts.c文件拷貝到內(nèi)核源碼目錄“drivers/input/touchsreen/”下,并修改同目錄下的“Kconfig”和“Makefile”文件。在內(nèi)核配置單中添加觸摸屏編譯配置選項(xiàng),修改Kconfig文件的第468行,添加如下內(nèi)容:
config TOUCHSCREEN
tristate “TouchScreen input driver”
depends on ARCH_S3C2410 && INPUT &&
INPUT_TOUCHSCREEN
help
Say Y here if you have the TouchScreen.
and depends on ADC
If unsure, say N.
To compile this driver as a module, choose M here: the
module will be called ts.
在目錄的Makefile文件中添加觸摸屏的編譯條目,添加內(nèi)容如下:
obj-$(CONFIG_TOUCHSCREEN) += ts.o
內(nèi)核配置單的選擇:
Device Drivers ---》
Input device support ---》
?。?] Touchscreens ---》
《*》 TouchScreen input driver
配置完畢后,保存配置單,然后編譯內(nèi)核,再將編譯好的鏡像下載到開(kāi)發(fā)板中運(yùn)行。
2.5 觸摸屏的校準(zhǔn)
TQ2440出廠時(shí)使用的是Linux2.6.25.8內(nèi)核,觸摸屏已經(jīng)完成校準(zhǔn),但本次實(shí)驗(yàn)重新使用了最新的Linux2.6.30.4內(nèi)核,所以需要重新校準(zhǔn)。移植好內(nèi)核之后,下載了天嵌公司已經(jīng)做好的QT圖形界面到開(kāi)發(fā)板,并重啟開(kāi)發(fā)板,校準(zhǔn)時(shí)只需要將觸摸筆點(diǎn)中十字架的中心,然后進(jìn)行5點(diǎn)校準(zhǔn),完畢后觸摸屏就可以正常使用。如圖1所示。
觸摸屏因其使用方便、快捷,而得到廣泛應(yīng)用。Linux系統(tǒng)因其源代碼公開(kāi)、成本低廉、裁減性好、高效、靈活等特點(diǎn),在嵌入式領(lǐng)域得到了很好的發(fā)展和應(yīng)用。本文介紹了觸摸屏的工作原理,對(duì)嵌入式Linux系統(tǒng)內(nèi)核源碼的觸摸屏驅(qū)動(dòng)做了深入探討,編譯和下載Linux內(nèi)核到開(kāi)發(fā)板上運(yùn)行,并且移植了QT圖形界面,觸摸屏校準(zhǔn)之后,使用情況良好。
?
1 硬件簡(jiǎn)介
1.1 TQ2440開(kāi)發(fā)板簡(jiǎn)介
天嵌公司生產(chǎn)的TQ2440開(kāi)發(fā)板,微處理器采用Samsung S3C2440AL,板載64 MB SDRAM、256 MB Nand Flash、2 MB Nor Flash,板載5線異步串行口(UART0)、100 Mb/s DM9000網(wǎng)卡、USB HOST接口、USB Device接口和一個(gè)SD卡接口,集成了4線電阻式觸摸屏接口和JTAG接口等,音頻接口采用芯片UDA1341,立體聲音頻輸出,可錄音。
1.2 S3C2440處理器簡(jiǎn)介
S3C2440是由三星公司推出的16/32 bit RISC微處理器,最高主頻可達(dá)533 MHz,為手持設(shè)備和一般類(lèi)型應(yīng)用提供了低價(jià)格、低功耗、高性能小型微控制器的解決方案。處理器內(nèi)部集成SDRAM控制器、LCD控制器、4通道DMA、3通道UART、I2C總線、I2S總線、SD接口、PWMtimer、觸摸屏接口、8通道10 bit A/D控制器和camera接口等,很便于一般開(kāi)發(fā)。
1.3 觸摸屏
按照觸摸屏的工作原理和傳輸信息的介質(zhì)一般可分為4種,分別為電阻式、紅外線式、電容感應(yīng)式以及表面聲波式。本次設(shè)計(jì)采用的是東華3.5英寸觸摸屏,為4線電阻式觸摸屏。具體參數(shù)為:型號(hào): WXCAT35-TG3#001F;尺寸:103 mm×83 mm;顯示面積:70.08 mm(H)×52.56 mm(V);顯示顏色:16.7兆色分辨率;對(duì)比度:300:1;亮度:320 cd/m2;電源:5 V電壓供電。
電阻式觸摸屏利用壓力感應(yīng)進(jìn)行控制,由觸摸檢測(cè)部件和觸摸屏控制器組成。觸摸檢測(cè)部件安裝在顯示器屏幕前面,用于檢測(cè)用戶(hù)觸摸位置,并將觸摸位置信息送到觸摸屏控制器;觸摸屏控制器的主要作用是從觸摸點(diǎn)檢測(cè)裝置上接收觸摸信息,并將它轉(zhuǎn)換成觸點(diǎn)坐標(biāo),再送給CPU,它同時(shí)能接收來(lái)自CPU的命令并加以執(zhí)行。觸摸屏的屏體部分是一塊與顯示器表面非常配合的多層復(fù)合薄膜,由一層玻璃或有機(jī)玻璃作為基層,表面涂有一層透明的導(dǎo)電層氧化銦(OTI),上面再覆蓋有一層外表面硬化處理、光滑防刮的塑料層,它的內(nèi)表面也涂有一層OTI,在兩層導(dǎo)電層之間有許多細(xì)?。ㄐ∮?/1 000)的透明隔離點(diǎn)把它們隔開(kāi)絕緣。當(dāng)手指接觸屏幕時(shí),兩層OTI導(dǎo)電層將出現(xiàn)一個(gè)接觸點(diǎn),因其中一面導(dǎo)電層接通Y軸方向的5 V均勻電壓場(chǎng),使得偵測(cè)層的電壓由零變?yōu)榉橇悖刂破鱾蓽y(cè)到這個(gè)接通數(shù)據(jù)后,進(jìn)行 A/D轉(zhuǎn)換,并將得到的電壓值與5 V相比較,即可得出觸摸點(diǎn)的Y軸坐標(biāo)。同理可得出X軸的坐標(biāo)。
S3C2440的觸摸屏接口包括觸摸觸點(diǎn)控制邏輯和有中斷產(chǎn)生邏輯的ADC接口邏輯,可以控制或選擇觸摸屏觸點(diǎn)用于XY坐標(biāo)的轉(zhuǎn)換。觸摸屏接口為了完成相應(yīng)的工作,具有4種工作模式[2]:
?。?)正常轉(zhuǎn)換模式:此模式與通用的AD轉(zhuǎn)換模式相似,可以在ADCCON(ADC控制寄存器)中設(shè)置,在ADCDAT0(ADC數(shù)據(jù)寄存器0)中完成數(shù)據(jù)讀寫(xiě)。
?。?)X/Y坐標(biāo)各自轉(zhuǎn)換:觸摸屏控制器支持兩種轉(zhuǎn)換模式,X/Y坐標(biāo)各自轉(zhuǎn)換與X/Y坐標(biāo)自動(dòng)轉(zhuǎn)換。各自轉(zhuǎn)換是在X模式下,將X坐標(biāo)寫(xiě)入ADCDAT0后產(chǎn)生中斷;在Y模式下,將Y坐標(biāo)寫(xiě)入ADCDAT1后產(chǎn)生中斷。
?。?)X/Y坐標(biāo)自動(dòng)轉(zhuǎn)換:在此模式下,觸摸屏控制器先后轉(zhuǎn)換觸摸點(diǎn)的X坐標(biāo)與Y坐標(biāo)。當(dāng)X坐標(biāo)與Y坐標(biāo)都轉(zhuǎn)換完成時(shí),中斷控制器產(chǎn)生中斷。
?。?)等待中斷模式:當(dāng)觸摸筆按下時(shí),觸摸屏產(chǎn)生中斷(INT_TC)。等待中斷模式必須將寄存器rADCTSC設(shè)置為0xd3;在觸摸屏控制器產(chǎn)生中斷以后,必須將此模式清除。
如果GCLK是50 MHz且預(yù)分頻器的分頻值設(shè)置為49 MHz,10 bit的轉(zhuǎn)換時(shí)間按下式計(jì)算:
A/D轉(zhuǎn)換頻率=50 MHz/(49+1)MHz=1 MHz
轉(zhuǎn)換時(shí)間=1/(1 MHz/5個(gè)周期)=1/200 kHz=5 ?滋s,可見(jiàn)轉(zhuǎn)換時(shí)間很短。
2 觸摸屏驅(qū)動(dòng)程序
2.1 建立嵌入式Linux系統(tǒng)開(kāi)發(fā)環(huán)境
建立此開(kāi)發(fā)環(huán)境的步驟為:
?。?)在Windows XP SP3系統(tǒng)下安裝虛擬機(jī)vmware5.5.3,在虛擬機(jī)里安裝Redhat9.0系統(tǒng)。在Redhat9.0系統(tǒng)下編譯開(kāi)發(fā)板所需的鏡像和文件,使用虛擬機(jī)工具實(shí)現(xiàn)了Windows和Redhat的文件共享,在Windows系統(tǒng)下可以直接下載鏡像和文件到開(kāi)發(fā)板上。
?。?)使用Windows XP SP3自帶的超級(jí)終端,并使用串口線連接PC和開(kāi)發(fā)板。這樣就可以在PC上對(duì)開(kāi)發(fā)板進(jìn)行相關(guān)的操作。
?。?)本次實(shí)驗(yàn)開(kāi)發(fā)板使用的是Linux2.6.30.4內(nèi)核,而Redhat9.0系統(tǒng)是2.4.20.8內(nèi)核,所以需要下載適合開(kāi)發(fā)板的編譯器。下載最新版本的支持EABI技術(shù)的交叉編譯器(本次實(shí)驗(yàn)使用的是EABI_4.3.3_2009版本),復(fù)制到Redhat9.0系統(tǒng)目錄/opt/EABI_4.3.3_2009/下,打開(kāi)系統(tǒng)文件/etc/profile(可在終端使用命令vim /etc/profile),添加相應(yīng)語(yǔ)句(本次實(shí)驗(yàn)使用vim命令打開(kāi)profile文件,在第20行添加語(yǔ)句pathmunge/opt/EABI_4.3.3_2009/4.3.3/bin)讓編譯器生效,這樣就可以在PC上交叉編譯開(kāi)發(fā)板所需要的文件。至此開(kāi)發(fā)環(huán)境已經(jīng)建立。
2.2 Linux內(nèi)核的移植
本次實(shí)驗(yàn)使用的boatload是天嵌公司自己開(kāi)發(fā)的u-boot,用J-TAG燒寫(xiě)方式寫(xiě)入NOR Flash,然后便可以使用u-boot自帶的USB下載(需要在Windows下安裝USB下載驅(qū)動(dòng)程序)功能下載開(kāi)發(fā)板上需要的Linux內(nèi)核鏡像了,這樣方便而且高效。下載Linux2.6.30.4內(nèi)核源代碼,復(fù)制到Redhat9.0系統(tǒng)目錄/opt下,并解壓。在目錄/opt/linux2.6.30.4/目錄下便可以進(jìn)行修改和編譯開(kāi)發(fā)板上需要的內(nèi)核鏡像。在移植觸摸屏驅(qū)動(dòng)之前,需要移植板載256 MB NAND Flash的驅(qū)動(dòng)、yaffs文件系統(tǒng),這樣便完善了串口驅(qū)動(dòng)程序,最后移植LCD屏的驅(qū)動(dòng)。
2.3 觸摸屏驅(qū)動(dòng)程序
Linux系統(tǒng)將存儲(chǔ)器和外設(shè)分為字符設(shè)備、塊設(shè)備、網(wǎng)絡(luò)設(shè)備三大類(lèi)。觸摸屏屬于字符設(shè)備,以串行順序依次進(jìn)行訪問(wèn)。在Linux系統(tǒng)中,以文件名的形式在/dev目錄下建立觸摸屏設(shè)備文件, 應(yīng)用程序可以通過(guò)系統(tǒng)調(diào)用函數(shù)open()打開(kāi)此文件,建立起與設(shè)備的連接,然后通過(guò)函數(shù)read()、write()、release()、ioctl()等常規(guī)的文件操作對(duì)目標(biāo)設(shè)備進(jìn)行操作。Linux為了把所有的設(shè)備當(dāng)作文件系統(tǒng)進(jìn)行管理,為所有的文件及設(shè)備文件定義了統(tǒng)一的操作函數(shù)接口file_operations,每個(gè)文件都通過(guò)指向file_operations結(jié)構(gòu)的指針字段與它自己的函數(shù)集相關(guān)聯(lián)。file_operations中成員為一系列指向各操作函數(shù)的指針,這些操作函數(shù)主要負(fù)責(zé)系統(tǒng)調(diào)用的實(shí)現(xiàn),不同類(lèi)型的設(shè)備文件系統(tǒng)有不同類(lèi)型的file_operations結(jié)構(gòu)[4]。觸摸屏的 file_operations 結(jié)構(gòu)定義為:
static struct file_operation s3c2410_fops=
{
owner: THIS_MODULE,
open: s3c2410_ts_open, //打開(kāi)
read: s3c2410_ts_read, //讀坐標(biāo)
release:
s3c2410_ts_release,
#ifdef USE_ASYNC
Fasync:s3c2410_ts_fasync,//fasync()函數(shù)
#endif
poll:s3c2410_ts_poll,//輪詢(xún)
}
結(jié)構(gòu)中s3c2410_ts_open函數(shù)為file_operations中函數(shù)指針open所指向的函數(shù),即打開(kāi)觸摸屏設(shè)備時(shí) open操作即為調(diào)用s3c2410_ts_open函數(shù),完成觸摸屏初始狀態(tài)參數(shù)的設(shè)置、消息隊(duì)列初始化等。read所指向s3c2410_ts_
read函數(shù)主要是向消息隊(duì)列提供觸摸屏坐標(biāo)采集數(shù)據(jù),以供應(yīng)用程序調(diào)用。s3c2410_ts_poll為查詢(xún)?cè)O(shè)備的可讀寫(xiě)狀態(tài),s3c2410_ts_release則在釋放設(shè)備時(shí)調(diào)用。
在觸摸屏驅(qū)動(dòng)程序中定義了一組宏,用于控制觸摸屏和ADC進(jìn)入不同的工作模式,如等待中斷、X/Y位置轉(zhuǎn)換等。定義了觸摸屏結(jié)構(gòu)體TS_DEV包含一個(gè)緩沖區(qū)、自旋鎖、等待隊(duì)列和fasync_struct指針,結(jié)構(gòu)為:
typedef struct
{
unsigned int penStatus;
TS_RET buf[MAX_TS_BUF]; /*緩沖區(qū)*/
unsigned int head,tail; /*緩沖區(qū)頭和尾*/
wait_queue_head_t wq; /*等待隊(duì)列*/
spinlock_t lock;
#ifdef USE_ASYNC
struct fasync_struct *aq;
#endif
struct cdev cdev;
}TS_DEV;
觸摸屏結(jié)構(gòu)體中的TS_RET包含屏幕的X、Y坐標(biāo)和觸摸狀態(tài)信息(PEN_DOWN、PEN_UP),這個(gè)信息會(huì)在用戶(hù)讀取觸摸屏信息時(shí)復(fù)制到用戶(hù)空間,結(jié)構(gòu)為:
typedef struct
{
unsigned short pressure;
unsigned short x;//X坐標(biāo)
unsigned shorty;//Y坐標(biāo)
unsigned short pad;
}TS_RET;
觸摸屏工作時(shí)會(huì)產(chǎn)生兩類(lèi)中斷:一類(lèi)是觸點(diǎn)中斷(INT_TC),一類(lèi)是X/Y位置轉(zhuǎn)換中斷(INT_ADC)。使用函數(shù)s3c2410_isr_tc用來(lái)處理觸摸屏的觸點(diǎn)/抬起中斷,在觸點(diǎn)中斷發(fā)生后,若之前處于PEN_UP狀態(tài),則應(yīng)該啟動(dòng)X/Y位置轉(zhuǎn)換;當(dāng)處于PEN_DOWN狀態(tài)時(shí),則調(diào)用函數(shù)tsEvent完成緩沖區(qū)的填充、等待隊(duì)列的喚醒和異步通知信號(hào)的釋放。使用函數(shù)s3c2410_isr_adc來(lái)處理X/Y位置轉(zhuǎn)換中斷,當(dāng)X/Y位置轉(zhuǎn)換中斷發(fā)生后,讀取X、Y的坐標(biāo)值,填入緩沖區(qū)。在函數(shù)s3c2410_isr_adc中通過(guò)調(diào)用函數(shù)s3c2410_get_XY來(lái)獲取X、Y坐標(biāo)的。最后由函數(shù)s3c2410_ts_poll實(shí)現(xiàn)輪詢(xún)接口,將等待隊(duì)列添加到結(jié)構(gòu)體poll_table中,當(dāng)緩沖區(qū)有數(shù)據(jù)時(shí),返回資源可讀取標(biāo)志,否則返回0。函數(shù)s3c2410_ts_fasync完成觸摸屏對(duì)應(yīng)用程序的異步通知。在程序的最后,由函數(shù)__init s3c2410_ts_init和__exit s3c2410_ts_exit完成從內(nèi)核中加載和卸載觸摸屏驅(qū)動(dòng)程序,加載函數(shù)__init s3c2410_ts_init還需要完成申請(qǐng)?jiān)O(shè)備號(hào)、添加cdev、申請(qǐng)中斷、設(shè)置觸摸屏控制引腳等多項(xiàng)工作,卸載函數(shù)_exit s3c2410_ts_exit完成釋放設(shè)備號(hào)、刪除cdev、釋放中斷等工作[3]。
2.4 實(shí)驗(yàn)操作過(guò)程
將編寫(xiě)好的觸摸屏驅(qū)動(dòng)ts.c文件拷貝到內(nèi)核源碼目錄“drivers/input/touchsreen/”下,并修改同目錄下的“Kconfig”和“Makefile”文件。在內(nèi)核配置單中添加觸摸屏編譯配置選項(xiàng),修改Kconfig文件的第468行,添加如下內(nèi)容:
config TOUCHSCREEN
tristate “TouchScreen input driver”
depends on ARCH_S3C2410 && INPUT &&
INPUT_TOUCHSCREEN
help
Say Y here if you have the TouchScreen.
and depends on ADC
If unsure, say N.
To compile this driver as a module, choose M here: the
module will be called ts.
在目錄的Makefile文件中添加觸摸屏的編譯條目,添加內(nèi)容如下:
obj-$(CONFIG_TOUCHSCREEN) += ts.o
內(nèi)核配置單的選擇:
Device Drivers ---》
Input device support ---》
?。?] Touchscreens ---》
《*》 TouchScreen input driver
配置完畢后,保存配置單,然后編譯內(nèi)核,再將編譯好的鏡像下載到開(kāi)發(fā)板中運(yùn)行。
2.5 觸摸屏的校準(zhǔn)
TQ2440出廠時(shí)使用的是Linux2.6.25.8內(nèi)核,觸摸屏已經(jīng)完成校準(zhǔn),但本次實(shí)驗(yàn)重新使用了最新的Linux2.6.30.4內(nèi)核,所以需要重新校準(zhǔn)。移植好內(nèi)核之后,下載了天嵌公司已經(jīng)做好的QT圖形界面到開(kāi)發(fā)板,并重啟開(kāi)發(fā)板,校準(zhǔn)時(shí)只需要將觸摸筆點(diǎn)中十字架的中心,然后進(jìn)行5點(diǎn)校準(zhǔn),完畢后觸摸屏就可以正常使用。如圖1所示。
觸摸屏因其使用方便、快捷,而得到廣泛應(yīng)用。Linux系統(tǒng)因其源代碼公開(kāi)、成本低廉、裁減性好、高效、靈活等特點(diǎn),在嵌入式領(lǐng)域得到了很好的發(fā)展和應(yīng)用。本文介紹了觸摸屏的工作原理,對(duì)嵌入式Linux系統(tǒng)內(nèi)核源碼的觸摸屏驅(qū)動(dòng)做了深入探討,編譯和下載Linux內(nèi)核到開(kāi)發(fā)板上運(yùn)行,并且移植了QT圖形界面,觸摸屏校準(zhǔn)之后,使用情況良好。
?
下載該資料的人也在下載
下載該資料的人還在閱讀
更多 >
- 基于ARM處理器S3C2440和Linux統(tǒng)的I2C觸摸屏設(shè)計(jì)
- AD7877輸入觸摸屏控制器Linux驅(qū)動(dòng)
- 觸摸屏界面通用設(shè)計(jì)原則研究 26次下載
- Android的觸摸屏進(jìn)行校準(zhǔn)的方法詳細(xì)說(shuō)明
- Android4.2觸摸屏驅(qū)動(dòng)與4.0有哪些不同
- 基于有限狀態(tài)機(jī)的Linux多點(diǎn)觸摸屏驅(qū)動(dòng)設(shè)計(jì)劉斌 0次下載
- 觸摸屏的應(yīng)用與工作原理解析 38次下載
- 基于TQ2440的ARM啟動(dòng)代碼注釋分析 199次下載
- TQ2440開(kāi)發(fā)板按鍵點(diǎn)亮LED驅(qū)動(dòng)開(kāi)發(fā)詳解 179次下載
- 基于TQ2440開(kāi)發(fā)板的Linux-2.6.30.4的網(wǎng)絡(luò)攝像機(jī)的實(shí)現(xiàn) 107次下載
- LM3S8962驅(qū)動(dòng)觸摸屏 219次下載
- 基于TQ2440開(kāi)發(fā)板的Linux網(wǎng)絡(luò)攝像機(jī)的實(shí)現(xiàn) 136次下載
- 基于S3C2440和嵌入式Linux的擴(kuò)展串口設(shè)計(jì) 147次下載
- TQ2440底板原理圖
- TQ2440 H-JTAG燒寫(xiě)程序教程
- 手機(jī)觸摸屏失靈的原因及解決方法 手機(jī)觸摸屏失靈怎么關(guān)機(jī) 1.7w次閱讀
- 電容觸摸屏原理 電容觸摸屏和電阻觸摸屏有什么區(qū)別 2810次閱讀
- DWIN觸摸屏的驅(qū)動(dòng)設(shè)計(jì)與實(shí)現(xiàn) 2681次閱讀
- 基于I2C的嵌入式Linux多點(diǎn)觸摸屏幕驅(qū)動(dòng)系統(tǒng)設(shè)計(jì) 1143次閱讀
- 電容式觸摸屏參數(shù)_電容式觸摸屏分類(lèi) 1.3w次閱讀
- 電阻觸摸屏和電容觸摸屏哪個(gè)更具有優(yōu)勢(shì) 1.5w次閱讀
- 基于觸摸屏的LED驅(qū)動(dòng)電路設(shè)計(jì) 4167次閱讀
- 基于嵌入式linux系統(tǒng)下的AD7873觸摸屏驅(qū)動(dòng)系統(tǒng)設(shè)計(jì)詳解 1613次閱讀
- 電阻式觸摸屏校準(zhǔn)算法的優(yōu)化_電阻式觸摸屏工作原理 9507次閱讀
- 觸摸屏技術(shù)是誰(shuí)發(fā)明的_觸摸屏技術(shù)的發(fā)展歷程 2.8w次閱讀
- 技術(shù)干貨:WinCE 7.0下的觸摸屏驅(qū)動(dòng) 3663次閱讀
- 基于ARM的矩陣鍵盤(pán)設(shè)計(jì)及其linux驅(qū)動(dòng)實(shí)現(xiàn) 3057次閱讀
- 基于嵌入式技術(shù)的智能儀器觸摸屏接口設(shè)計(jì) 2731次閱讀
- 基于MeeGo的電容式觸摸屏驅(qū)動(dòng)設(shè)計(jì) 1313次閱讀
- 觸摸屏之電阻屏、電容屏詳解 4064次閱讀
下載排行
本周
- 1TC358743XBG評(píng)估板參考手冊(cè)
- 1.36 MB | 330次下載 | 免費(fèi)
- 2開(kāi)關(guān)電源基礎(chǔ)知識(shí)
- 5.73 MB | 6次下載 | 免費(fèi)
- 3100W短波放大電路圖
- 0.05 MB | 4次下載 | 3 積分
- 4嵌入式linux-聊天程序設(shè)計(jì)
- 0.60 MB | 3次下載 | 免費(fèi)
- 5基于FPGA的光纖通信系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
- 0.61 MB | 2次下載 | 免費(fèi)
- 6基于FPGA的C8051F單片機(jī)開(kāi)發(fā)板設(shè)計(jì)
- 0.70 MB | 2次下載 | 免費(fèi)
- 751單片機(jī)窗簾控制器仿真程序
- 1.93 MB | 2次下載 | 免費(fèi)
- 8基于51單片機(jī)的RGB調(diào)色燈程序仿真
- 0.86 MB | 2次下載 | 免費(fèi)
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 2555集成電路應(yīng)用800例(新編版)
- 0.00 MB | 33564次下載 | 免費(fèi)
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費(fèi)
- 4開(kāi)關(guān)電源設(shè)計(jì)實(shí)例指南
- 未知 | 21548次下載 | 免費(fèi)
- 5電氣工程師手冊(cè)免費(fèi)下載(新編第二版pdf電子書(shū))
- 0.00 MB | 15349次下載 | 免費(fèi)
- 6數(shù)字電路基礎(chǔ)pdf(下載)
- 未知 | 13750次下載 | 免費(fèi)
- 7電子制作實(shí)例集錦 下載
- 未知 | 8113次下載 | 免費(fèi)
- 8《LED驅(qū)動(dòng)電路設(shè)計(jì)》 溫德?tīng)栔?/a>
- 0.00 MB | 6653次下載 | 免費(fèi)
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費(fèi)
- 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
- 78.1 MB | 537796次下載 | 免費(fèi)
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420026次下載 | 免費(fèi)
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費(fèi)
- 6電路仿真軟件multisim 10.0免費(fèi)下載
- 340992 | 191185次下載 | 免費(fèi)
- 7十天學(xué)會(huì)AVR單片機(jī)與C語(yǔ)言視頻教程 下載
- 158M | 183278次下載 | 免費(fèi)
- 8proe5.0野火版下載(中文版免費(fèi)下載)
- 未知 | 138040次下載 | 免費(fèi)
評(píng)論
查看更多