基于Linux平臺的天氣雷達高速數(shù)據(jù)采集系統(tǒng)設計
2.1.2 設備接口函數(shù)
設備接口函數(shù)為用戶提供與設備進行交互的不同功能接口,主要完成用戶與設備的讀、寫及設備控制訪問等功能,其數(shù)據(jù)結構設計為:
static const struct file_operations plx9054_fops = {
.owner = THIS_MODULE,
.open = plx9054_open, /*打開設備*/
.release = plx9054_close, /*釋放設備*/
.ioctl = plx9054_ioctl, /*IO操作*/
.read = plx9054_read, /*讀設備*/
};
這個數(shù)據(jù)結構在設備裝載過程中,作為設備注冊的參數(shù)完成與設備掛接、使用戶在系統(tǒng)調用中能訪問到上述關聯(lián)的設備接口函數(shù)。
設備打開函數(shù)plx9054_open完成以下操作:設備私有數(shù)據(jù)結構內存空間分配及初始化,DMA連續(xù)物理內存空間申請,為天氣雷達最大距離探測采集數(shù)據(jù)的大??;調用pci_map_single將分配的DMA內存空間映射為用于DMA傳輸?shù)刂?;DMA數(shù)據(jù)緩沖區(qū)分配(容量為2 MB),緩沖區(qū)保存每次DMA傳輸中獲取的數(shù)據(jù);調用request_irq對中斷函數(shù)p9054_interrupt進行中斷號申請;對天氣雷達工作參數(shù)進行缺省配置,啟動雷達工作。設備釋放函數(shù)PLX9054_close完成的操作與設備打開函數(shù)與PLX9054_open相反。IO操作函數(shù)PLX9054_ioctl通過sys_ioctl系統(tǒng)調用,完成用戶與設備的信息查詢、雷達工作參數(shù)配置與查詢,如驅動軟件版本號、雷達當前工作各參數(shù)配置和查詢,主要用于對FPGA中RAM內存空間的雷達工作參數(shù)數(shù)據(jù)訪問。由于這部分數(shù)據(jù)對訪問速度要求不高,使用IO操作能很好地滿足設計要求。讀設備函數(shù)PLX9054_read將驅動DMA數(shù)據(jù)緩沖區(qū)中的數(shù)據(jù)實時讀取到用戶空間緩沖區(qū)內,完成采集數(shù)據(jù)從設備到用戶的讀取操作。
2.1.3 中斷處理及DMA傳輸
中斷處理及DMA傳輸是驅動的核心部分,它的設計質量直接影響到雷達采集數(shù)據(jù)能否正確、實時地從采集系統(tǒng)板傳送到設備驅動緩沖區(qū),并實時被用戶獲取。中斷處理工作流程如圖2所示。
由于DMA數(shù)據(jù)緩沖區(qū)遠大于每次DMA數(shù)據(jù)傳輸大小,這對于雷達數(shù)據(jù)采集中因用戶讀取數(shù)據(jù)延遲而導致的緩沖區(qū)溢出有較好的抑制作用,而相對于現(xiàn)有計算機平臺,2 MB內存容量已足夠。DMA數(shù)據(jù)緩沖區(qū)設計為循環(huán)緩沖區(qū),使用讀、寫指針維護,在中斷處理中更新其寫指針,在PLX9054_read中更新其讀指針,采用溢出則覆蓋的機制,既方便管理,節(jié)省資源,同時又可對溢出進行計數(shù),很方便進行實時性能的測試。
linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)
評論