【摘要】:Capric卡仅使用BAR0空间,其大小为256B,在该空间中包含以下寄存器,这些寄存器使用小端编码方式,如表12-1所示。表12-1 Capric卡的BAR空间寄存器DCSR1寄存器,该寄存器由7个有效位组成。该寄存器的复位值为0,由32位组成,但是只有最低11位有效,因此Capric卡一次DMA读传送的最大值为0x7FF。当Capric卡的DMA读操作完成后,而且DCSR1寄存器的int_rd_enb位为1时,该位为1表示Capric卡已经向处理器提交了DMA读完成中断请求。
Capric卡仅使用BAR0空间,其大小为256B,在该空间中包含以下寄存器,这些寄存器使用小端编码方式,如表12-1所示。
表12-1 Capric卡的BAR空间寄存器
(1)DCSR1寄存器,该寄存器由7个有效位组成。
●init_rst_o,第0位,该位可读写,复位值为0。为1表示Capric卡处于复位状态,为0表示Capric卡已经完成复位。软件通过操纵该位对Capric卡进行复位。其过程为首先向此位写1,然后延时至少5μs后(Capric卡内逻辑和FPGA的片内SRAM需要至少5μs的复位时间),再向此位写0。
●int_rd_enb,第8位,该位可读写,复位值为0。为1表示当DMA读完成后,Capric卡可以向处理器提交中断请求;为0表示DMA读完成后,Capric卡不能向处理器提交中断请求。该位为DMA读完成中断使能位。
●int_wr_enb,第9位,该位可读写,复位值为0。为1表示当DMA写完成后,Capric卡可以向处理器提交中断请求;为0表示DMA写完成后,Capric卡不能向处理器提交中断请求。该位为DMA写完成中断使能位。
●int_rd_msk,第16位,该位可读写,复位值为0。为1表示当DMA读完成后,Capric卡不能向处理器提交中断请求,而是置int_rd_pending位为1;为0表示DMA读完成后,Capric卡可以向处理器提交中断请求。该位为DMA读完成中断屏蔽位。
●int_rd_pending,第17位,该位可读写,复位值为0。为1表示Capric卡含有未发出的DMA读完成中断请求,当int_rd_msk位由1变为0时,Capric卡发送该中断请求;为0表示Capric卡不含有未发出的DMA读完成中断请求。
●int_wr_msk,第24位,该位可读写,复位值为0。为1表示当DMA写完成后,Capric卡不能向处理器提交中断请求,而是置int_wr_pending位为1;为0表示DMA写完成后,Capric卡可以向处理器提交中断请求。该位为DMA写完成中断屏蔽位。
●int_wr_pending,第25位,该位可读写,复位值为0。为1表示Capric卡含有未发出的DMA写完成中断请求,当int_wr_msk位由1变为0时,Capric卡发送该中断请求;为0表示Capric卡不含有未发出的DMA写完成中断请求。
设置Mask和Pending位的主要目的是为了防止中断丢失和产生Spurious中断请求,这两位与MSI Capability结构中的Mask和Pending位的功能相似。LogiCORE并不支持MSI Capa-bility结构中的Mask和Pending位,因此Capric卡引入了这两个位。
(2)DCSR2,该寄存器由4位组成。分别为mwr_start,DMA写启动位;mwr_done,DMA写结束位;mrd_start,DMA读启动位;mrd_done,DMA读结束位。
●mwr_start,第0位,该位可读写,复位值为0。系统软件向该位写1时启动DMA写操作,软件对此位写0无意义。
●wr_done_clr,第1位,可读,写1清除。当一次DMA写完成后,wr_done_clr位将置1,系统软件将wr_done_clr位写1清零后,mwr_start位也将清零,之后系统软件可以重新启动下一次DMA写操作。(www.chuimin.cn)
●mrd_start,第16位,该位可读写,复位值为0。系统软件向该位写1时启动DMA读操作,软件对此位写0无意义。
●rd_done_clr,第17位,可读,写1清除。当一次DMA读完成后,rd_done_clr位将置1,系统软件将rd_done_clr位写1清零后,mrd_start位也将清零,之后系统软件可以重新启动下一次DMA读操作。
(3)WR_DMA_ADR,DMA写地址寄存器,该寄存器存放DMA写操作的目的地址,该寄存器的复位值无意义。再一次强调该寄存器存放的地址为PCI总线域的地址,而不是存储器域的地址,尽管在许多处理器系统中,该地址的PCI总线域地址与存储器域地址相等。该寄存器由32位组成,存放32位的PCI总线域地址。
(4)WR_DMA_SIZE,DMA写传送大小寄存器。该寄存器存放一次DMA写操作的传送大小,以字节为单位。该寄存器的复位值为0,由32位组成,但是只有低11位有效,因此Capric卡一次DMA传送的最大值为0x7FF。该寄存器为N时表示一次DMA写操作的传送大小为N个字节。该寄存器为0时,即便DCSR2寄存器的mwr_start位为1时,也不能启动DMA写传送。当mwr_start位为1,该寄存器由0变为其他数据时,也将启动DMA写传送。
(5)RD_DMA_ADR,DMA读地址寄存器,该寄存器存放DMA读操作的目的地址,该寄存器的复位值无意义。该寄存器存放的地址为PCI总线域地址,由32位组成。Capric仅支持32位的PCI总线地址。
(6)RD_DMA_SIZE,DMA读传送大小寄存器,存放一次DMA读操作的传送大小,以字节为单位。该寄存器的复位值为0,由32位组成,但是只有最低11位有效,因此Capric卡一次DMA读传送的最大值为0x7FF。该寄存器为N时表示一次DMA读操作的传送大小为N个字节。该寄存器为0时,即便DCSR2寄存器的mrd_start位为1时,也不能启动DMA读传送。当mrd_start位为1时,该寄存器由0变为其他数据时,将启动DMA读传送。
(7)INT_REG,中断控制状态寄存器,该寄存器存放Capric卡的中断状态,该寄存器共由5个有效位组成。
●int_src_rd,第0位,该位只读,复位值为0。当Capric卡的DMA读操作完成后,而且DCSR1寄存器的int_rd_enb位为1时,该位为1表示Capric卡已经向处理器提交了DMA读完成中断请求。值得注意的是当int_rd_msk位为1时,Capric卡不能发送DMA读完成中断,此时int_src_rd位需要等待Capric卡置int_rd_msk位为0,发送完毕DMA读完成中断后,才能置1。
●int_src_wr,第1位,该位只读,复位值为0。当Capric卡的DMA写操作完成后,而且DCSR1寄存器的int_wr_enb位为1时,该位为1表示Capric卡已经向处理器提交了DMA写完成中断请求。值得注意的是当int_wr_msk位为1时,Capric卡不能发送DMA写完成中断,此时int_src_wr位需要等待Capric卡置int_wr_msk位为0,发送完毕DMA写完成中断后,才能置1。
●rd_done_clr,第8位,该位可读写,复位值为0,该位为1表示DMA读操作完成。DMA读结束后该位由硬件置1,软件将该位清零后,硬件才能进行下一次DMA读操作。该位置1后,如果DCSR1寄存器的int_rd_enb位为1时,Capric卡将向处理器提交中断请求[82]。
系统软件在中断服务例程中,向该位写1将清除该位;向该位写0无意义。如果Capric卡不使用中断方式接收数据,系统软件可以查询该位确定当前DMA读操作是否已经完成。此位与DCSR2寄存器的rd_done_clr位相同,软件清除INT_REG寄存器的该位后,DCSR2寄存器的rd_done_clr位也被清零。
●wr_done_clr,第9位,该位可读写,复位值为0,该位为1表示DMA写操作完成。DMA写完成后该位由硬件置1,软件将该位清零后,硬件才能进行下一次DMA写操作。该位置1后,如果DCSR1寄存器的int_wr_enb位为1时,Capric卡将向处理器提交中断请求。
系统软件在中断服务例程中,向该位写1将清除该位;向该位写0无意义。如果Capric卡不使用中断方式接收数据,系统软件可以查询该位确定当前DMA写操作是否已经完成。此位与DCSR2寄存器的wr_done_clr位相同,软件清除INT_REG寄存器的该位后,DCSR2寄存器的wr_done_clr位也被清零。
●int_asserted,第31位,该位只读,复位值为0。当Capric卡向处理器提交中断请求时,该位由硬件逻辑置1。对此位进行写操作无意义。在逻辑实现中,int_asserted=int_src_rd&int_src_wr。
相关推荐