s3c2440的adc和触摸屏的流程图如上所示:
打开adc中断int_adc,包括次级中断int_adc_s和int_tc。
设置adccon寄存器的预分频使能和adc的频率,adc的频率不能大于2.5mhz,并且要小于gclk的1/5,这里选1mhz,根据公式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进入等待按下中断,当按下的时候,触发了中断,依据subsrcpnd可知道是adc转换完毕触发的,还是触摸屏被按下触发的(因为srcpnd中两个中断共用1位)分别跳转不同的中断入口。
如果是tc中断,判断是由up还是down产生的中断,如果是down,则设置adctsc寄存器的位[1:0]为00,位[2]为1,自动xy转换模式,位[3]为1,禁止xp上拉,而后设置adccon位[0]为1,开启adc转换。
转换完成之后产生adc中断,进入adc处理函数,从adcdat0中读取xp,adcdat1中读取yp(xp和yp是电压的值,并不是xy坐标的值,需要转换),根据得到的数据进行所需的处理,这里是根据y坐标的值判断电子书的上翻页或下翻页。处理完毕后,设置adctsc为等待松开中断,当松开中断产生后,重新设置adctsc为等待按下中断。如此循环即可
在根据y坐标的值判断电子书上翻页后下翻页之前,需要将从adcdatn中读取的xp和yp转换为对应的xy坐标(1个像素为1点坐标),当y坐标大于120时(下半屏幕),则执行下翻页,当y坐标小于120(上半屏幕),则执行上翻页。转换方法一般为分别按下屏幕的4个角,在超级终端上打印出对应的xp和yp,得到xy坐标和xp、yp的近似转换公式,如下图所示:
其中框内的数据表示从adcdatn中读取ad转换后的值(xp,yp),框外的数据是按下的4个角的近视坐标(x,y)。在x轴方向上,可知x坐标随着yp的减小而增大,根据(0,0)到(319,0)可知变化因子为(954-80)/(319-0)=2.74,根据(0,239)到(319,239)可知变化因子(955-76)/(319-0)=2.76,因此变化因子取(2.74 2.76)/2=2.75,由此,可得x坐标和yp的转换公式:x≈(954-yp)/2.74,同理y坐标和xp的转换公式:y≈(916-xp)/3.67。
得到xy的坐标之后就可以进行相应的操作了。
『本文转载自网络,九游会j9的版权归原作者所有,如有侵权请联系删除』