<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>
關(guān) 閉

新聞中心

EEPW首頁(yè) > 工控自動(dòng)化 > 設計應用 > 基于USB的無(wú)線(xiàn)觸摸鼠標板的設計

基于USB的無(wú)線(xiàn)觸摸鼠標板的設計

作者: 時(shí)間:2012-08-27 來(lái)源:網(wǎng)絡(luò ) 收藏

圖4軟件總體框架圖

3.2手持端軟件的設計與實(shí)現

在本部分將介紹手持終端的軟件設計過(guò)程,以及各個(gè)模塊部分的具體實(shí)現。軟件的運行流程圖如圖5所示。

圖5手持端軟件流程

對于事件發(fā)生的獲取是采用中斷模式,也就是在有鼠標觸摸板事件發(fā)生的時(shí)候,將喚醒MCU進(jìn)行數據的采集處理,然后將采集到的PS/2數據進(jìn)行一定規則的轉換,然后將其打包發(fā)送。若沒(méi)有數據需要處理,則進(jìn)入睡眠狀態(tài)以節省功耗。

3.2.1芯片初始化

在芯片初始化階段,主要是芯片的內部工作的時(shí)鐘的設置、IO口的初始化設置、以及CC2420的初始化。

在芯片的初始化階段需要注意對每個(gè)IO口的數據方向進(jìn)行設置,并且要準確設置時(shí)鐘以及串口的傳輸數率,否則在調試階段無(wú)法獲取數據。不用的IO口全部設置成輸出端口,這樣可減少端口不必要的干擾。

3.2.2鼠標觸摸板事件的信息采集

首先要對觸摸板進(jìn)行初始化,其初始化序列請參照PS/2協(xié)議的命令序列。初始化成功后,該觸摸板將正常工作,只要有觸摸事件發(fā)生,將產(chǎn)生連續三幀的數據發(fā)送,而按鍵事件發(fā)生,則在按下產(chǎn)生三幀數據發(fā)送,彈起產(chǎn)生三幀數據發(fā)送。我們需要做的工作就是在觸摸板發(fā)送數據的時(shí)候對其進(jìn)行采集。采集過(guò)程也非常簡(jiǎn)單,在熟悉PS/2協(xié)議的基礎上,中斷產(chǎn)生后,按照時(shí)序對數據進(jìn)行采集,一定要在讀完一幀的基礎上再讀下一幀,讀取完三幀數據后就馬上進(jìn)行數據轉換和打包發(fā)送,然后再次等待中斷事件發(fā)生。所選擇的MCU在速度處理上完全可以滿(mǎn)足一般鍵盤(pán)鼠標數據包發(fā)送的間隔時(shí)間,也就是說(shuō)在讀取完一個(gè)數據包后,就處理該數據包而不需要完全讀取完一次事件產(chǎn)生的數據堆。

3.2.3 CC2420數據發(fā)送

在CC2420的數據發(fā)送階段,MCU將數據發(fā)送命令傳送給CC2420之后,可以通過(guò)SFD引腳來(lái)判斷其發(fā)送過(guò)程。該引腳會(huì )有一個(gè)由低電平向高電平跳變的過(guò)程,其過(guò)程如圖6所示。

圖6發(fā)送過(guò)程示意圖

控制器向CC2420發(fā)送了發(fā)送數據的命令之后,并不能馬上把數據發(fā)送出去,而是要經(jīng)過(guò)12個(gè)時(shí)鐘周期之后發(fā)送器才啟動(dòng),之后將數據添加了其實(shí)序列和幀頭之后,才能開(kāi)始數據發(fā)送進(jìn)程。在數據發(fā)送完畢之前,SFD引腳將一直為高電平,這樣在MCU就可以根據此引腳的變化來(lái)跟蹤發(fā)送過(guò)程,發(fā)送過(guò)程具體的軟件實(shí)現,可用圖7表示。

圖7 CC2420發(fā)送實(shí)現過(guò)程

在CC2420的數據發(fā)送階段,發(fā)射校正和添加起始序列和幀頭可以由硬件自動(dòng)完成,但是幀的長(cháng)度需要在軟件中計算得到再寫(xiě)入幀中,并且需要將數據寫(xiě)入發(fā)送器的發(fā)送緩沖區之后向CC2420發(fā)送發(fā)送啟動(dòng)命令。

3.3接入端軟件的設計與實(shí)現

