论文部分内容阅读
摘要:本文介绍了在Windows2000/xp操作系统下,使用DriverStudio软件编写WDM模式的驱动程序,通过TMS320C6412的PCI接口,在PC机上实现了DSP信号处理程序的加载,启动,复位等功能,完成DSP系统与PC机之间控制与通讯。
关键词:PCI总线; WDM模式; DriverStudio; TMS320C6412; DSP系统
Research on PCI bus technology TMS320C6412
Li Ming-ye,Zhou Jing
(51st Research Institure of CETC,ShangHai 201802)
Abstract:This article describes the use DriverStudio in Windows2000/xp operating system software to write the driver of the WDM model, through the PCI interface of TMS320C6412 DSP signal processing program on a PC to load, start, reset, etc., complete DSP systemcontrol and communications between the PC.
Key words: PCIBus; WDM; DriverStudio; TMS320C6412; DSP System
0 引 言
在雷达领域的信号处理中,最费时间,即影响信号处理实时性的瓶颈是数据处理部分。数字信号处理器(digital signal processor简称DSP)在模拟信号变换成数字信号以后进行高速实时处理的专用处理器,是实现实时数字信号处理的有力工具。在本文描述的工程应用中,把数据处理部分从PC机的软件中分离出来,由PC机通过PCI接口把信号数据信息传输到DSP,交给DSP处理,然后把处理好的结果再传给PC机,这样不仅可以做到信号处理和数据管理并行进行,而且充分利用DSP对数字信号处理高速,并行的优势,提高了信号处理系统的实时性和稳定性。要实现以上功能,首先要解决好DSP信号处理模块与PC机之间的通讯问题。TMS320C6412提供的PCI总线接口以PCI总线特有的较高数据传输能力,通用性强等优势,大大提高了DSP信号处理机的性价比和可维护性,有利于解决信号处理机与主机间数据通讯的I0瓶颈。
在window2000/XP系统下,为实现系统的稳定性和可靠性,只有在内核模式下,通过驱动程序对硬件进行访问。信号处理系统的用户软件要通过TMS320C6412的PCI接口实现与DSP信号处理模块的通讯,就需要编写驱动程序。由于驱动程序涉及的面比较广,加上市面上系统地描述该方面的文章较少,一度公认为是技术难点。本文从应用角度出发,通过实例详尽描述了利用DriverStudio开发工具包,开发TMS320C6412的PCI总线驱动程序的具体实现,完成PC机上的应用程序与DSP信号处理机之间的相互通讯。
1 TMS320C6412芯片简介
TMS320C6412是TI公司目前速度最快的第六代DSP定点系列的产品之一,采用了高性能,先进的VelociTI.2结构的DSP 核,其主频为1.1GHz,使其最大处理能力可达到9000MIPS,专门设计的Master/Slave PCI Interface 硬件外围,极大地方便了DSP与PC机之间的通讯。TMS320C6412的PCI接口支持如下主要特征:
1)符合PCI2.2版本的规范;
2)PCI主/从接口;
3)以33MHz的时钟频率操作,采用32位数据总线,数据传送率可高达132MB/s;
4)通过EMIF,PCI可访问所有片上RAM,外设和外部存储器;
5)支持存储器读(memory read),存储器写(memory write),I/O读,I/O写;
6)在DSP程序控制下的PCI中断请求;
7)通过PCI I/O周期的DSP中断;
8)PCI复位时,多个配置寄存器由来自外部的串行EEPROM初始化;
2 驱动开发工具介绍
Windows2000/xp对驱动程序的编写不再基于以往的Win3x和Win9x下的VxD(虚拟设备驱动程序)结构,而是基于一种新的驱动模型——WDM(Windows Driver Model)。WDM为Windows2000/XP操作系统的设备驱动程序的设计提供了统一的框架。
在WDM驱动模型中,驱动程序是分层的,不同层上的驱动程序有不同的优先级。另外,WDM还引入了功能设备对象FDO(Function Device Object)与物理设备对象PDO(Physical Device Object)两个新类来描述硬件,一个PDO对应一个真实的硬件。一个硬件只允许有一个PDO,却可以拥有多个FDO,在驱动程序中直接操作的不是硬件而是相应的PDO和FDO。WDM不是通过驱动程序名称,而是通过一个128位的全局唯一标识符(GUID)实现驱动程序的识别。在应用程序与WDM驱动程序通信方面,系统为每一个用户请求打包形成一个I/O请求包(IRP)结构,并将其发送到驱动程序,并通过识别IRP中的PDO来区别是发送给哪一个设备的,内核通常通过发送IRP来运行驱动程序的代码。不久的将来,在Windows平台上,WDM将成为主流的驱动模式。
开发WDM驱动程序有两种方法,一种利用微软提供的98DDK和2000DDK驱动程序开发包,另外一种是专用驱动程序开发工具,如这里选用的DriverStudio工具包. 相比之下,利用DriverStudio工具开发设备驱动程序结构清晰,效率高,比微软提供的DDK工具简单,方便,开发周期短。DriverStudio提供工具组件在对设备驱动程序的开发、除错、测试、调整和部署,改善测试性能和程序的可靠性等方面,给用户提供了极大的便利。 3 应用实例分析
下面通过具体实例分析从主机端加载DSP信号处理程序,到启动和复位DSP应用系统,完成DSP与主机之间控制与通讯等功能的实现,并列出从驱动程序中摘录出具体的源程序代码,详尽描述了驱动程序在window2000/XP操作系统下的具体实现步骤和方法。驱动程序的总体功能框图如下:
3. 1 通过PCI接口加载DSP信号处理程序
在进行加载程序前,首先要形成DSP信号处理程序的COFF文件即*.out文件。如果当加载文件的起始位置加上COFF文件长度超过DSP映射空间的4MB的页边界时,特别要注意跨页的处理。源程序代码如下:
//dwBytes表示加载out文件的总字节数;
//DSP_PAGE_MASK表示DSP中的一页的字节数;
//dwDspAddr表示加载文件的起始位置;
//判断加载时是否要进行跨页处理之前,首先计算加载时第二页的字节数
int dwSecondBytes =((dwDspAddr & DSP_PAGE_MASK)+dwBytes)
- (DSP_PAGE_MASK + 1);
ULONG dwFirstBytes = dwBytes - dwSecondBytes; //加载第一页的字节数;
if ( dwSecondBytes > 0) // 第二页的字节数>0,则进行跨页处理;
{
ULONG f_addr=dwDspAddr >> DSP_PAGE_BIT_LEN;
m_IoPortRange0.outd(8,f_addr);
m_MemoryRange0.outd(f_addr,pBuf,dwFirstBytes/4);
ULONG s_addr=(dwDspAddr >> DSP_PAGE_BIT_LEN) + 1;
m_IoPortRange0.outd(8,s_addr);
PULONG s_pBuf=(PULONG)((ULONG)pBuf+dwFirstBytes);
m_MemoryRange0.outd(0,s_pBuf,dwSecondBytes/4);
}
else//加载COFF文件不涉及跨页;
{
ULONG f_addr=dwDspAddr >> DSP_PAGE_BIT_LEN;
m_IoPortRange0.outd(8,f_addr);
m_MemoryRange0.ind(f_addr,pBuf,dwBytes/4);
}
3.2 启动和复位DSP系统
启动和复位DSP应用系统时,需要对HDCR(Host to DSP Control Register)寄存器进行操作。
HDCR寄存器的定义如下:
首先确保硬件上的Bootmode为主机引导模式,在驱动程序中通过HDCR寄存器的WARMRESET位,主机可以复位DSP系统中所有内部的器件和外设逻辑。同样,通过HDCR寄存器的DSPINT位,主机向DSP产生中断,使DSP系统从复位状态释放出来后,从程序起始地址开始执行,完成了DSP启动的过程。源程序代码如下:
//复位DSP
NTSTATUS C6412_drvDevice::C6412_DRV_IOCTL_RESETDSP_Handler(KIrp I)
{
m_IoPortRange0.outd(HDCR,0x1);//HDCR寄存器中的WARMRESET位置1;
return status;//返回状态码
}
//启动DSP
NTSTATUS C6412_drvDevice::C6412_DRV_IOCTL_ BOOTDSP_Handler(KIrp I)
{
m_IoPortRange0.outd(HDCR,0x2);// HDCR寄存器中的DSPINT位置1;
return status;//返回状态码
}
3.3 利用中断方式实现DSP和主机之间的通讯
主机向DSP系统产生中断是通过HDCR寄存器的DSPINT位,如果在PCIIEN(PCI Interrupt Enable Register)寄存器使能了HOSTSW中断,则该中断也会在PCIIS(PCI Interrupt Source Register)的HOSTSW中断位体现出来。
HSR寄存器定义如下:
在驱动程序的实际编程中,由于中断服务例程在DIRQL级别上运行,所以处理的时间尽可能地短,通常在中断服务例程中,只是判断该中断是否是本设备产生的,如不是本设备产生的中断服务例程立即返回,否则,其他的大部分的中断处理工作要调用一个在DISPATCH_LEVEL级别上运行的延迟过程中完成。当一个中断例程完成后,处理器一旦获得DISPATCH_LEVEL级别上的控制权,内核就调用该延迟过程。源程序代码如下:
//中断服务例程
BOOLEAN C6412_drvDevice::Isr_Irq(void)
{
ULONG value=m_IoRange0.ind(HSR);
if((value&0x1)==0x1)//判断是否本设备产生的中断
{ m_MemoryRange1.outd(RSTSRC,0x10); //清除中断,以便再次响应中断;
if (!m_DpcFor_Irq.Request(NULL, NULL)) //调用延迟过程;
{
//根据实际硬件置标志或其他的操作;
}
}
else//不是本设备产生的中断,立即返回;
return false;
}
//延迟过程函数
VOID C6412_drvDevice::DpcFor_Irq(PVOID Arg1, PVOID Arg2)
{
//这里用事件的方式通知主机DSP中断的发生,事件句柄事先从主机端传到DSP; m_pEvent->Set();//置事件;
}
4 结 语
通过以上的驱动程序,PC机上的应用程序通过PCI总线下载信号处理程序到DSP,同时监控信号处理过程,并将DSP处理结果通过PCI总线传给PC机,利用windows2000/XP操作系统友好的图形化界面,用户可以对DSP处理结果进行存储,显示,事后分析,从而组建起完整的通用雷达信号处理平台。而且在调试和使用过程中,可以灵活方便地下载不同的DSP应用程序,克服了以往为了加载不同的DSP应用程序,需要不断反复烧写ROM等烦琐过程。另外考虑到驱动程序具有通用性,通常根据不同软件的需要对驱动程序进行不同的封装,本驱动就是利用MFC封装成动态连接库(DLL)的形式提供给用户。本文描述的TMS320C6412是TMS320C6X系列中的一款,通过它开发的PCI驱动程序对于开发其他DSP的驱动程序有很好的借鉴性。文章中的所有程序代码均在windows2000/xp的Visual C++ 6.0 环境下编译、调试通过,并已应用于实际工程中。
参考文献
[1] TMS320C6000 Dsp Peripheral Component Interconncet(PCI) Reference Guide [EB/OL].[2007-3].
www.ti.com.cn/cn/lit/ug/spru581c/spru581c.pdf
[2] TMS320C6412 Fixed-Point Digital Signal Processor Data Manual[EB/OL].[2010-10]. www.ti.com.cn/cn/lit/ds/sprs219j/sprs219j.pdf
[3] 武安河,邰铭,于洪涛. Windows2000/XP WDM 设备驱动程序开发[M].北京:电子工业出版社.2005
[4][美] Tom Shanley Don Anderson著,刘晖,冀然然,夏意军译.PCI系统结构[M].北京:电子工出版.2001
作者简介:
黎明也:男,1992年毕业于电子科技大学,学士学位,现任职上海微波设备研究所(中国电子科技集团公司第51研究所),高级工程师,长期从事系统设计及硬件开发工作。
周静:女,1996年毕业于西安公路交通大学,学士学位,现任职上海微波设备研究所(中国电子科技集团公司第51研究所),高级工程师,长期从事设备驱动程序设计,嵌入式软件开发等工作。
关键词:PCI总线; WDM模式; DriverStudio; TMS320C6412; DSP系统
Research on PCI bus technology TMS320C6412
Li Ming-ye,Zhou Jing
(51st Research Institure of CETC,ShangHai 201802)
Abstract:This article describes the use DriverStudio in Windows2000/xp operating system software to write the driver of the WDM model, through the PCI interface of TMS320C6412 DSP signal processing program on a PC to load, start, reset, etc., complete DSP systemcontrol and communications between the PC.
Key words: PCIBus; WDM; DriverStudio; TMS320C6412; DSP System
0 引 言
在雷达领域的信号处理中,最费时间,即影响信号处理实时性的瓶颈是数据处理部分。数字信号处理器(digital signal processor简称DSP)在模拟信号变换成数字信号以后进行高速实时处理的专用处理器,是实现实时数字信号处理的有力工具。在本文描述的工程应用中,把数据处理部分从PC机的软件中分离出来,由PC机通过PCI接口把信号数据信息传输到DSP,交给DSP处理,然后把处理好的结果再传给PC机,这样不仅可以做到信号处理和数据管理并行进行,而且充分利用DSP对数字信号处理高速,并行的优势,提高了信号处理系统的实时性和稳定性。要实现以上功能,首先要解决好DSP信号处理模块与PC机之间的通讯问题。TMS320C6412提供的PCI总线接口以PCI总线特有的较高数据传输能力,通用性强等优势,大大提高了DSP信号处理机的性价比和可维护性,有利于解决信号处理机与主机间数据通讯的I0瓶颈。
在window2000/XP系统下,为实现系统的稳定性和可靠性,只有在内核模式下,通过驱动程序对硬件进行访问。信号处理系统的用户软件要通过TMS320C6412的PCI接口实现与DSP信号处理模块的通讯,就需要编写驱动程序。由于驱动程序涉及的面比较广,加上市面上系统地描述该方面的文章较少,一度公认为是技术难点。本文从应用角度出发,通过实例详尽描述了利用DriverStudio开发工具包,开发TMS320C6412的PCI总线驱动程序的具体实现,完成PC机上的应用程序与DSP信号处理机之间的相互通讯。
1 TMS320C6412芯片简介
TMS320C6412是TI公司目前速度最快的第六代DSP定点系列的产品之一,采用了高性能,先进的VelociTI.2结构的DSP 核,其主频为1.1GHz,使其最大处理能力可达到9000MIPS,专门设计的Master/Slave PCI Interface 硬件外围,极大地方便了DSP与PC机之间的通讯。TMS320C6412的PCI接口支持如下主要特征:
1)符合PCI2.2版本的规范;
2)PCI主/从接口;
3)以33MHz的时钟频率操作,采用32位数据总线,数据传送率可高达132MB/s;
4)通过EMIF,PCI可访问所有片上RAM,外设和外部存储器;
5)支持存储器读(memory read),存储器写(memory write),I/O读,I/O写;
6)在DSP程序控制下的PCI中断请求;
7)通过PCI I/O周期的DSP中断;
8)PCI复位时,多个配置寄存器由来自外部的串行EEPROM初始化;
2 驱动开发工具介绍
Windows2000/xp对驱动程序的编写不再基于以往的Win3x和Win9x下的VxD(虚拟设备驱动程序)结构,而是基于一种新的驱动模型——WDM(Windows Driver Model)。WDM为Windows2000/XP操作系统的设备驱动程序的设计提供了统一的框架。
在WDM驱动模型中,驱动程序是分层的,不同层上的驱动程序有不同的优先级。另外,WDM还引入了功能设备对象FDO(Function Device Object)与物理设备对象PDO(Physical Device Object)两个新类来描述硬件,一个PDO对应一个真实的硬件。一个硬件只允许有一个PDO,却可以拥有多个FDO,在驱动程序中直接操作的不是硬件而是相应的PDO和FDO。WDM不是通过驱动程序名称,而是通过一个128位的全局唯一标识符(GUID)实现驱动程序的识别。在应用程序与WDM驱动程序通信方面,系统为每一个用户请求打包形成一个I/O请求包(IRP)结构,并将其发送到驱动程序,并通过识别IRP中的PDO来区别是发送给哪一个设备的,内核通常通过发送IRP来运行驱动程序的代码。不久的将来,在Windows平台上,WDM将成为主流的驱动模式。
开发WDM驱动程序有两种方法,一种利用微软提供的98DDK和2000DDK驱动程序开发包,另外一种是专用驱动程序开发工具,如这里选用的DriverStudio工具包. 相比之下,利用DriverStudio工具开发设备驱动程序结构清晰,效率高,比微软提供的DDK工具简单,方便,开发周期短。DriverStudio提供工具组件在对设备驱动程序的开发、除错、测试、调整和部署,改善测试性能和程序的可靠性等方面,给用户提供了极大的便利。 3 应用实例分析
下面通过具体实例分析从主机端加载DSP信号处理程序,到启动和复位DSP应用系统,完成DSP与主机之间控制与通讯等功能的实现,并列出从驱动程序中摘录出具体的源程序代码,详尽描述了驱动程序在window2000/XP操作系统下的具体实现步骤和方法。驱动程序的总体功能框图如下:
3. 1 通过PCI接口加载DSP信号处理程序
在进行加载程序前,首先要形成DSP信号处理程序的COFF文件即*.out文件。如果当加载文件的起始位置加上COFF文件长度超过DSP映射空间的4MB的页边界时,特别要注意跨页的处理。源程序代码如下:
//dwBytes表示加载out文件的总字节数;
//DSP_PAGE_MASK表示DSP中的一页的字节数;
//dwDspAddr表示加载文件的起始位置;
//判断加载时是否要进行跨页处理之前,首先计算加载时第二页的字节数
int dwSecondBytes =((dwDspAddr & DSP_PAGE_MASK)+dwBytes)
- (DSP_PAGE_MASK + 1);
ULONG dwFirstBytes = dwBytes - dwSecondBytes; //加载第一页的字节数;
if ( dwSecondBytes > 0) // 第二页的字节数>0,则进行跨页处理;
{
ULONG f_addr=dwDspAddr >> DSP_PAGE_BIT_LEN;
m_IoPortRange0.outd(8,f_addr);
m_MemoryRange0.outd(f_addr,pBuf,dwFirstBytes/4);
ULONG s_addr=(dwDspAddr >> DSP_PAGE_BIT_LEN) + 1;
m_IoPortRange0.outd(8,s_addr);
PULONG s_pBuf=(PULONG)((ULONG)pBuf+dwFirstBytes);
m_MemoryRange0.outd(0,s_pBuf,dwSecondBytes/4);
}
else//加载COFF文件不涉及跨页;
{
ULONG f_addr=dwDspAddr >> DSP_PAGE_BIT_LEN;
m_IoPortRange0.outd(8,f_addr);
m_MemoryRange0.ind(f_addr,pBuf,dwBytes/4);
}
3.2 启动和复位DSP系统
启动和复位DSP应用系统时,需要对HDCR(Host to DSP Control Register)寄存器进行操作。
HDCR寄存器的定义如下:
首先确保硬件上的Bootmode为主机引导模式,在驱动程序中通过HDCR寄存器的WARMRESET位,主机可以复位DSP系统中所有内部的器件和外设逻辑。同样,通过HDCR寄存器的DSPINT位,主机向DSP产生中断,使DSP系统从复位状态释放出来后,从程序起始地址开始执行,完成了DSP启动的过程。源程序代码如下:
//复位DSP
NTSTATUS C6412_drvDevice::C6412_DRV_IOCTL_RESETDSP_Handler(KIrp I)
{
m_IoPortRange0.outd(HDCR,0x1);//HDCR寄存器中的WARMRESET位置1;
return status;//返回状态码
}
//启动DSP
NTSTATUS C6412_drvDevice::C6412_DRV_IOCTL_ BOOTDSP_Handler(KIrp I)
{
m_IoPortRange0.outd(HDCR,0x2);// HDCR寄存器中的DSPINT位置1;
return status;//返回状态码
}
3.3 利用中断方式实现DSP和主机之间的通讯
主机向DSP系统产生中断是通过HDCR寄存器的DSPINT位,如果在PCIIEN(PCI Interrupt Enable Register)寄存器使能了HOSTSW中断,则该中断也会在PCIIS(PCI Interrupt Source Register)的HOSTSW中断位体现出来。
HSR寄存器定义如下:
在驱动程序的实际编程中,由于中断服务例程在DIRQL级别上运行,所以处理的时间尽可能地短,通常在中断服务例程中,只是判断该中断是否是本设备产生的,如不是本设备产生的中断服务例程立即返回,否则,其他的大部分的中断处理工作要调用一个在DISPATCH_LEVEL级别上运行的延迟过程中完成。当一个中断例程完成后,处理器一旦获得DISPATCH_LEVEL级别上的控制权,内核就调用该延迟过程。源程序代码如下:
//中断服务例程
BOOLEAN C6412_drvDevice::Isr_Irq(void)
{
ULONG value=m_IoRange0.ind(HSR);
if((value&0x1)==0x1)//判断是否本设备产生的中断
{ m_MemoryRange1.outd(RSTSRC,0x10); //清除中断,以便再次响应中断;
if (!m_DpcFor_Irq.Request(NULL, NULL)) //调用延迟过程;
{
//根据实际硬件置标志或其他的操作;
}
}
else//不是本设备产生的中断,立即返回;
return false;
}
//延迟过程函数
VOID C6412_drvDevice::DpcFor_Irq(PVOID Arg1, PVOID Arg2)
{
//这里用事件的方式通知主机DSP中断的发生,事件句柄事先从主机端传到DSP; m_pEvent->Set();//置事件;
}
4 结 语
通过以上的驱动程序,PC机上的应用程序通过PCI总线下载信号处理程序到DSP,同时监控信号处理过程,并将DSP处理结果通过PCI总线传给PC机,利用windows2000/XP操作系统友好的图形化界面,用户可以对DSP处理结果进行存储,显示,事后分析,从而组建起完整的通用雷达信号处理平台。而且在调试和使用过程中,可以灵活方便地下载不同的DSP应用程序,克服了以往为了加载不同的DSP应用程序,需要不断反复烧写ROM等烦琐过程。另外考虑到驱动程序具有通用性,通常根据不同软件的需要对驱动程序进行不同的封装,本驱动就是利用MFC封装成动态连接库(DLL)的形式提供给用户。本文描述的TMS320C6412是TMS320C6X系列中的一款,通过它开发的PCI驱动程序对于开发其他DSP的驱动程序有很好的借鉴性。文章中的所有程序代码均在windows2000/xp的Visual C++ 6.0 环境下编译、调试通过,并已应用于实际工程中。
参考文献
[1] TMS320C6000 Dsp Peripheral Component Interconncet(PCI) Reference Guide [EB/OL].[2007-3].
www.ti.com.cn/cn/lit/ug/spru581c/spru581c.pdf
[2] TMS320C6412 Fixed-Point Digital Signal Processor Data Manual[EB/OL].[2010-10]. www.ti.com.cn/cn/lit/ds/sprs219j/sprs219j.pdf
[3] 武安河,邰铭,于洪涛. Windows2000/XP WDM 设备驱动程序开发[M].北京:电子工业出版社.2005
[4][美] Tom Shanley Don Anderson著,刘晖,冀然然,夏意军译.PCI系统结构[M].北京:电子工出版.2001
作者简介:
黎明也:男,1992年毕业于电子科技大学,学士学位,现任职上海微波设备研究所(中国电子科技集团公司第51研究所),高级工程师,长期从事系统设计及硬件开发工作。
周静:女,1996年毕业于西安公路交通大学,学士学位,现任职上海微波设备研究所(中国电子科技集团公司第51研究所),高级工程师,长期从事设备驱动程序设计,嵌入式软件开发等工作。