1.设置DMA模式:
寄存器名:DMAMODE0
寄存器类型:DMA配置寄存器
寄存器地址:PCIBAR0+80h(LCS)
寄存器值:DMAMODE0[1:0]=11:定义DMA总线宽度为32位;
DMAMODE0[9]=0:设置DMA传输模式为BLOCK模式;
DMAMODE0[6]=1:使能READY#输入;
DMAMODE0[11]=0:保持局部端地址为增量模式;
DMAMODE0[8:7]=11:设置DMA支持连续突发传输;
DMAMODE0[10]=1:使能DMA完成中断;
DMAMODE0[11]=1:设置DMA完成中断触发INTA#中断。
2.设置DMA通道优先级:
寄存器名:MARBR
寄存器类型:局部配置寄存器
寄存器地址:PCIBAR0+08h
寄存器值:MARBR[20:19]=01:设置DMA通道0的优先级最高;
3.设置DMA传输参数:
(1)设置PCI-E端起始地址
寄存器名:DMAPADR0
寄存器类型:DMA配置寄存器
寄存器地址:PCIBAR0+84h
寄存器值:DMAPADR0[31:0]=(U32)PciBuffer.PhysicalAddr;
(2)设置局部端起始地址
寄存器名:DMALADR0
寄存器类型:DMA配置寄存器
寄存器地址:PCIBAR0+88h
寄存器值:DMALADR0[31:0]
开始时寄存器值为0x1000000*4,以后每做完一次DMA写操作,该寄存器值递增2048*4;
(3)设置DMA长度
寄存器名:DMASIZ0
寄存器类型:DMA配置寄存器
寄存器地址:PCIBAR0+8Ch
寄存器值:DMASIZ0[22:0]=2048*4;
(4)设置DMA传输方向
寄存器名:DMADPR0
寄存器类型:DMA配置寄存器
寄存器地址:PCIBAR0+90h
寄存器值:DMADPR0[3]=0;(PCI-E TO LOCAL)
4.设置DMA中断:
寄存器名:INTCSR
寄存器类型:Run Time寄存器
寄存器地址:PCIBAR0+68h
寄存器值:INTCSR[18]=1:使能DMA Channel0中断;
5.启动DMA传输:
寄存器名:DMACSR0
寄存器类型:局部配置寄存器
寄存器地址:PCIBAR0+A8h
寄存器值:DMACSR0[1:0]=11:启动DMA传输;
控制地址配置的一些寄存器:
6.设置地址配置使能寄存器
寄存器类型:用户自定义寄存器
寄存器地址:局部总线SPACE0地址空间 0x0000000A*4
寄存器值:enable(1:使能地址配置,0:禁止地址配置)
开始配置时置1,配置结束后置0;
7.设置地址配置RAM读使能寄存器
寄存器类型:用户自定义寄存器
寄存器地址:局部总线SPACE0地址空间 0x0000000D*4
寄存器值:enable(1:使能读RAM,0:禁止读RAM)
配置结束后置1;
· 数据采集线程中配置的寄存器(此后的寄存器在线程中配置)
采用DMA读的方式将数据采集进来,进行DMA传输时需要配置的寄存器(从PCI-E端进行访问,使用DMA Channel 0):
1.设置DMA模式:
寄存器名:DMAMODE0
寄存器类型:DMA配置寄存器
寄存器地址:PCIBAR0+80h
寄存器值:DMAMODE0[1:0]=11:定义DMA总线宽度为32位;
DMAMODE0[9]=0:设置DMA传输模式为BLOCK模式;
DMAMODE0[6]=1:使能READY#输入;
DMAMODE0[11]=1:保持局部端地址为常量;
DMAMODE0[8:7]=11:设置DMA支持连续突发传输;
DMAMODE0[10]=1:使能DMA完成中断;
DMAMODE0[11]=1:设置DMA完成中断触发INTA#中断。
2.设置DMA通道优先级:
寄存器名:MARBR
寄存器类型:局部配置寄存器
寄存器地址:PCIBAR0+08h
寄存器值:MARBR[20:19]=01:设置DMA通道0的优先级最高;
3.设置DMA传输参数:
(1)设置PCI-E端起始地址
寄存器名:DMAPADR0
寄存器类型:DMA配置寄存器
寄存器地址:PCIBAR0+84h
寄存器值:DMAPADR0[31:0]=(U32)PciBuffer.PhysicalAddr;
(2)设置局部端起始地址
寄存器名:DMALADR0
寄存器类型:DMA配置寄存器
寄存器地址:PCIBAR0+88h
寄存器值:DMALADR0[31:0]=0x0000000C*4;
(3)设置DMA长度
寄存器名:DMASIZ0
寄存器类型:DMA配置寄存器
寄存器地址:PCIBAR0+8Ch
寄存器值:DMASIZ0[22:0]=m_DMALength*4;
(4)设置DMA传输方向
寄存器名:DMADPR0
寄存器类型:DMA配置寄存器
寄存器地址:PCIBAR0+90h
寄存器值:DMADPR0[3]=1;(LOCAL TO PCI-E)
4.使能LINTI#、INTA#、DMA Channel0中断:
寄存器名:INTCSR
寄存器类型:Run Time寄存器
寄存器地址:PCIBAR0+68h
寄存器值:INTCSR[8]=1:使能INTA#中断;
INTCSR[11]=1:使能LINTI#中断;
INTCSR[18]=1:使能DMA Channel0中断;
5.启动DMA传输:
寄存器名:DMACSR0
寄存器类型:局部配置寄存器
寄存器地址:PCIBAR0+A8h
寄存器值:DMACSR0[1:0]=11:启动DMA传输;
控制FIFO时配置的寄存器:
6.设置FIFO的中断使能寄存器:
寄存器类型:用户自定义寄存器
寄存器地址:局部总线SPACE0地址空间 0x00000001*4
寄存器值:InterruptState=1(1:使能,0:废止)
7.设置FIFO的写使能寄存器:
寄存器类型:用户自定义寄存器
寄存器地址:局部总线SPACE0地址空间 0x0000000B*4
寄存器值:enable=1(1:使能,0:废止)
· 结束采集时配置的寄存器
1.设置FIFO的写使能寄存器:
寄存器类型:用户自定义寄存器
寄存器地址:局部总线SPACE0地址空间 0x0000000B*4
寄存器值:enable=0(1:使能,0:废止)
2.设置FIFO的中断使能寄存器:
寄存器类型:用户自定义寄存器
寄存器地址:局部总线SPACE0地址空间 0x00000001*4
寄存器值:InterruptState=0(1:使能,0:废止)
3.废止LINTI#、INTA#、DMA Channel0中断:
寄存器名:INTCSR
寄存器类型:Run Time寄存器
寄存器地址:PCIBAR0+68h
寄存器值:INTCSR[8]=0:废止INTA#中断;
INTCSR[11]=0:废止LINTI#中断;
INTCSR[18]=0:废止DMA Channel0中断;
4.终止DMA传输:
寄存器名:DMACSR0
寄存器类型:局部配置寄存器
寄存器地址:PCIBAR0+A8h
寄存器值:DMACSR0[1:0]=00:终止DMA传输;
!!NOTE:配置用户自定义寄存器的函数(详见PLX SDK User Manual.pdf文件,PLX6.0)为:
PlxPci_PciBarSpaceWrite(
PLX_DEVICE_OBJECT *pDevice, //Pointer to an open device
U8 BarIndex, //The index of the PCI BAR to access. Valid values are in the range 0-5.
U32 offset, //If bOffsetAsLocalAddr is FALSE, offset is an offset from the PCI BAR space. The mapping will not be
//adjusted because the function assumes the space is already mapped correctly. The data range accessed
//must not be larger than the size of the PCI-to-Local Space window.
//If bOffsetAsLocalAddr is TRUE, offset is treated as the actual local bus base address to start reading from.
//For 32-bit devices, this allows access to any location on the 4GB local bus space.
VOID *pBuffer, //A pointer to a user supplied buffer that contains the data to write.
U32 ByteCount,
PLX_ACCESS_TYPE AccessType,
BOOLEAN bOffsetAsLocalAddr
);
Description:
This function writes from the local bus of a PCI device containing a PLX chip
(sometimes referred to as Direct Slave Write).
PlxPci_PciBarSpaceWrite(
pDevice,
0,
REG_ADD,
®_VALUE, //A pointer to a user supplied buffer that contains the data to write.
sizeof(REG_VALUE),
BitSize32, // 32-bit accesses
FALSE
);
其中,REG_ADD为寄存器地址、REG_VALUE为寄存器值,返回值为ApiSuccess表示配置成功!
寄存器地址说明见AddressDevide.h文件
!!NOTE:配置局部配置寄存器、DMA配置寄存器、Run Time寄存器的函数(详见PCI SDK Programmer's Reference Manual.pdf文件)为:
写寄存器:
PLX_STATUS
PlxPci_PciRegisterWrite(
U8 bus,
U8 slot,
U8 function,
U16 REG_ADD,
U32 REG_VALUE
);
其中,REG_ADD为寄存器相对于PCIBAR0的偏移地址、REG_VALUE为寄存器值,返回值为ApiSuccess表示写寄存器成功!
读寄存器:
U32 REG_VALUE = PlxPci_PciRegisterRead(
U8 bus,
U8 slot,
U8 function,
U16 REG_ADD,
PLX_STATUS * pStatus
);
其中,REG_ADD为寄存器相对于PCIBAR0的偏移地址、REG_VALUE为返回的寄存器值
· 寄存器的配置是从“开始采集”开始依次介绍的(参见应用程序),配置寄存器的API函数见上页的NOTE!
一、采样初始化时配置的寄存器
1.设置DMA长度寄存器:
寄存器类型:用户自定义寄存器
寄存器地址:局部总线SPACE0地址空间 0x0000000F*4
寄存器值:m_DMALength(最大为2048)
2.设置采样模式寄存器:
寄存器类型:用户自定义寄存器
寄存器地址:局部总线SPACE0地址空间 0x00000005*4
寄存器值:m_SampleMode(0表示连续采样,1表示局部采样)
!!note:若采用离散采样模式,还需配置采样地址,采用DMA写的方式写入RAM,涉及的寄存器配置单独说明,见二
3.设置采样起始地址寄存器:
寄存器类型:用户自定义寄存器
寄存器地址:局部总线SPACE0地址空间 0x00000006*4
寄存器值:m_StartAddress
4.设置采样终止地址寄存器:
寄存器类型:用户自定义寄存器
寄存器地址:局部总线SPACE0地址空间 0x00000007*4
寄存器值:m_EndAddress
5.设置计数器清零寄存器:
寄存器类型:用户自定义寄存器
寄存器地址:局部总线SPACE0地址空间 0x00000003*4
寄存器值:SampleParamSet(高电平有效)
6.设置计数时间单位寄存器:
寄存器类型:用户自定义寄存器
寄存器地址:局部总线SPACE0地址空间 0x00000004*4
寄存器值:SampleParamSet
7.设置计数器控制寄存器:
寄存器类型:用户自定义寄存器
寄存器地址:局部总线SPACE0地址空间 0x00000002*4
寄存器值:SampleParamSet(1:启动计数器,0:终止计数器)
8.设置地址总线宽度寄存器:
寄存器类型:用户自定义寄存器
寄存器地址:局部总线SPACE0地址空间 0x00000008*4
寄存器值:m_AddressBusWidth
9.设置数据总线宽度寄存器:
寄存器类型:用户自定义寄存器
寄存器地址:局部总线SPACE0地址空间 0x00000009*4
寄存器值:m_DataBusWidth