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