接入設備部分的軟件設計,主要是分為兩部分:CC2420的接收和數據傳輸。CC2420由于是發(fā)送和接收集成在同一模塊中,所以其初始化可采用發(fā)送端的設計。而在數據傳輸部分,則采用HID的協(xié)議與主機進(jìn)行通信,這樣在軟件設計上可以減少復雜度。

3.3.1無(wú)線(xiàn)數據接收

無(wú)線(xiàn)數據接收的軟件實(shí)現,使用RB5端口的電平中斷觸發(fā)接收進(jìn)程。當CC2420發(fā)現有幀傳輸過(guò)來(lái)時(shí)其引腳會(huì )產(chǎn)生相應的變化,MCU通過(guò)檢測這些引腳的變化可以得知CC2420所在的接收階段與狀態(tài)。在接收過(guò)程中,有3根引腳可以檢測出CC2420的狀態(tài),其數據接收的變化示意圖限于篇幅,在此略去。

當CC2420收到有符合其起始序列的時(shí)候,其自動(dòng)接收幀頭和幀的長(cháng)度,并且SFD、FIFO、FIFOP這3根輸出引腳分別輸出上圖所示電平。當接收到幀的目的地址時(shí)候,CC2420自動(dòng)進(jìn)行地址匹配,若地址匹配成功,則接收進(jìn)程繼續進(jìn)行,如果地址匹配不成功,則馬上停止接收過(guò)程,并把3根輸出引腳都置為低電平。MCU在控制時(shí)可以通過(guò)檢測這3根輸出引腳的電平來(lái)判斷接收過(guò)程的狀態(tài)。

如果地址匹配成功且接收完整個(gè)幀,則可以啟動(dòng)數據讀取進(jìn)程。

在數據讀取階段,CC2420提供了幀的正確接收的初始判斷,由此可以知道該幀是否被正確接收,以決定是讀取該幀還是放棄該幀。按照CC2420的規定,當一個(gè)幀接收完畢之后,如果出現FIFOP=l并且FIFO=0的情況,則說(shuō)明該幀錯誤接收,應當向其連續寫(xiě)人兩個(gè)CC2420_SFLUSHRX命令將數據沖刷。如果沒(méi)有出現這種情況,則按照幀發(fā)送的相反過(guò)程從接收緩沖中讀取數據。

3.3.2 設備HID類(lèi)設計與實(shí)現

USB數據傳輸的軟件設計,主要是集中在USB芯片的初始化以及協(xié)議的初始化、以及之后的枚舉過(guò)程,在成功枚舉并被主機正確識別之后,只需將數據寫(xiě)入發(fā)送緩沖即可將數據發(fā)送到主機。在協(xié)議的初始化時(shí),需要將協(xié)議中規定的各個(gè)參數設定都按照設計的要求設定,并且將各種描述符,包括配置描述符、端點(diǎn)描述符、接口描述符、報告描述符等初始完畢,以供枚舉過(guò)程使用。

USB芯片的初始化過(guò)程的最后一步是將其SoftConnect功能打開(kāi),從這時(shí)起,主機才能開(kāi)始檢測到設備的接入,也從這個(gè)時(shí)候起,USB芯片才真正開(kāi)始與主機通信并開(kāi)始設備枚舉過(guò)程。在枚舉過(guò)程中,主機首先向設備發(fā)送啟動(dòng)信號,設備在接收到這個(gè)信號之后向主機發(fā)送回送的協(xié)議數據以供主機識別,當識別到這個(gè)信號之后,主機則開(kāi)始向設備獲取描述符等信息,進(jìn)而完成設備枚舉過(guò)程。

初始化完成之后,主循環(huán)實(shí)際上不再參與USB通信。每次PDIUSBDl2接口芯片檢測到USB總線(xiàn)上主機發(fā)給這個(gè)設備的信號時(shí)候就觸發(fā)一次單片機的外部中斷。中斷處理子程序要做的工作就是首先D12讀取中斷信息,查看D12收到了什么樣的封包,然后根據主機的不同要求做出響應,中斷處理程序流程如圖8所示。

%%%%%%%%%%7

圖8中斷處理程序流程

本系統設備中,固件程序只須處理端點(diǎn)0的輸出和輸入要求就可以完成設備的正常配置和基本工作。

在圖8中,SOF包處理程序是自定義的部分,是為了更好地配合設備工作而添加的代碼,與設備的實(shí)質(zhì)沒(méi)有太大關(guān)系,而結束狀態(tài)改變引起的中斷在這里不需要做處理。由于USB的數據傳輸都是由D12自動(dòng)完成,端點(diǎn)1和2的輸出/輸入中斷處理就沒(méi)有什么實(shí)質(zhì)內容。



評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>