基于USB接口的激光陀螺慣導系統(tǒng)數(shù)據(jù)通訊
1.2 CY7C68013A的固件程序設計
CY7C68013A的固件程序主要用于USB芯片的端點配置、頻率設置、數(shù)據(jù)寬度、可編程標志定義、中斷定義及特定功能的8051程序編寫等。固件程序主要完成如圖2所示的任務流程。本文引用地址:http://cafeforensic.com/article/162228.htm
在上述固件程序當中,CY7C68013A的初始化子程序TD_Init()的開發(fā)按照以下步驟進行:按圖3中的規(guī)則配置端點;使CY7C68013A工作在SLAVE FIFO模式,選擇BULK傳輸,使用3個端點EP2、EP4和EP6,全部采用雙緩沖方式;3個端點FIFO標志分別定義為:FLGA為EP2的4字節(jié)接收可編程標志,F(xiàn)IGB為EP6的滿標志,F(xiàn)LGC為EP2的空標志;數(shù)據(jù)寬度設為16位。
1.3 丟幀問題及解決措施
在導航計算機與PC機間通過USB接口進行了雙向高速通訊測試。測試方法如下:PC機向導航計算機傳輸一個數(shù)據(jù)包,導航計算機接收后回傳,PC機接收后進行正確性校驗、傳輸、回傳和校驗過程循環(huán)進行。測試中發(fā)現(xiàn)偶爾有丟幀現(xiàn)象出現(xiàn)。嘗試改變上位機中數(shù)據(jù)采集與后臺實時寫內存線程的優(yōu)先級和改變CY7C68013A的端點大小及緩沖級別(如三緩沖、四緩沖)來解決這個問題,但是丟幀現(xiàn)象依然存在。
經(jīng)過較長時間的分析與驗證,找到了問題所在:PC機中運行的Windows操作系統(tǒng)是一個多任務的操作系統(tǒng),同時運行著多個進程,系統(tǒng)在給每個進程分配時間片時也是有一定的優(yōu)先級的,優(yōu)先級高的進程占用時間片較多,如果PC機在執(zhí)行某些其他進程時占用時間超過了一定的限度,就可能導致該讀出的數(shù)據(jù)沒有及時讀出,而下一幀數(shù)據(jù)又已送到緩沖區(qū),覆蓋前一幀數(shù)據(jù),從而造成丟幀。
解決丟幀的辦法是在DSP的內存中設置一個圓形緩沖區(qū),如果發(fā)現(xiàn)IN型端點的FIFO已滿(說明PC機未及時讀走FIFO中數(shù)據(jù)),則將本幀數(shù)據(jù)存入圓形緩沖區(qū)里,直到FIFO完全為空。
圓形緩沖區(qū)的結構如圖4所示。
在圖4中,sptr為寫入數(shù)據(jù)指針,dptr為發(fā)送數(shù)據(jù)指針。整個圓形緩沖區(qū)的大小設置為256 K字(32位)。若按8 K的數(shù)據(jù)存入速率,可以保存8 s數(shù)據(jù)。在PC機不能及時讀取IN端點FIFO數(shù)據(jù)的情況下,這個圓形緩沖區(qū)可以起到很好的緩沖作用。
評論