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