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