反射内存PCI-5565网络中断命令寄存器

发布时间:2015.12.15 新闻来源: 浏览次数:

3.3.9网络中断命令寄存器

网络中断命令(NIC)BAR2(偏移$ 1D):一个8位寄存器包含一个4位代码,定义网络中断类型发出。请参阅表346的定义可能的代码。该寄存器是可以进行读取和写入操作。写NIC寄存器将启动网络中断。先前写入的目标数据寄存器和节点寄存器通过网络中断传输。

上述的NTD,NTN和NIC寄存器用于产生一个网络中断,以下四对寄存器用于接收网络中断。

3.3.10中断1发送数据FIFO

中断1发送数据FIFO(ISD1)BAR2(偏移$20):高达127个32位含有对齐数据的FIFO,数据通过类型1网络中断包发送到这个节点。32位的数据的功能由用户定义。 ISD1的127深度的FIFO,但它是中断发送SID1 FIFO是一对,。从本质上讲,只有一个地址的两个FIFO的指针和该指针只受SID1 FIFO的访问影响。出于这个原因,在数据的每个位置(ISD1)FIFO可多次读取的地址指针不递增,而读数SID1 FIFO两个FIFO的指针递增。出于相同的原因,用户必须先读取数据(ISD1),再读取发送ID FIFO(SID 1),否则数据将丢失。

3.3.11中断1发送ID FIFO

中断1发送ID FIFO(SID 1)BAR2(偏移$24):ISD1中的数据包含节点ID对应一个8位的FIFO。每次一个节点发出一个网络中断,它自己的节点ID作为数据包的一部分发送。在每个网络节点中,中断分组中进行了解析。如果网络中断被定向到该节点,并且是类型1的网络中断,那么​​发送者的节点ID被存储在127的位置深的FIFO,被称为中断1发送ID FIFO或SID1。和任何正常的FIFO,每次SID1读取FIFO地址指针自动递增。因此只能读取一次SID1 FIFO。SID1 FIFO的写入任何数据,会导致SID1 FIFO被清空。请注意,零值并不表示FIFO是空的,因为零也是一个有效的节点ID。要看到,如果网络中断正在等待,检查LISR中寄存器的位07,02,01和00。

 

3.3.12中断2发送数据FIFO

中断2发送数据FIFO(ISD2)BAR2(偏移$28):一个32位的FIFO就像ISD1一样运作,但它仅响应类型2网络中断。

3.3.13中断2发送ID FIFO

中断2发送ID FIFO(SID2)BAR2(偏移$2C):一个8位的FIFO像SID1一样运作,但它仅响应类型2网络中断。

3.3.14中断3发送数据FIFO

中断3发送数据FIFO(ISD3)BAR2(偏移$30):一个32位的FIFO就像ISD1一样运作,但它仅响应类型3网络中断。

3.3.15中断3发送ID FIFO

中断3发件人ID FIFO(SID3)BAR2(偏移$34):一个8位的FIFO就像SID1一样运作,但它仅响应类型3网络中断。

3.3.16中断4发送数据FIFO

中断4发送数据FIFO(ISD4)BAR2(偏移$38):一个32位的FIFO就像ISD1一样运作,但它仅响应类型4网络中断。

3.3.17中断4发送ID FIFO

中断4发件人ID FIFO(SID4)BAR2(偏移$3C):一个8位的FIFO就像SID1一样运作,但它仅响应类型4网络中断。

 

3.4 RFM-5565 DMA块操作示例

1。基址寄存器0存储本地控制和配置寄存器的起始地址,其中包括DMA控制寄存器。该寄存器中的值是PCIBAR0。

2。要建立DMA周期必须配置6个DMA寄存器。DMA周期后这些DMA寄存器将保持不变。

DMA通道0模式设置:第9位设置为0,表示使用正常块DMA(不是分散/集中模式)。

DMAMODE0 at PCIBAR0 + offset $80

DMA通道0 PCI起始地址:

设置的PC存储器的起始地址(源或目的地的转送)。

DMAPADR0 at PCIBAR0 + offset $84

DMA通道0本地的起始地址:

设置为本地存储器(RFM)的起始地址(源或目标地址的传输)。

注:第一本地(RFM)内存位置为$ 0。

DMALADR0 at PCIBAR0 + offset $88 

DMA通道0传输大小:

设置为要传输的字节数(最大$7FFFFF)。

DMASIZ0 at PCIBAR0 + offset $8C

DMA通道0描述符指针:

写$0设置PCI到本地

写$8设置本地到PCI

DMADPR0 at PCIBAR0 + offset $90

DMA通道0 PCI DAC增加地址:

当使用32位地址,该寄存器设置为$ 0。

DMADAC0 at PCIBAR0 + offset $B4

 

3。要启动和监控传输,以如下方式访问DMACSR0:

DMA通道0命令/状态寄存器:

DMACSR0 PCIBAR0+偏移$ A8.

写$0003到开始传输,然后轮询相同的寄存器。当位4是高(1)时,DMA周期完成。

 

注意:轮询读取周期优先于DMA周期。过多的轮循将放缓DMA传输。除了轮询的DMA完成条件,用户可以选择启用DMA中断,通过设置在偏移$68的 INTCSR的位18,PCI DMA完成将产生一个中断。一旦中断被启用,用户的软件程序只用等待中断事件就可以了。

 

