張紅敏 李鑫 陳亮
摘 要:為解決導航信號模擬源在分時系統(tǒng)下的實時性差、數(shù)據(jù)傳輸?shù)臅r效性等問題,基于TMS320C6416的PCI接口控制模塊,研究了實時操作系統(tǒng)VxWorks下PCI總線設備驅動程序的開發(fā)方法。依據(jù)導航信號模擬源的結構和組成設計,通過動態(tài)加載的方式掃描和配置PCI總線設備,使得模擬源中的硬件設備可以根據(jù)需要裁剪,并很好的完成了多PCI總線設備的初始化和配置,同時為保證數(shù)據(jù)傳輸時效性,保證模擬源的穩(wěn)定性,實現(xiàn)了DSP主模式下的DMA數(shù)據(jù)傳輸。
關鍵詞:VxWorks PCI總線 驅動程序 TMS320C6416
中圖分類號:TP31 文獻標識碼:A 文章編號:1674-098X(2015)07(b)-0044-03
Abstract:Navigation signal generator based on time-sharing opeating system has certain disadvantage, such poor real-time character and low speed of data transferring. To solve these problems, the research of developing driver for device of PCI bus is implemented. According to the design of generator, the driver uses the method of dynamic loading and searching of PCI bus device, and implements the initializing and configuring of multiple-PCI device and DMA data transferring base on the DSP maser Mode.
Key words:VxWorks;PCI Bus;Driver;TMS320C6416
導航信號模擬源模擬真實的衛(wèi)星信號在空間傳播,最后到達導航終端的無線信號。用于信號產生的所有信號參數(shù)和數(shù)據(jù)都來源于算法模型計算出來的,所以,信號模擬源在工作時,存在大量的數(shù)據(jù)傳輸,同時必須按照嚴格的時序進行。在采用Windows操作系統(tǒng)來完成任務的分配和調度時,由于操作系統(tǒng)自身占有過多系統(tǒng)資源以及無法快速響應中斷,致使設備在大數(shù)據(jù)量的情況下,出現(xiàn)工作狀態(tài)不穩(wěn)定的情況。VxWoks是高實時性的嵌入式系統(tǒng),能夠很好的滿足信號模擬源對實時性和數(shù)據(jù)傳輸?shù)囊?,同時基于TMS320C6416的PCI控制接口使用PCI總線來實現(xiàn)數(shù)據(jù)的傳輸。
1 VxWorks和PCI總線接口
1.1 VxWorks
VxWoks作為高性能嵌入式實時操作系統(tǒng)(RTOS),具有良好的可靠性、可裁剪性、互操作性和實時性。其主要組成包括以下幾個部分:高性能的內核Wind、板級支持包(BSP)、文件系統(tǒng)、I/O系統(tǒng)、網絡工具及目標代理和實例庫。
BSP向VxWorks提供與硬件交互的基本接口,負責在加電時完成硬件的初始化,為VxWorks訪問硬件驅動程序提供支持,并在VxWorks中集成了與硬件相關的軟件和部分與硬件無關的軟件,因此,BSP與設備驅動程序密切相關。
VxWorks設備驅動程序是提供給系統(tǒng)直接控制下層硬件設備的一個軟件接口,應用程序必須通過驅動程序才能對硬件進行操作。BSP、設備驅動程序與VxWorks系統(tǒng)的關系如圖1所示。
1.2 PCI接口控制模塊結構
每個PCI設備有三種物理空間:配置空間、存儲器空間和IO空間。配置空間是一容量為256B并具有特定記錄結構或模型的地址空間。
當計算機加電時,配置軟件(一般為BIOS)掃描PCI總線,并取得設備的配置空間,以進行系統(tǒng)配置。為實現(xiàn)PCI設備的正常加載和操作,PCI設備必須實現(xiàn)PCI協(xié)議規(guī)定的配置空間內容,如表1所示。
2 導航信號模擬源組成
導航信號模擬源需要提供很多頻點的信號,一塊基帶板卡最多提供四個頻點,故需要多個基帶板卡來組成信號的生成部分,通過PCI總線將所有的基帶板卡以設備的形式掛接在零槽監(jiān)控板卡上,由監(jiān)控軟件來統(tǒng)一控制和管理基帶板卡,導航信號模擬源組成圖如圖2所示。
基帶板卡上的數(shù)據(jù)處理器使用TMS320C6416來完成。TMS320C6416是TI公司的低功耗定點處理器,在片內集成了支持主/從模式的PCI接口,通過該PCI總線能夠實現(xiàn)DSP與PCI主機的互聯(lián),并且通過PCI接口,主機可以訪問DSP整個片內RAM、集成外設以及片外存儲器。
基于DSP的PCI總線DMA數(shù)據(jù)傳輸主要有兩種模式:一種是主模式傳輸,使用PCi卡上DSP的DMA控制器;一種是從模式傳輸使用PCI主機主板的DMA控制器。由于主板DMA控制器的DMA通道數(shù)目有限,并且主板DMA控制器從外設讀取數(shù)據(jù)需要兩次地理的操作,并且還需要插入等待狀態(tài),所以,從模式的DMA傳輸要求一定的中斷延遲時間,并且當DMA控制器到達緩沖區(qū)的末端時,需要快捷的對他重新編程使用另外一個緩沖區(qū)。
針對設計需求,系統(tǒng)采用DSP主模式,并將C6416內部RAM的一部分作為數(shù)據(jù)傳輸空間,從而滿足PCI總線的高速數(shù)據(jù)傳輸。
3 PCI設備驅動設計與實現(xiàn)
PCI設備驅動基于VxWorks系統(tǒng)開發(fā),包括用戶應用程序和PCI驅動程序,工作在同一地址空間。VxWorks是一種微內核結構,采用單一的實地址空間模式,不區(qū)分核心態(tài)和用戶態(tài),任務間可以直接共享變量,不需要通過內核在不同的地址空間復制數(shù)據(jù)。用戶程序通過對設備文件進行文件操作,實現(xiàn)與驅動程序的通信。
PCI設備驅動程序實現(xiàn)的關鍵是如何完成硬件操作,包括設備初始化、端口的讀寫操作、中斷設置和中斷服務程序以及對內存的直接讀寫。PCI設備驅動程序一般包括三個模塊:初始化模塊、中斷處理模塊及功能模塊。
3.1 多PCI設備的加載
單個PCI設備時,只需要簡單的考慮單個設備的地址映射以及中斷使用,而在多個PCI設備驅動設計時則需要考慮不同設備在地址映射以及中斷復用時是否會出現(xiàn)沖突,從而出現(xiàn)地址錯亂、中斷混亂等異常情況,以至于系統(tǒng)的崩潰。所以多PCI設備的初始加載中的地址映射以及中斷復用問題必須很好的解決。
由于VxWorks中只包含了基本MMU(Memory Management Unit 內存管理單元),所以不會對PCI設備進行自動加載,需要用戶加載和配置設備。用戶可以通過靜態(tài)指定和動態(tài)查找兩種方法來配置PCI設備所占用的內存映射空間,把PCI總線上的物理資源映射成CPU的本地資源。PCI設備在VxWorks下加載步驟如下:
通過調用pciFindDevice來實現(xiàn)PCI總線設備的動態(tài)查找。
本信號模擬源中使用的PCI設備數(shù)目是不確定的,需要在系統(tǒng)啟動時才可以確認。硬件設計時使用了DSP中的PCI接口控制器,廠商ID為0x104C,設備ID為0xA106,具體實現(xiàn)代碼如下:
#define PCI6416_VID 0x104C
#define PCI6416_DID 0xA106
if(pciFindDevice(PCI6416_VID,PCI6416_DID,ix,&pciBus,&pciDevice,&pciFunc)!=OK) {……}
取得PCI設備的配置數(shù)據(jù)。取出各板卡基地址寄存器,每塊板卡最多有6個基地址寄存器。使用函數(shù)如下:
pciConfigInLong(pciBus,pciDevice,pciFunc,PCI_CFG_BASS_ADDRESS_0,&(MemBaseAddr[ix][0]));
配置PCI的命令字使能I/O空間、存儲器空間和總線主設備功能,并鏈接中斷服務程序。
將PCI設備的存儲器空間映射到MMU單元的內存映射表中。
PHYS_MEM_DESC sysPhysMemDesc[] =
{……
{
(void *)CPU_PCI_MEM_ADRS_L, //需要映射的虛擬邏輯地址
(void *)CPU_PCI_MEM_ADRS_P, //硬件板卡上的實際物理地址
0x2000, //內存區(qū)的大小
VM_STATE_MASK_VALID|VM_STATE_MASK_WRITEABLE
|VM_STATE_MASK_CACHEABLE, //內存管理使能掩碼
VM_STATE_VALID|VM_STATE_WRITEABLE,//內存管理狀態(tài)值
}
……
}
根據(jù)配置寄存器初始化設備。
對C6416設備的存儲器空間讀寫。
編寫中斷服務程序。
3.2 DMA方式的數(shù)據(jù)傳輸
在主模式下,數(shù)據(jù)傳輸時使用的相關寄存器包括DSP主地址寄存器(DSPMA)、PCI主地址寄存器(PCIMA)以及PCI主模式控制寄存器(PCIMC)。PCI接口控制模塊主模式結構圖如圖3所示。
從DSP向PCI從設備傳輸時,DSP將PCIMC寄存器中的START字段置為有效,,PCI接口模塊啟動主模式寫操作,由C6416的EDMA負責從源地址向寫FIFO搬移所要求的數(shù)據(jù),一旦FIFO得到有效的數(shù)據(jù),接口控制模塊會向外發(fā)出PCI總線請求,并將FIFO中數(shù)據(jù)向PCI從設備傳輸。當需要傳輸?shù)乃袛?shù)據(jù)都送入FIFO后,DSP內部的數(shù)據(jù)傳輸結束,通過使能PCIIEN寄存器中的MASTEROK位產生DSPINT中斷,通知DSP一次主模式的傳輸結束。主模式數(shù)據(jù)傳輸流程如圖4所示。
在數(shù)據(jù)傳輸過程中,數(shù)據(jù)傳輸?shù)膯雍徒Y束都通過中斷的方式通知DSP或者PCI從設備。在中斷發(fā)生時,DSP-C6416首先讀取PCI中斷源寄存器(PCIIS),判斷中斷源,并清除相應bit位。當前中斷為HOSTSW時,如果上次傳輸結束,DSP將重新啟動PCI總線的數(shù)據(jù)傳輸;MSTEROK中斷則用來標志一次傳輸?shù)慕Y束,此時C6416向RSTSRC寄存器中的INTREQ位寫1,對應的INTA管腳上產生中斷信號,通知PCI主機數(shù)據(jù)可用。
4 結語
該文使用WorkBench3.0開發(fā)環(huán)境,開發(fā)了實時操作系統(tǒng)VxWorks下的PCI設備驅動程序,可以支持多塊同類PCI設備的動態(tài)加載,同時采用有效的數(shù)據(jù)傳輸方式,保證了模擬源對數(shù)據(jù)的實時性要求。在實際使用中,導航模擬器的工作頻度為20ms,其最大可模擬信號通道數(shù)為36路。在模擬器全負載的情況下,仍可以很好的在有效時間內完成信號參數(shù)和信息數(shù)據(jù)的傳輸。
參考文獻
[1]TMS320C6000 DSP Peripheral Component Interconnect (PCI) Reference Guide. Texas Instruments Incorporated, 2004.
[2]李方慧,王飛,何佩琨.TMS320c6000系列DSP的原理與應用[M].北京:電子工業(yè)出版社,2003.
[3]周啟平,張揚.VxWorks下設備驅動程序及BSP開發(fā)指南[M].北京:中國電力出版社,2004.
[4]尹勇,李寧.PCI總線設備開發(fā)寶典[M].北京:北京航空航天大學出版社,2005.