发明内容
本实用新型提供一种带定时器的DMA控制器,以提高总线的效率和人员的工作效率。
本实用新型所要解决的问题可以通过以下技术方案来解决:
一种直接存储器访问控制器,包括总线BUSA、总线BUSB、定时器、译码逻辑、状态寄存器、控制寄存器、命令寄存器组、描述符寄存器组、现场寄存器组、状态机、数据缓冲队列FIFO;所述总线BUSA分别与定时器、状态寄存器、控制寄存器、命令寄存器组、描述符寄存器组双向连接,并与译码逻辑输入端、现场寄存器组输出端相连接;总线BUSB分别与数据缓冲队列FIFO、状态机双向连接,并与描述符寄存器组输入端、现场寄存器组输入端相连接;定时器输出端与状态寄存器输入端、状态机输入端相连接,定时器输入端与译码逻辑输出端、控制寄存器输出端相连接;译码逻辑输出端与状态寄存器输入端、控制寄存器输入端、命令寄存器组输入端、描述符寄存器组输入端、现场寄存器组输入端相连接;状态寄存器输入端与状态机输出端相连接,状态寄存器输出端与状态机输入端相连接;控制寄存器输出端与状态机输入端相连接;命令寄存器组输出端与现场寄存器组输入端、状态机输入端相连接;描述符寄存器组输入端与状态机输出端相连接,描述符寄存器组输出端与状态机输入端相连接;现场寄存器组输入端与状态机输出端相连接,现场寄存器组输出端与状态机输入端相连接。
所述状态机的输入信号还包括外部请求输入信号、总线BUSB的仲裁信号,输出信号还包括总线BUSB的申请信号。
所述定时器包括初值寄存器、计数寄存器、递增加法器、控制信号产生部件;所述初值寄存器与总线BUSA双向连接,且初值寄存器输出端与计数寄存器输入端、控制信号产生部件输入端相连接;计数寄存器输出端与控制信号产生部件输入端、递增加法器输入端相连接,计数寄存器输入端与控制信号产生部件输出端相连接;递增加法器输出端与计数寄存器输入端相连接。
与现有技术相比,本实用新型的优点在于:由于本实用新型提供的DMA控制器采用带有定时器,程序员可以通过设置DMA控制器中的定时器,强迫DMA控制器在一定时间内必须发出中断,从而避免DMA控制器在执行一个命令时因为外部请求传输的数据量不足而发不出命令已完成的信号,帮助程序员及时知道DMA控制器和外部请求设备的状态。程序员不必借助外部的定时器,DMA控制器的使用变得方便。
DMA控制器中的定时器还可以为支持链式传输的DMA控制器提供一种周期性查询存储器中指定地址的内容,避免在等待状态频繁查询CPU准备新命令的状态,从而有利于提高总线的效率。
这种DMA控制器的附带优点是,支持周期性的DMA传输操作,由于DMA控制器所带的定时器可以提供周期性的信号,这样一来可以不需要外部的定时器,使程序员工作效率提高。
具体实施方式
下面结合附图和实施例对本发明作进一步详细的描述。
如图1所示,一种直接存储器访问控制器,包括总线BUSA101、总线BUSB111、定时器102、译码逻辑103、状态寄存器104、控制寄存器105、命令寄存器组106、描述符寄存器组107、现场寄存器组108、状态机109、数据缓冲队列FIFO(First In First Out)110。总线BUSA101分别与定时器102、状态寄存器104、控制寄存器105、命令寄存器组106、描述符寄存器组107双向连接,并与译码逻辑输入端、现场寄存器组输出端相连接;总线BUSB111分别与数据缓冲队列FIFO110、状态机109双向连接,并与描述符寄存器组输入端、现场寄存器组输入端相连接;定时器输出端与状态寄存器输入端、状态机输入端相连接,定时器输入端与译码逻辑输出端、控制寄存器输出端相连接;译码逻辑输出端与状态寄存器输入端、控制寄存器输入端、命令寄存器组输入端、描述符寄存器组输入端、现场寄存器组输入端相连接;状态寄存器输入端与状态机输出端相连接,状态寄存器输出端与状态机输入端相连接;控制寄存器输出端与状态机输入端相连接;命令寄存器组输出端与现场寄存器组输入端、状态机输入端相连接;描述符寄存器组输入端与状态机输出端相连接,描述符寄存器组输出端与状态机输入端相连接;现场寄存器组输入端与状态机输出端相连接,现场寄存器组输出端与状态机输入端相连接。
在采用单总线的DMA控制器中,总线BUSA101和总线BUSB111实际是同一总线;在采用多总线的DMA控制器中,总线BUSA101和总线BUSB111可以是不同总线。命令寄存器组106包括目的地址寄存器DADDRR(DestinationAddress Register)206、源地址寄存器SADDRR(Source Address Register)207、字节计数寄存器BCR(Byte Count Register)208。描述符寄存器组107包括当前描述寄存器CDESR(Current Descriptor Register)201、下一个描述符寄存器NDESR(Next Descriptor Register)202。现场寄存器组108包括当前目的地址寄存器CDADDRR(Current Destination Address Register)203、当前源地址寄存器CSADDRR(Current Source Address Register)204、当前字节计数寄存器CBCR(Current Byte Count Register)208。
外部主设备(比如CPU)通过总线BUSA101访问DMA控制器的内部寄存器来实现某些操作,这些操作包括设置定时器102、设置命令寄存器组106、设置控制寄存器105、初始化描述符寄存器组107、读状态寄存器104、清除状态寄存器104的特殊位、读现场寄存器组108。译码逻辑103根据总线BUSA101上的地址译码得出选择信号114、115、116、117、118、119选择被访问的内部寄存器。状态机109根据状态寄存器的请求状态信号121、外部请求输入信号131、描述符寄存器组信号127、控制寄存器信号123、定时器信号124、命令寄存器组信号125、当前命令寄存器组信号129、总线BUSB111的仲裁信号132等信号,控制DMA控制器的运行,包括状态寄存器的变化、命令的执行、总线时序控制。状态机产生的信号包括控制状态寄存器变化的信号122、控制描述符寄存器组更新的信号128、控制当前命令寄存器组更新的信号130、总线BUSB的申请信号133、以及BUSB总线的控制信号。状态寄存器接收定时器的输入信号112,并根据中断状态产生中断请求信号120。定时器将根据控制寄存器的模式指示信号113进行工作。
当DMA控制器工作在直接传输模式下,CPU首先初始化命令寄存器组106,DMA控制器接收到请求信号131后,状态机109控制现场寄存器组108通过连线126读入命令寄存器组106中的内容,并发出总线申请133。接收到总线仲裁信号132,根据当前源地址寄存器204和当前目的地址寄存器203产生总线地址并送到总线BUSB111上;并把总线BUSB111数据接收到数据缓冲队列FIFO110中,或把数据缓冲队列FIFO110中的数据发送到总线BUSB111上。当完成当前命令定义的所有数据传输后;状态机109产生中断状态信号,状态寄存器发出中断请求120。
链式模式下,CPU首先初始化描述符寄存器组107。DMA控制器接收到请求信号131后,DMA控制器根据下一个描述符寄存器指示的地址,通过总线BUSB111读入新的描述符到描述符寄存器组107,并把指定的命令读入当前命令寄存器组。DMA控制器根据读入的描述符状态记录判断CPU是否准备好新命令。如果CPU准备好新命令,则DMA控制器开始执行读入的这个命令,并在完成这个命令后根据描述符指定的地址重新读入描述符和新命令,开始新的判断过程;这样反复进行读命令、执行命令的操作,直到描述符状态记录标志没有命令执行为止。如果DMA控制器通过读入的描述符判断出CPU没有准备好,则DMA控制器重新读入这个指定的描述符和命令,直到DMA控制器判断出该描述符有效。
定时器102的作用有三个。(一)、用户可以通过总线BUSA101设置定时器,定时器可以产生周期性的请求信号,这个信号可以替代外部的请求信号131,从而周期性地启动DMA控制器传输命令。(二)、在链式工作模式下,为了避免在CPU没有准备好命令的请求情况下DMA控制器频繁地访问存储器(以便读入一个有效的命令),用户可以设置定时器,通过定时访问降低DMA控制器访问存储器的频度,从而提高存储器的效率。(三)、用户也可以如下设置定时器:如果DMA控制器在指定的时间范围内没有完成指定的传输任务,DMA控制器将产生一个超时中断,及时报告已完成的传输过程。这样可以提供一种DMA控制器在不断传输重试、实际传输任务少于预期传输任务以及总线意外长时间等待等情况下通知用户的中断机制。
图2是本实用新型控制寄存器的相关位示意图。为了支持定时器工作,DMA控制器应该增加一些控制位。这些控制位包括定时中断使能位TIEN(Timer Interrupt Enable)211、定时请求使能位TREN(Timer Request Enable)212、定时读取描述符使能位TADEN(Timer Access Descriptor Enable)213。这些控制位定义在控制寄存器105中。定时中断使能位TIEN211、定时请求使能位TREN212、定时读取描述符使能位TADEN213都是高电平有效。当定时中断使能位TIEN211有效时,DMA控制器在设定的时间范围内没有完成传输命令则将产生超时中断。当定时请求使能位TREN212有效时,定时器将周期性的请求DMA控制器传输数据。当定时读取描述符使能位TADEN213有效时,DMA控制器判断出需要重新读取描述符的情况下,状态机109将根据定时器的定时信号重新读取描述符。
图3是本实用新型提出的DMA控制器的定时器的结构框图。定时器102包括初值寄存器33、计数寄存器38、递增加法器36、控制信号产生部件31;所述初值寄存器33与总线BUSA101双向连接,且初值寄存器输出端与计数寄存器输入端、控制信号产生部件输入端相连接;计数寄存器输出端与控制信号产生部件输入端、递增加法器输入端相连接,计数寄存器输入端与控制信号产生部件输出端相连接;递增加法器输出端与计数寄存器输入端相连接。定时器102可以提供周期性的请求信号,指示DMA控制器读取描述符,提供超时中断源。
用户可以通过总线BUSA101设置或读取初值寄存器33,选择信号302来自图1中的译码逻辑103,指示总线BUSA101访问初值寄存器33。当用户允许定时器工作时,计数寄存器的值通过递增加法器36的作用每周期加一。控制信号产生部件31对初值寄存器的值和计数寄存器的值310进行比较,当两者相等时,产生清零信号309,在下一周期清除计数寄存器的值,然后计数寄存器重新计数。当初值寄存器的值和计数寄存器的值相等时,控制信号产生逻辑根据来自控制寄存器的定时中断使能位TIEN211、定时请求使能位TREN212、定时读取描述符使能位TADEN213产生定时中断信号316、定时请求信号317、定时读取描述符信号318。当定时中断使能位TIEN211、定时请求使能位TREN212、定时读取描述符使能位TADEN213有效时,相应的定时中断信号316、定时请求信号317、定时读取描述符信号318才能有效。定时中断信号316送到状态寄存器104中,定时请求信号317和定时读取描述符信号318送到状态机109中。
定时器102能否工作取决于时中断使能位TIEN211、定时请求使能位TREN212)、定时读取描述符使能位TADEN213和来自状态机109的当前命令完成信号315。中断使能位TIEN211有效,或定时请求使能位TREN212,或定时读取描述符使能位TADEN213有效且当前命令完成信号315无效时,定时器允许工作。否则计数寄存器被清零,定时器不允许工作。
图4是中断控制逻辑的示意图。由于增加了超时中断源,状态寄存器相应增加超时状态位403。超时状态位403等于“1”表示发生了超时中断。超时中断采样定时器来的定时中断信号316,当定时中断信号316有效时,超时状态位有效并保持;用户通过总线BUSA101向超时状态位写“0”将把超时状态位清零。
当超时状态位有效时,将产生超时中断404。超时中断高有效。超时中断404和DMA正常情况下的中断信号405经过一个二或门406得到一个中断请求信号120,这个中断请求信号就是DMA控制器输出的中断请求信号。
图5是定时请求选择示意图,当用户使能定时请求功能时,来自定时器的请求信号317请求DMA控制器开始工作;否则,外部输入请求信号131请求DMA控制器开始工作。即来自控制寄存器的定时请求使能信号503有效时,二选一选择器502选择来自定时器的请求信号317作为最终的请求DMA控制器开始工作的请求信号501;否则二选一选择器502选择外部输入的请求信号131作为最终的请求DMA控制器开始工作的请求信号501。
图6是定时读取描述符控制示意图,图中所示信号包括来自定时器的定时读取描述符信号318;状态机109产生的读描述符完成信号602,当状态机读完一个描述符时该信号有效;来自控制寄存器的定时读取描述符使能信号605;状态机正常情况下等待CPU准备描述符的指示信号609;状态机无需等待CPU读取描述符的指示信号612;状态机读取描述符的指示信号614;这些信号都是高电平有效。图中触发器603采样定时读取描述符信号318并保持有效的定时读取描述符信号(高电平有效),直到接收到读描述符完成信号602。
当状态机无需等待CPU就读取描述符时,状态机读取描述符的指示信号614等于状态机无需等待CPU读取描述符的指示信号612。否则,当定时读取描述符使能信号605无效时,状态机读取描述符的指示信号614等于状态机正常情况下等待CPU准备描述符的指示信号609;当定时读取描述符使能信号605有效时,等待CPU准备描述符的指示信号609和触发器输出信号604有效时状态机读取描述符的指示信号614有效。
图中触发器603采样定时读取描述符信号318并保持有效的定时读取描述符信号(高有效),当读描述符完成信号602有效是被清零。定时读取描述符使能信号605经过一个反向器(非门)606得到定时读取描述符使能非信号607。触发器输出信号604和定时读取描述符使能非信号607经过一个二或门得到信号608。信号608和等待CPU准备描述符的指示信号609经过一个二与门610得到信号611。信号611和无需等待CPU读取描述符的指示信号612经过一个二或门得到状态机读取描述符的指示信号614。