4。DMA完成后,清除DMA完成位的通过以下方式写DMACSR0寄存器。当使用DMA中断,这个是必须的:

DMA通道0控制/状态寄存器

DMACSR0 PCIBAR0+偏移$ A8。

在启动另一个DMA操作前,写$8以清除DMA完成位。

 

3.5 反射内存RFM5565分散/集聚的DMA操作示例

注:scatter/gather方式是与block dma方式相对应的一种dma方式。 
在dma传输数据的过程中,要求源物理地址和目标物理地址必须是连续的。但在有的计算机体系中,如IA,连续的存储器地址在物理上不一定是连续的,则dma传输要分成多次完成。 
如果传输完一块物理连续的数据后发起一次中断,同时主机进行下一块物理连续的传输,则这种方式即为block dma方式。 
scatter/gather方式则不同,他是用一个链表描述物理不连续的存储器,然后把链表首地址告诉dma master。dma master传输完一块物理连续的数据后,就不用再发中断了,而是根据链表传输下一块物理连续的数据,最后发起一次中断。 
很显然scatter/gather方式比block dma方式效率高。

分散/集聚DMA传输是一种用于执行分割成不同小块的大型数据的传输的模式。注意:在一个数据页不能跨越4 GB的地址边界。该DMA描述符指针是链表页描述地址。

每个页面描述符定义一个地址和数据块大小加上下一个描述符块的指针。当数据被读取/写入到相应的页面,自动获取描述符。描述链处理直到数据传输完成或达到的描述链的末端,以先到者为准。

 

页面描述符块不能被映射在64位寻址空间。第一个描述符必须是一个16字节的边界上。为了获得最佳性能,每个描述符块应该被一个16字节或8字节边界对齐。

页面描述链必须建立在PCI 32bit的内存空间,才开始一个分散/集聚DMA。链中的每个描述符格式如下:

第一DWORD:低32位PCI数据地址(每个页面都要一个8字节边界对齐),

第二个DWORD:高32位PCI数据地址,($ 0为32位寻址)

第三DWORD:要传输的字节数到/从PCI地址(每个页面大小必须是8字节的倍数)

第四DWORD:下一描述符(写$1表示链结束)

同时,所有数据块的大小总长度值必须被写入DMA传输大小寄存器。

1。基址寄存器0存储本地控制和配置寄存器,其中包括DMA控制寄存器的起始地址。该寄存器中的值是PCIBAR0。

2。为配置一个DMA周期有6个DMA寄存器必须被设置。DMA周期后这些寄存器将保持不变。

 

3.6 RFM-5565反射内存的PCI PIO设置示例

RFM-5565反射内存卡PCI-5565现有128M和256M两种大小的板载内存。在一些情况下,减小PCI内存地址窗口大小是有用的。

3.7反射内存网络中断处理示例

以下示例,用于生成RFM5565反射内存卡PCI-5565四个基本的网络中断中的一个。这个例子也列出中断的处理的必要步骤,。使用此示例时,可以参考图2-1和图3-1所涉及的电路。

3.7.1 建立

1.通过与0到地址为PCIBAR2+offset$24的SID1清除以前保留在SID1 FIFO中的中断。

2.通过与0到地址为PCIBAR2+offset$2C的SID2清除以前保留在SID2 FIFO中的中断。

3.通过与0到地址为PCIBAR2+offset$34的SID3清除以前保留在SID3 FIFO中的中断。

4.通过与0到地址为PCIBAR2+offset$3C的SID4清除以前保留在SID4 FIFO中的中断。

5. 使用读-修改-写操作,设置位置在LIER寄存器PCIBAR2+偏移$14的07位,02位,01位和位00高(1)。这使得四个基本的网络中断任何一个的可以设置信号LINTi#,LISR中全局使能位也是高(1)。

6. PCIBAR2的+偏移$10寄存器LISR写值$ 4000。值$4000设置全局中断允许位(第14位)高(1),并清除任何无关的来源。您可能更喜欢使用读修改写操作,如果LISR中的其他中断源是保持不变。

7.使用读修改写操作,设置PCIBAR0+偏移$68 INTCSR寄存器第8位和第11位高(1)。第8位是PCI中断使能和11位是本地中断输入(LINTi#)。

3.7.2反射内存卡PCI-5565网络中断服务

读地址在PCIBAR0+偏移$68的INTCSR寄存器,校验本地中断输入活动位(BIT15)是否为高,如果不为高,或者另外一个INTCSR寄存器内的中断源有更高优先级,那需改变中断服务路由步骤如下。

读PCIBAR2+偏移$10LISR寄存器,确定挂起的网络中断4,挂起的网络中断3,挂起的网络中断2,挂起的网络中断1是否为高。

假设上一步表明挂起的网络中断2为高,读PCIBAR2+偏移$28中断2发送数据FIFO,并且将值存储在用户希望的地方,如果用户没有在中断中带数据,读数据FIFO这一步可以跳过。

读PCIBAR2+偏移$2C的中断2发送ID FIFO中的值,并把存储在用户希望的地方。这个值是在网络中断的源的节点ID。前提是有没有其它的网络中断存储在发送ID FIFO,读这个值就将清除网络中断2 LISR中位(01位),这反过来又将释放LINTi#。LINTi#置为无效将清除PCI中断。

 

本文共分 1