2440 ADC觸摸屏控制
s3c2440的ADC和觸摸屏的流程圖如上所示:
打開ADC中斷INT_ADC,包括次級(jí)中斷INT_ADC_S和INT_TC。
設(shè)置ADCCON寄存器的預(yù)分頻使能和ADC的頻率,ADC的頻率不能大于2.5MHz,并且要小于GCLK的1/5,這里選1MHz,根據(jù)公式ADC freq=GCLK/(PRSCVL+1),GCLK為50MHz,得PRSCVL=49,轉(zhuǎn)換時(shí)間為1/(1MHz/5)=5us。
設(shè)置ADCDLY寄存器配置采樣和轉(zhuǎn)換的延遲時(shí)間,若設(shè)為50000,表明采樣延時(shí)時(shí)間=(1/X-tal)*50000=13.56ms,轉(zhuǎn)換延遲時(shí)間=(1/GCLK)*50000=1ms。(在ADC轉(zhuǎn)換前,延時(shí)時(shí)鐘為X-tal(3.68MHz),轉(zhuǎn)換期間為GCLK)
設(shè)置ADCTSC進(jìn)入等待按下中斷,當(dāng)按下的時(shí)候,觸發(fā)了中斷,依據(jù)SUBSRCPND可知道是ADC轉(zhuǎn)換完畢觸發(fā)的,還是觸摸屏被按下觸發(fā)的(因?yàn)镾RCPND中兩個(gè)中斷共用1位)分別跳轉(zhuǎn)不同的中斷入口。
如果是TC中斷,判斷是由UP還是DOWN產(chǎn)生的中斷,如果是DOWN,則設(shè)置ADCTSC寄存器的位[1:0]為00,位[2]為1,自動(dòng)XY轉(zhuǎn)換模式,位[3]為1,禁止XP上拉,而后設(shè)置ADCCON位[0]為1,開啟ADC轉(zhuǎn)換。
轉(zhuǎn)換完成之后產(chǎn)生ADC中斷,進(jìn)入ADC處理函數(shù),從ADCDAT0中讀取XP,ADCDAT1中讀取YP(XP和YP是電壓的值,并不是xy坐標(biāo)的值,需要轉(zhuǎn)換),根據(jù)得到的數(shù)據(jù)進(jìn)行所需的處理,這里是根據(jù)y坐標(biāo)的值判斷電子書的上翻頁或下翻頁。處理完畢后,設(shè)置ADCTSC為等待松開中斷,當(dāng)松開中斷產(chǎn)生后,重新設(shè)置ADCTSC為等待按下中斷。如此循環(huán)即可
在根據(jù)y坐標(biāo)的值判斷電子書上翻頁后下翻頁之前,需要將從ADCDATn中讀取的XP和YP轉(zhuǎn)換為對(duì)應(yīng)的xy坐標(biāo)(1個(gè)像素為1點(diǎn)坐標(biāo)),當(dāng)y坐標(biāo)大于120時(shí)(下半屏幕),則執(zhí)行下翻頁,當(dāng)y坐標(biāo)小于120(上半屏幕),則執(zhí)行上翻頁。轉(zhuǎn)換方法一般為分別按下屏幕的4個(gè)角,在超級(jí)終端上打印出對(duì)應(yīng)的XP和YP,得到xy坐標(biāo)和XP、YP的近似轉(zhuǎn)換公式,如下圖所示:
其中框內(nèi)的數(shù)據(jù)表示從ADCDATn中讀取AD轉(zhuǎn)換后的值(XP,YP),框外的數(shù)據(jù)是按下的4個(gè)角的近視坐標(biāo)(x,y)。在x軸方向上,可知x坐標(biāo)隨著YP的減小而增大,根據(jù)(0,0)到(319,0)可知變化因子為(954-80)/(319-0)=2.74,根據(jù)(0,239)到(319,239)可知變化因子(955-76)/(319-0)=2.76,因此變化因子?。?.74+2.76)/2=2.75,由此,可得x坐標(biāo)和YP的轉(zhuǎn)換公式:x≈(954-YP)/2.74,同理y坐標(biāo)和XP的轉(zhuǎn)換公式:y≈(916-XP)/3.67。
得到xy的坐標(biāo)之后就可以進(jìn)行相應(yīng)的操作了。