井下儀器總線轉換功能模塊設計
3 DSP程序設計
系統為CAN/DTB轉換模塊分配了1個CAN總線ID,該模塊中DSP程序所執行的功能類似于1個430 kbit/s傳輸速率的井下儀器。DSP程序包括系統的初始化、FPGA內部數據的讀取、CAN接口數據收發等主要功能。與普通井下儀器的差別在于FPGA通過FIFO傳送的數據不是該模塊自身采集的,而是由DTB總線上掛接的100 kbit/s傳輸速率的儀器所采集的。
3.1系統初始化
初始化單元完成DSP初始化、CAN控制器初始化、以及清空FIFO中數據等工作。DSP初始化主要設置相關寄存器來配置系統時鐘的頻率、啟動看門狗、打開相關中斷等工作。CAN控制器初始化包括設置CAN通信的波特率以及同步跳轉寬度、采樣次數和重同步方式;設置郵箱工作方式,啟動郵箱工作并設置郵箱的ID;此外,還要設置CAN控制器的中斷。清空FIFO中的數據,以防止丟失FIFO的半滿中斷信號。
3.2 FPGA中斷服務程序
當FPGA內部的FIFO存儲的數據容量超過一半時,向DSP的硬件管腳產生硬件中斷,DSP進入FPGA的中斷服務程序。
FPGA中斷服務程序用于從FPGA的FIFO中讀取數據,其流程見圖4。設置1個變量N,等于FIFO存儲容量的一半,DSP循環讀取FIFO中的數據,每讀一次將N減1,直到N等于0時,中斷服務程序結束。讀取的數據存放在數據存儲區中,由CAN接口按照一定的幀格式和流程要求發送給USB/CAN轉換模塊。
圖4 FPGA中斷服務程序
3.3 CAM控制器接收中斷服務程序
無論CAN接收到數據,還是發送數據成功,均進入CAN中斷服務程序,程序流程見圖5。在中斷服務程序中,首先通過狀態寄存器,判斷是發送中斷還是接收中斷。如果是發送中斷,表明上一次的發送成功,相應地設置發送成功標志。如果是接收中斷,則需進一步判斷接收到的是遠程幀還是數據幀。如果是數據幀,表明接收的是儀器的控制命令,DSP需要將收到的命令發送到FPGA內的命令寄存器,再由FPGA將命令通過DSIG信號發往井下儀器。如果是遠程幀,表示主控節點請求該節點發送1幀數據,則在程序中,將全局變量nSendNum賦值為要發送的1幀數據的長度,nSendNum的值取決于當前所掛接的儀器種類和儀器數量,由計算機軟件進行配置。
圖5 CAN中斷服務程序
3.4系統主程序
主程序主要是依據全局變量nSendNum、緩沖區數據長度和發送成功標志等狀態信息,決定數據發送的一個循環流程(見圖6)。在初始化完成后
圖6 CAN接收服務程序
主程序處于等待狀態,判斷nSendNum是否為0。如果不為0,則表示已經接收到主控節點請求發送數據的遠程幀,因此進人數據發送流程。接著判斷發送緩沖區中的數據是否有一完整幀的長度(儀器不同,幀長也不同),如果不足則停止發送,否則就將緩沖區的數據填入CAN的發送郵箱,啟動發送流程,并將要發送的數據nSendNum減去8(CAN每次能夠發送8 Byte的數據)。循環進行CAN的發送程序,直到nSendNum等于0,表示一幀數據發送結束,主程序重新回到等待狀態。
4 結束語
經過實驗和應用的驗證,所設計的綜合測試設備與相應的計算機測試程序配合,可同時用于DTB和CAN這2套通訊協議方式的測井系統的測試、維修和生產,已開始在各儀器使用單位推廣。
評論