- 易迪拓培训,专注于微波、射频、天线设计工程师的培养
嵌入式操作系统Nucleus下触摸屏驱动的开发
2.Nucleus下ADS7846的驱动设计
驱动设计的目的是将触摸坐标即时的转换为显示坐标,直接在LCD屏上显示出来,然后经过输入识别软件的处理(例如汉王的识别软件),识别出输入的字符,汉字等。
2.1 当触摸屏按下时,会产生一个中断,应当为ADS7846配置一个中断。在Nucleus下,中断分两种,Low level 中断(Lisr)和High level 中断(Hisr),一般的中断服务程序在Hisr当中处理。一个较为复杂的,多任务嵌入式系统当中,中断服务程序(优先级比普通任务的优先级高)不能占用太多的时间,否则可能会导致其他任务不能及时得到响应。例如在触摸屏中断服务程序的处理,在较坏的情况下,触摸屏可能一直被按下去,其Hisr就会占用很多的资源,导致别的任务(例如一个手机应用当中,可能导致接受电话的任务不能处理,而这是不能让人接受的,不能想象当你写短信时不能接受电话的情况,)所以当中断服务程序需要占用CPU较多的处理时间时,一般要在另外激活一个任务,由任务调度机制来处理和系统中其他任务的关系,它的流程图如图四所示,实践证明,这种处理方法是较好的处理方法。
图4
2.2 这里不打算对怎么创建一个Lisr,Hisr和激活一个任务做太多的介绍,详细可以看Nucleus的文档。重点介绍ADS7846的驱动程序的处理和如何将所得数据在LCD上正确显示出来。
2.2.1 ADS7846处理程序的流程图如图五所示
图5
ADS7846在计算触摸坐标时有两种方式,single ended模式和difference 模式。Single ended模式利用ADS7846内部参考电压或者外部参考电压,得出的结果是一个电压的AD结果。 Difference 不需要内部或者外部的参考电压,这种模式得出的结果是触摸点在触摸屏位置上的百分比。这种模式可以消除参考电压波动对换算结果的影响。 2.2.2 ADS7846换算结果在LCD屏幕上的映射
假设LCD是个160 x 128 像素大小的屏幕,如图六所示,假设A点的坐标为(0,0),那么可知道B,C,D是(128,0),(0,160),(128,160)。通过ADS7846得出A,B,C,D的转换结果分别是(Xa,Ya),(Xb,Yb),(Xc,Yc),(Xd,Yd),再得出屏幕中任意点X转换结果(Xx,Yx),那么X的坐标(x,y)可以通过下式算出来:
X=Xb -Xa=Xd -Xc
Y=Yc -Ya=Yd -Yb
x = (Xx-Xa) * 128 /X
y = (Yx -Ya) * 160/Y
得出触摸屏的一系列坐标以后,作为手写识别软件的输入,就可得出输入的汉字,字符等。
3. 结论
本文简单介绍了Nucleus下触摸屏驱动的开发,由于当前触摸屏的应用越来越广泛,嵌入式系统的应用范围也越来越广,将对其他嵌入式系统下驱动的开发有一定的借鉴意义。
闂傚倸鍊搁崐鎼佸磹妞嬪海鐭嗗ù锝堟缁€濠傗攽閻樻彃鈧绱撳杈ㄥ枑闁哄啫鐗勯埀顑跨窔瀵粙顢橀悙鑼垛偓鍨攽閿涘嫬浠х紒顕呭灦瀵偊鎮╃紒妯锋嫼闂備緡鍋嗛崑娑㈡嚐椤栨稒娅犳い鏂款潟娴滄粍銇勯幘璺轰沪闁稿鍎抽埀顒冾潐濞叉粓骞婇幘璇茬叀濠㈣泛艌閺嬪酣鏌熼柇锕€鏋涚紒鎻掓健濮婂宕掑▎鎴濆闂佽鍠栭悥鐓庣暦閹版澘鍗抽柣蹇氼嚙缂嶅﹪骞冨⿰鍫熷癄濠㈣泛鐭堥崬鐢告⒑鐠囨彃鍤辩紓宥呮瀹曚即寮介銈勭瑝闂佸搫琚崕鏌ユ偂濞嗗緷褰掓偂鎼达絾鎲煎┑鐐村毆閸ャ劎鍘靛銈嗘瀹曠數绮i弮鈧幈銊︾節閸涱噮浠╅梺鍛婄墬閻楃姴顕i幘顔藉亜闁告縿鍎辩徊鍨攽閿涘嫬浜奸柛濠冨灴瀹曠銇愰幒鎾存珖濡炪倕绻愰悧鍕焵椤戣法顦﹂柍璇查叄楠炴ê鐣烽崶鑸敌у┑锛勫亼閸婃牠鎮уΔ鍐ㄦ瀳鐎广儱顦伴崐鍨亜閹哄棗浜鹃梺瀹狀潐閸ㄥ潡骞冨▎鎾崇煑濠㈣埖蓱閿涗線姊绘担瑙勫仩闁告柨閰e畷浼村冀瑜滈崵鏇炩攽閻樺磭顣查柡鍛倐閺屻劑鎮ら崒娑橆伓 | More...
闂傚倸鍊搁崐鎼佸磹妞嬪海鐭嗗ù锝堟缁€濠傗攽閻樻彃鈧绱撳杈ㄥ枑闁哄啫鐗勯埀顑跨窔瀵粙顢橀悙鑼垛偓鍨攽閿涘嫬浠х紒顕呭灦瀵偊鎮╃紒妯锋嫼闂備緡鍋嗛崑娑㈡嚐椤栨稒娅犳い鏂款潟娴滄粍銇勯幘璺轰沪闁稿鍎抽埀顒冾潐濞叉粓骞婇幘璇茬叀濠㈣泛艌閺嬪酣鏌熼柇锕€鏋涚紒鎻掓健濮婂宕掑▎鎴濆闂佽鍠栭悥鐓庣暦閹版澘鍗抽柣蹇氼嚙缂嶅﹪骞冨⿰鍫熷癄濠㈣泛鐭堥崬鐢告⒑鐠囨彃鍤辩紓宥呮瀹曚即寮介銈勭瑝闂佸搫琚崕鏌ユ偂濞嗗緷褰掓偂鎼达絾鎲煎┑鐐村毆閸ャ劎鍘靛銈嗘瀹曠數绮i弮鈧幈銊︾節閸涱噮浠╅梺鍛婄墬閻楃姴顕i幘顔藉亜闁告縿鍎辩徊鍨攽閿涘嫬浜奸柛濠冨灴瀹曠銇愰幒鎾存珖濡炪倕绻愰悧鍕焵椤戣法顦﹂柍璇查叄楠炴ê鐣烽崶鑸敌у┑锛勫亼閸婃牠骞愭ィ鍐ㄧ獥閹兼番鍔嶉崑鐔访归悡搴f憼闁抽攱鍨块弻娑樷槈濮楀牊鏁鹃柣搴$仛閻熲晠寮诲鍫闂佸憡鎸鹃崰搴敋閿濆棛绡€婵﹩鍘藉▍銏ゆ⒑鐠恒劌娅愰柟鍑ゆ嫹
闂傚倸鍊搁崐鎼佸磹妞嬪海鐭嗗〒姘e亾妤犵偛顦甸弫鎾绘偐閸愯弓缃曢梻浣告惈濞层劍鎱ㄦ搴g焼濠电姴鍊甸弨浠嬫煟濡搫绾ч柟鍏煎姍閺屾稓浠︾拠鎻掝潎闂佸搫鏈ú鐔风暦閻撳簶鏀介柟閭﹀帨瑜斿铏圭矙濞嗘儳鍓梺鍛婃煥閻倸锕㈡笟鈧娲箰鎼达絿鐣甸梺鐟板暱闁帮絽顕i幎鑺ュ亜闁稿繗鍋愰崢浠嬫⒑閸濆嫬鈧湱鈧瑳鍥у惞闁搞儺鍓氶悡娆愩亜閺冣偓椤戞瑥岣块幇鐗堢厵鐎瑰嫮澧楅崵鍥煙椤旀儳鍘存鐐茬Ч椤㈡岸宕ㄩ褏鍋涢埞鎴︽晬閸曨偂鏉梺绋匡攻閻楃娀鐛幇顓犵瘈婵﹩鍓涢悾娲⒑缁嬫寧婀版慨妯稿姂瀵娊鏁冮崒娑氬弰闂婎偄娲﹂崙鐟搬缚閹扮増鐓曢煫鍥ㄦ⒒閻帡鏌$仦鍓р槈妤楊亙鍗抽崺鈧い鎺戝€婚惌鍡椼€掑锝呬壕閻庢鍣崑濠囩嵁鎼淬劍鍤嶉柕澹啫绠洪梻鍌欒兌缁垶鏁嬮悗娈垮枛閻栧ジ鐛弽顓炵疀妞ゆ帒顦遍崬鐢告偡濠婂啰鐏遍柛鎺撳笒閳诲酣骞橀搹顐P氶梻渚€娼х换鍫ュ磹閺嶎厼鐤鹃柟闂寸劍閻撱儵鏌i弴鐐测偓鍦偓姘炬嫹
闂傚倸鍊搁崐鎼佸磹妞嬪海鐭嗗ù锝堟缁€濠傗攽閻樻彃鈧绱撳杈ㄥ枑闁哄啫鐗勯埀顑跨窔瀵粙顢橀悙鑼垛偓鍨攽閿涘嫬浠х紒顕呭灦瀵偊鎮╃紒妯锋嫼闂備緡鍋嗛崑娑㈡嚐椤栨稒娅犳い鏂款潟娴滄粍銇勯幘璺轰沪闁稿鍎抽埀顒冾潐濞叉粓骞婇幘璇茬叀濠㈣泛艌閺嬪酣鏌熼柇锕€鏋涚紒鎻掓健濮婂宕掑▎鎴濆闂佽鍠栭悥鐓庣暦閹版澘鍗抽柣蹇氼嚙缂嶅﹪骞冨⿰鍫熷癄濠㈣泛鐭堥崬鐢告⒑鐠囨彃鍤辩紓宥呮瀹曚即寮介銈勭瑝闂佸搫琚崕鏌ユ偂濞嗗緷褰掓偂鎼达絾鎲煎┑鐐村毆閸ャ劎鍘靛銈嗘瀹曠數绮i弮鈧幈銊︾節閸涱噮浠╅梺鍛婄墬閻楃姴顕i幘顔藉亜闁告縿鍎辩徊鍨攽閿涘嫬浜奸柛濠冨灴瀹曠銇愰幒鎾存珖濡炪倕绻愰悧鍕焵椤戣法顦﹂柍璇查叄楠炴ê鐣烽崶鑸敌у┑锛勫亼閸婃牜鏁幒妤€纾归柛顭戝櫘閻庤埖銇勯弬璺ㄦ癁闁衡偓娴犲绠抽柟鎯版绾惧綊鏌¢崶鈺佇涢柛瀣尭椤繈顢楅埀顒€危婵犳碍鎳氶柣鎰劋閻撱儵鏌i弴鐐测偓鍦偓姘炬嫹
闂傚倸鍊搁崐宄懊归崶顒夋晪鐟滃繘骞戦姀銈呯疀妞ゆ棁妫勬惔濠囨⒑瑜版帒浜伴柛鐘冲浮瀹曟垿骞橀幇浣瑰兊濡炪倖鍔戦崹鍦矈椤曗偓濮婃椽妫冨☉娆樻闂佺ǹ锕ら…鐑界嵁閹达箑绀嬫い鎺戝€婚幊婵嗩渻閵堝棛澧痪鏉跨Т閳诲秵绻濋崶銊㈡嫽婵炴挻鍩冮崑鎾寸箾娴e啿娲﹂弲顒勭叓閸ャ劎鈽夐柣鎺戠仛閵囧嫰骞掗幋婵愪患闂佽棄鍟伴崰鏍蓟閺囥垹閱囨繝鍨姈鏁堥梻浣呵归鍐礉瀹ュ桅闁告洦鍨伴崘鈧梺闈涒康婵″洤鈻撻妶鍡欑瘈闁冲皝鍋撻柛鏇ㄥ墰椤︿即姊洪崫鍕効缂傚秳绶氶悰顔嘉熼崗鐓庢瀭闂佸憡娲﹂崢褰掑焵椤掆偓閿曨亜顫忓ú顏呭仭闁哄瀵т簺婵$偑鍊栭崹鐢杆囬悽绋课ュù锝呭濞笺劑鏌嶈閸撶喖鐛崘銊㈠牚闁割偅绻傞懓鍨攽椤旂瓔娈旀俊顐n殜瀵偉銇愰幒鎾嫽婵炶揪缍€濡嫰宕ヨぐ鎺撶厱闁绘ǹ灏欒倴濠电偛妫庨崹鑺ヤ繆閼搁潧绶炲┑鐘插閸炵敻姊绘担鑺ョ《闁革綇绠撻獮蹇涙晸閿燂拷