您的位置:首页 > 其它

DMA寄存器设置

2014-06-24 00:10 183 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: