【摘要】:当DCSR1寄存器的int_rd_enb和int_wr_enb位为1,而且int_wr_msk和int_rd_msk不为1时,DMA读写完成后,Capric卡将向处理器提交中断请求。此时系统软件需要进一步查询INT_REG寄存器的int_src_rd和int_src_wr位[85],判断该中断请求为DMA读完成还是DMA写完成,其步骤如下。int_src_rd位为1,表示Capric卡提交了一个DMA读完成中断请求,否则转。向wr_done_clr位写1,清除DMA读完成请求位。以上过程仅为一个简单的中断服务例程的执行流程,一个具体设备驱动程序在DMA读写完成后,将检查一些返回状态,以确定DMA读写是否正确结束。
Capric卡使用MSI机制提交中断请求,并只使用了一个中断向量处理DMA读/写完成和错误处理。本章为简便起见,忽略了错误处理的过程,但是在一个实际的设计中,错误处理及恢复过程非常重要。
当DCSR1寄存器的int_rd_enb和int_wr_enb位为1,而且int_wr_msk和int_rd_msk不为1时,DMA读写完成后,Capric卡将向处理器提交中断请求。当DMA读写完成后,硬件逻辑将INT_REG寄存器的int_asserted位置为1,表示有中断请求。此时系统软件需要进一步查询INT_REG寄存器的int_src_rd和int_src_wr位[85],判断该中断请求为DMA读完成还是DMA写完成,其步骤如下。
(1)如果int_asserted位为1,表示Capric卡提交了一个中断请求;否则转(6)。
(2)int_src_rd位为1,表示Capric卡提交了一个DMA读完成中断请求,否则转(4)。此时rd_done_clr位也应该为1。
(3)进行DMA读完成处理。向rd_done_clr位写1,清除DMA读完成请求位,转(6)。(https://www.chuimin.cn)
(4)如果int_src_wr位为1,表示Capric卡提交了一个DMA写完成中断请求。此时wr_done_clr位也应该为1。
(5)进行DMA写完成处理。向wr_done_clr位写1,清除DMA读完成请求位。
(6)结束。
以上过程仅为一个简单的中断服务例程的执行流程,一个具体设备驱动程序在DMA读写完成后,将检查一些返回状态,以确定DMA读写是否正确结束。
相关推荐