发明内容
针对现有技术中存在的缺陷,本发明的目的在于提供一种基于双AHB Master接口的片上DMA控制器实现方法,即在具有AHB总线的片上系统中,设计具有双master接口的片上DMA控制器,解决目前的DMA控制器,大部分仅适用于单层总线,内部缓存过大,无法有效的提高总线的利用率,每个DMA通道也未能实现灵活的流控管理的问题。
为达到以上目的,本发明采取的技术方案是:
一种基于双AHB Master接口的片上DMA控制器实现方法,其特征在于包括以下步骤:
步骤1,在DMA控制器开始工作前,由ARM微处理器通过APB总线对DMA控制器中的DMA配置寄存器单元进行初始化配置,所述初始化配置包括:对32个DMA通道的通道配置寄存器,源地址寄存器,目的地址寄存器,传输数据长度寄存器进行初始化配置,即确定每个DMA通道的使能,工作模式,有效数据宽度,数据源的起始地址,数据目的的起始地址,以及传输数据长度;所述工作模式包括主动模式,被动模式,软件模式;所述有效数据宽度包括byte,half word,word;
步骤2,开始数据传输过程,DMA控制器等待出现的DMA请求信号,所述DMA请求信号为在主动模式,被动模式,软件模式下均有效的dma_req,或仅在被动模式下有效的dma_last_req,在dma_req对应的通道的使能有效的情况下,根据有效的请求信号DMA控制器的仲裁单元仲裁出当前需要响应的通道号,并同时产生pahb_req信号和current_last_req,给AHB_master0接口单元,如果没有请求则继续在此步骤中等待执行;
步骤3,当AHB_master0接口单元在pahb_req信号为高的情况下,得到仲裁单元仲裁出的通道号后,根据这个通道号对应通道的配置信息,所述对应通道的配置信息包括:对应通道的工作模式,有效数据宽度,数据源的起始地址,数据目的的起始地址,以及传输数据 长度,将其转变为一次INCR4类型或4个连续SINGLE类型的AHB_master0的ARB总线信号,根据p_ram_select的指示将从源地址读回的数据存储在DMA数据缓存寄存器组中,并对这个通道读回的数据量进行计数,每次INCR4类型或者4个连续SINGLE类型的传输完成时产生pahb_ack完成信号,给仲裁单元,同时将产生的qahb_req信号、该通道的配置信息以及数据存储的位置q_ram_select传递给AHB_master1接口单元;
步骤4,AHB_master1接口单元在qahb_req信号为高的情况下,获得AHB_master0接口单元传递的信息后,将其转变为一次INCR4类型或4个连续SINGLE类型的AHB_master1的AHB总线信号,根据q_ram_select的指示从DMA数据缓存寄存器组里面读出相应的数据,并通过AHB_master1接口单元的AHB总线写到目的地址上去;每次INCR4类型或者4个连续SINGLE类型的传输完成时产生qahb_ack完成信号,给AHB_master0接口单元,
步骤5,当DMA控制器完成当前响应通道本次DMA请求全部的数据传输,AHB_master0接口单元同时将该通道对应的DMA中断信号dma_int和DMA请求清零信号dma_clr信号拉高,并用dma_clr信号清零对应通道的外设或内存RAM发出的dma_req,使其不参加下一次的仲裁;DMA配置寄存器单元在检测到中断信号dma_int时,将对应的通道的通道完成状态寄存器置高,对应通道的使能信号关闭,此时表示该通道的请求响应完成,跳到步骤7;若DMA控制器未完成当前响应通道本次DMA请求全部的数据传输,则跳到步骤6;
步骤6,当DMA控制器未完成当前响应通道本次DMA请求全部的数据传输,则不作任何信号调整,直接跳转到步骤2;此时该通道对应的DMA请求信号dma_req或dma_last_req依然有效,与其它未被DMA控制器响应的有效通道请求一起参与仲裁单元的下一次仲裁;
步骤7,ARM微处理器通过APB总线对DMA控制器中,已完成本次DMA请求全部数据传输的当前响应通道的配置寄存器单元(源地址寄存器,目的地址寄存器,传输数据长度寄存器)进行重新配置,并 重新打开当前响应通道的使能信号后跳到步骤2。
在上述技术方案的基础上,每次DMA控制器数据传输只响应32个通道中的一个通道,每个通道的实现方法相同。
在上述技术方案的基础上,当DMA控制器未完成当前响应通道n全部的数据传输时,n=0,1,2……31,其后续数据传输过程如下:
1)在DMA控制器通道n开始数据传输之前,ARM微控制器通过APB总线对通道n的通道配置寄存器,源地址寄存器,目的地址寄存器,传输数据长度寄存器进行相应配置,并打开通道n的使能信号;
2)仲裁单元根据仲裁原则确定响应通道n;
3)AHB_master0接口单元将根据通道n的源地址寄存器发出相应的一次INCR4类型或者4个连续SINGLE类型的传输地址及控制信号;将从源地址读回的数据,存到DMA数据缓存寄存器组;并对读回的数据量按字节进行计数;并在DMA控制器完成通道n本次DMA请求全部的数据传输时产生通道n请求的清零信号dma_clr和中断信号dma_int,同时将该通道的配置信息以及数据存储的位置q_ram_select传递给AHB_master1接口单元,
4)AHB_master1接口单元将根据通道n的目的地址寄存器发出相应的一次符合AHB总线要求的INCR4类型或者4个连续SINGLE类型的传输地址及控制信号,同时根据q_ram_select信号的指示将从DMA数据缓存寄存器组读出的数据,写到对应的目的地址上;
5)该通道为主动模式或软件模式的情况下:若通道n的计数器未达到传输数据长度寄存器配置的值,则重复执行步骤2),3),4),否则执行步骤6);
该通道为被动模式的情况下,若仲裁单元未检测到通道n的dma_last_req有效,或DMA控制器未完成当前响应通道本次DMA请求全部的数据传输,则重复执行步骤2),3),4),否则执行步骤6);
6)通道n的数据传输结束,通道n的使能关闭。
在上述技术方案的基础上,在一次数据传输过程中,AHB_master0总线用于对传输源进行读数据,AHB_master1总线用于对传输目的进行写数据。
在上述技术方案的基础上,DMA数据缓存寄存器组用来缓存数据,内部数据流从AHB_master0接口单元到DMA数据缓存寄存器组最后到AHB_master1接口单元,整个内部数据传输过程为3级流水。
在上述技术方案的基础上,在DMA控制器完成一次DMA数据传输时产生一个中断信号用来指示一次传输完毕,或在DMA计数器计数满后产生中断信号用来指示一次传输完毕。
在上述技术方案的基础上,所述DMA控制器包括:
DMA APB接口单元,作为APB总线接口供APB总线从此设备接口对DMA控制器的DMA配置寄存器进行配置,
DMA配置寄存器单元,由通道配置寄存器,源地址寄存器,目的地址寄存器,传输数据长度寄存器以及32个通道完成状态寄存器,32个通道完成状态屏蔽寄存器,32个通道中断屏蔽寄存器组成;所述32个通道为32个DMA通道,32个DMA通道都有各自的通道配置寄存器,源地址寄存器,目的地址寄存器和传输数据长度寄存器,其中每个通道配置寄存器的有效位宽为8位,
DMA数据缓存寄存器组:寄存器组空间为32byte,宽度为32bits,深度为8,且能进行字节写,有两个接口,一个为读口,另一个为写口,在内部分为两片A和B,每片空间为16byte,通过AHB_master0或AHB_master1接口单元的ram_select信号来选择当前对哪片寄存器组操作,
仲裁单元:从当前的32个DMA通道的有效请求中,根据当前响应的通道号,仲裁出下一个响应的一个通道号,连同这个通道对应的 所有配置寄存器单元信息传递给AHB_master0接口单元,并在接收到当前通道的AHB_master0接口单元响应完成信号pahb_ack后,产生对AHB_master0接口单元下一次的请求pahb_req;仲裁单元仲裁的原则是轮询,其仲裁的时间是检测到pahb_ack信号为高电平或者32个通道均无有效请求的空闲状态,每次只有一个输入请求得到响应;检测仲裁单元当前响应的通道的通道配置模式,如果配置为被动模式,则预先配置当前响应通道的数据传输长度无效,同时根据检测当前响应通道的dma_last_req信号是否为高电平,如果为高电平,则表示当前响应的通道只剩最后一次INCR4类型或4个连续SINGLE类型数据需要传输,此时仲裁单元需要使送出的current_last_req信号为高电平,以此信号告知AHB_master0接口单元接下来进行最后一次数据传输,如果仲裁单元当前响应的通道的模式为主动模式或者软件模式,则使输出的current_last_req信号为低电平,
AHB_master0接口单元:AHB_master0接口单元的AHB总线总是对数据源进行操作,即总是进行AHB总线读操作,在检测到仲裁单元发出的pahb_req请求信号后,将即将响应的通道号对应的所有配置寄存器单元信息转换为AHB_master0接口单元的一次INCR4类型或者4个连续的SINGLE类型传输,根据p_ram_select的指示将源地址p_src_addr对应的数据读回到DMA数据缓存寄存器组,并对这个通道读回的数据量进行计数,并在这一次传输完成时产生pahb_ack完成信号,在完成当前响应通道本次DMA请求全部的数据传输时产生dma请求清零信号dma_clr和中断信号dma_int,否则不产生,
AHB_master1接口单元:AHB_master1接口单元的AHB总线总是对数据目的进行操作,即总是进行AHB写操作,每一次选中设备进行一次数据传输也为INCR4类型或者4个连续的SINGLE类型传输,并在这一次数据传输完成时产生qahb_ack完成信号;即在检测到AHB_master0接口单元发出的qahb_req请求信号后,将AHB_master0接口单元提供的与当前响应的通道号对应的数据目的的起始地址,以及目的地址是否增加信号转换为AHB_master1接口单元的AHB总线行 为,根据AHB_master0接口单元提供q_ram_select的值,从DMA数据缓存寄存器组里面读出相应的数据,并通过AHB_master1接口单元的AHB总线写到目的地址q_src_addr对应的地址上去。
本发明所述的基于双AHB Master接口的片上DMA控制器实现方法,以AHB总线为基础,设计了一种基于双AHB Master接口的片上DMA控制器实现方法。双AHB Master接口不仅减少了数据传输的延时,而且只需要较小的内部FIFO;并能同时适用于多层AHB总线系统。对于每个DMA通道添加了流控管理,使每一个通道均可以灵活的工作在三种模式:软件模式、主动模式和被动模式。并且它结构简单,实现方便,因此易于重用到以其它高性能ARM微处理器为基础的SoC设计中。
具体实施方式
以下结合附图对本发明作进一步详细说明。
本发明将DMA控制器设计为一个基本独立于ARM微处理器的AHB总线主设备,能够根据配置寄存器的值,独立的响应AHB从设备发出的DMA请求,更大程度的提高ARM微处理器效率。本发明所述DMA控制器拥有两个AHB Master接口,能够适应总线利用率更高的多层总线系统。其优点在于:双AHB master接口不仅减少了数据传输的延 时,而且仅需要较小的内部FIFO;并能同时适用于多层AHB总线系统,更有效的利用AHB总线带宽。同时对于每个DMA通道添加了流控管理,使每一个通道均可以灵活的工作在三种模式:软件模式、主动模式和被动模式。
本发明的技术方案包括以下几点:
1)DMA控制器有2个AHB master接口,一个是AHB_master0接口,一个是AHB_master1接口。AHB_master0和AHB_master1接口都可以单独作为一层AHB总线的主设备。在一次数据传输过程中,AHB_master0总线用于对传输源进行读数据,AHB_master1总线用于对传输目的进行写数据。
2)DMA控制器提供四种传输数据的通道:存储器到外设;存储器到存储器;外设到存储器;外设到外设。
3)DMA控制器具有32个DMA通道来传送数据。每一个DMA通道只对一个数据源或一个数据目标进行服务,即一对一服务。对于全双工的外设来说发送和接收各需要一个独立的数据通道。对于传输源和传输目的来说,源地址和目的地址可以为递增或者非递增模式;每一个DMA通道支持byte(字节)、half_word(半字)或者word(字)数据传输;支持大、小端数据。
4)每一个DMA通道均可以工作在三种工作模式:软件模式、主动模式和被动模式。每一个通道都由dma_req、dma_last_req和dma_clr三个信号进行握手。
5)DMA控制器有内部FIFO 32bit*8(DMA数据缓存寄存器组)用来缓存数据,内部数据流从AHB_master0接口单元到DMA数据缓存寄存器组最后到AHB_master1接口单元,整个内部数据传输过程为3级流水。每级数据流传输都可以同时进行,因此可减少数据在DMA控制器内部的传输延时。
6)DMA控制器具有APB接口。该接口符合APB总线规范,ARM微处理器可以通过APB接口对DMA控制器的DMA配置寄存器进行配置。
7)DMA控制器中断信号。可以在DMA控制器完成一次DMA数据 传输时产生一个中断信号,也可以在DMA计数器计数满后产生中断信号。这一般用来指示一次传输完毕。可以对DMA控制器的中断信号进行屏蔽。
本发明所述DMA控制器的结构如图1所示。其中:
DMA APB接口单元,作为APB总线接口供APB总线(APB BUS)从此设备接口对DMA控制器的DMA配置寄存器进行配置。
DMA配置寄存器单元,由通道配置寄存器,源地址寄存器,目的地址寄存器,传输数据长度寄存器以及32个通道完成状态寄存器,32个通道完成状态屏蔽寄存器,32个通道中断屏蔽寄存器组成,可采用现有技术实现。DMA控制器开始工作前,首先由ARM微处理器通过APB总线(APB BUS)对每个DMA通道(32个DMA通道)的通道配置寄存器,源地址寄存器,目的地址寄存器,传输数据长度寄存器进行初始化配置,即确定每个DMA通道的使能,工作模式(主动模式,被动模式,软件模式),有效数据宽度(byte,half word,word),数据源的起始地址,数据目的的起始地址,以及传输数据长度。
32个通道(DMA通道)都有各自的通道配置寄存器,源地址寄存器,目的地址寄存器和传输数据长度寄存器,其中每个通道配置寄存器的有效位宽为8位。以通道0(PDCO)的通道配置寄存器为例(其他通道的通道配置寄存器结构与此相同),其结构如表1所示:
表1PDCO通道配置寄存器:
子地址 |
属性 |
标志 |
宽度 |
缺省值 |
0x00 |
RW |
Pdc0_cfg |
32 |
0x000000x0 |
通道配置寄存器各字段和比特定义如下:
DMA数据缓存寄存器组:寄存器组空间为32byte,宽度为32bits,深度为8,可以进行字节写。有两个接口,一个为读口,另一个为写口。这个寄存器组在内部分为两片A和B,每片空间为16byte,通过 AHB_master0或AHB_master1接口单元的ram_select信号来选择(即对应于寄存器组地址的最高位),当前对哪片寄存器组操作。如:当AHB_master0接口单元对A片进行写数据操作时,AHB_master1接口单元可以同时对B片寄存器组进行读操作,这样也提高了DMA控制器数据处理的效率。
仲裁单元:从当前的32个DMA通道的有效请求中,根据当前响应的通道号,仲裁出下一个响应的一个通道号,连同这个通道对应的所有配置寄存器单元信息传递给AHB_master0接口单元。并在接收到当前通道的AHB_master0接口单元响应完成信号pahb_ack(脉冲信号)后,产生对AHB_master0接口单元下一次的请求pahb_req(脉冲信号)。仲裁单元仲裁的原则是轮询,其仲裁的时间是检测到pahb_ack信号为高电平或者32个通道均无有效请求的空闲状态,每次只有一个输入请求得到响应。32个通道的输入请求分别为R0(对应通道0),R1,R2,...,R31,初始状态下规定32个输入请求被仲裁单元响应的优先级顺序为:R0>R1>R2>...>R31。假设当前仲裁单元仲裁的结果是Rm(0≤m<31)被响应,则下一次轮询优先顺序为:Rm+1>Rm+2>...,例如:当m=0时,则下一次轮询优先顺序为R1>R2>...>R31>R0,当m=2时,则下一次轮询优先顺序为R3>R4>...>R31>R0>R1>R2,当m=11时,则下一次轮询优先顺序为R12>R13>...>R31>R0>R1>R2...>R11。即将Rm以及在初始状态中优先级高于Rm的所有输入请求作为一个整体(内部优先级不变),将R0~Rm的优先级调整到Rm+1,Rm+2,...,R31之后。若当前m的取值为31则下一次轮询的优先顺序为R0>R1>R2>...>R31。
检测仲裁单元当前响应的通道的通道配置模式,如果配置为被动模式,则预先配置当前响应通道的数据传输长度无效,同时根据检测当前响应通道的dma_last_req信号是否为高电平,如果为高电平,则表示当前响应的通道只剩最后一次INCR4类型或4个连续SINGLE类型数据需要传输,此时仲裁单元需要使送出的current_last_req信号为高电平,以此信号告知AHB_master0接口单元接下来进行最后 一次数据传输。如果仲裁单元当前响应的通道的模式为主动模式或者软件模式,则使输出的current_last_req信号为低电平。仲裁单元输入输出信号的时序如图2所示。
图2中各种信号的意义如下:
1、hclk:输入到DMA控制器的时钟信号。
2、dma_req[31:0]:DMA控制器32个通道各自的输入请求信号。0bit代表通道0。
3、dma_last_req[31:0]:仅在被动模式下有效,表示DMA控制器32个通道各自的还有最后一批数据需要传输的请求信号,0bit代表通道0。
4、current_num[6:0]:仲裁单元指示AHB_master0接口单元当前需要处理的通道号。0-31分别对应0-31号通道。为63时表示当前没有通道请求,为空闲状态。
5、pahb_req:仲裁单元根据有效的dma_req或dma_last_req请求产生对AHB_master0接口单元的请求信号。
6、current_last_req:仲裁单元以此信号告知AHB_master0接口单元接下来进行最后一批数据传输。
7、p_ram_select:AHB_master0接口单元读回数据后缓存到哪一片寄存器组。初始化时,该信号为低电平,表示AHB_master0接口单元总线读回的数据缓存到A片寄存器组。当检测到pahb_ack信号为高电平时,进行翻转。下次AHB_master0接口读回的数据将缓存到B片寄存器组。
8、p_src_addr:AHB_master0接口单元当前响应通道的源地址。
9、pahb_size:AHB_master0接口单元当前响应通道的数据宽度。
10、pahb_ack:AHB_master0接口单元完成当前需要响应的通道号(current_num[6:0])的数据传输时,给出的完成信号。
AHB_master0接口单元:AHB_master0接口单元的AHB总线总是对数据源进行操作,即总是进行AHB总线读操作。在检测到仲裁单元 发出的pahb_req请求信号后,将即将响应的通道号对应的所有配置寄存器单元信息转换为AHB_master0接口单元的AHB总线信号,根据p_ram_select的指示将源地址p_src_addr对应的数据读回到DMA数据缓存寄存器组,并对这个通道读回的数据量进行计数(data_count)。在完成当前响应通道本次DMA请求全部的数据传输时,产生dma请求清零信号dma_clr和中断信号dma_int。请求清零信号与中断信号的产生原则为:先检测AHB_master0接口单元响应的通道工作模式。如果为被动模式,则检测current_last_req信号是否为1,如果为1(或者检测该通道的内部data_count[15:0]计数器是否满为FFFF),此时DMA控制器完成当前响应通道本次DMA请求全部的数据传输,则产生相应的dma_clr信号和dma_int信号(同时置该DMA通道的配置pdc_en为低,并保留当前产生的中断通道号到配制寄存器)。否则DMA控制器未完成当前响应通道本次DMA请求全部的数据传输,不产生dma_clr信号和dma_int信号。如果不为被动模式,则检测data_count计数器是否等于该通道的传输数据长度寄存器值,如果等于,此时DMA控制器完成当前响应通道本次DMA请求全部的数据传输,则产生相应的dma_clr信号(清零dma_req和dma_last_req)和dma_int,否则不产生。
AHB_master0接口单元支持的AHB总线传输协议为AMBA 2.0的子集。为了简化设计,AHB_master0接口单元的AHB传输规定,每一次选中设备进行一次数据传输为INCR4类型或者4个连续的SINGLE类型传输,并在这一次数据传输完成时产生pahb_ack完成信号。AHB_master0接口单元输入输出信号的时序如图3所示。
图3中各种信号的意义如下(部分信号已在图2中出现过,其含义相同,不再说明了):
1、p_src_inc_enable:AHB_master0接口单元当前响应通道的传输源地址是否增加。
2、phaddr[31:0]:AHB_master0接口单元的AHB总线地址信号。
3、phrdata[31:0]:AHB_master0接口单元的AHB总线读数据信 号。
4、mem_addr:DMA数据缓存寄存器组地址信号。
5、mem_wda:DMA数据缓存寄存器组写数据信号。
6、hready:AHB_master0接口单元的AHB总线ready信号。
7、q_ram_select:指示AHB_master1接口单元读DMA数据缓存寄存器组的哪一片。其值与当前AHB_master0接口单元已经完成的一次INCR4类型或者4个连续的SINGLE类型传输中,指示将从源地址读回的数据存储到DMA数据缓存寄存器组哪一片的p_ram_select值保持一致。
8、qahb_req:AHB_master0接口单元根据DMA数据缓存寄存器组中有效的数据产生对AHB_master1接口单元的请求信号。
9、q_src_inc_enable:AHB_master1接口单元当前响应通道的传输目的地址是否增加。
10、qahb_size[1:0]:AHB_master1接口单元当前响应通道的数据宽度。
11、q_src_addr[31:0]:AHB_master1接口单元当前响应通道的目的地址。
12、qahb_ack:AHB_master1接口单元完成当前需要响应的通道号的数据传输时,给出的完成信号。
AHB_master1接口单元:AHB_master1接口单元的AHB总线总是对数据目的进行操作,即总是进行AHB写操作。每一次选中设备进行一次数据传输也为INCR4类型或者4个连续的SINGLE类型传输,并在这一次数据传输完成时产生qahb_ack完成信号。即在检测到AHB_master0接口单元发出的qahb_req请求信号后,将AHB_master0接口单元提供的与当前响应的通道号对应的数据目的的起始地址,以及目的地址是否增加信号转换为AHB_master1接口单元的AHB总线行为。根据AHB_master0接口单元提供q_ram_select的值,从DMA数据缓存寄存器组里面读出相应的数据,并通过AHB_master1接口单元 的AHB总线写到目的地址q_src_addr对应的地址上去。AHB_master1接口单元输入输出信号的时序如图4所示。
图4中各种信号的意义如下(部分信号已在图3中出现过,其含义相同,不再说明了):
1、mem_addrb:DMA数据缓存寄存器组读地址信号。
2、mem_rdb:DMA数据缓存寄存器组读数据信号。
3、qhaddr[31:0]:AHB_master1接口单元的AHB总线地址信号。
4、qhwdata[31:0]:AHB_master1接口单元的AHB总线写数据信号。
如上所述,本发明所述的基于双AHB Master接口的片上DMA控制器的实现方法中:
DMA配置寄存器单元:在DMA控制器开始工作前,由ARM微处理器通过APB总线对DMA控制器中的DMA配置寄存器单元进行初始化配置。
DMA数据缓存寄存器组:用来缓存数据,内部数据流为3级流水。可减少数据传输延时。
仲裁单元:当前DMA控制器的32个DMA通道的有效请求为两个或两个以上时,仲裁单元决定由哪个通道进行数据传输工作。
AHB_master0接口单元:AHB_master0接口单元的AHB总线总是对数据源进行操作,即总是进行AHB总线读操作。
AHB_master1接口单元:AHB_master1接口单元的AHB总线总是对数据目的进行操作,即总是进行AHB总线写操作。
这种基于双AHB Master接口的片上DMA控制器的数据传输过程的实现方法可以具体分为以下几个步骤:
步骤1,ARM微处理器通过APB总线对DMA控制器中的DMA配置寄存器单元进行初始化配置(即对32个通道下配置)。所述配置的具体过程详见上述。
步骤2,DMA控制器等待出现的DMA请求信号dma_req(主动模 式,被动模式,软件模式均有效)或dma_last_req(仅在被动模式下有效),在dma_req对应的通道的使能有效的情况下,根据有效的请求信号DMA控制器的仲裁单元仲裁出当前需要响应的通道号current_num[6:0],并同时产生pahb_req信号和current_last_req,给AHB_master0接口单元,所述信号的具体产生过程详见上述。如果没有请求则继续等待执行步骤2。
步骤3,当AHB_master0接口单元在pahb_req信号为高的情况下,得到仲裁单元仲裁出的通道号后,根据这个通道号对应通道的配置信息,所述对应通道的配置信息包括:对应通道的工作模式,有效数据宽度,数据源的起始地址,数据目的的起始地址,以及传输数据长度,将其转变为一次INCR4(循序位址增加)类型或4个连续SINGLE(单次)类型的AHB_master0的AHB总线信号,根据p_ram_select的指示将从源地址读回的数据存储在DMA数据缓存寄存器组中,并对这个通道读回的数据量进行计数(data_count)。每次INCR4类型或者4个连续SINGLE类型的传输完成时产生pahb_ack完成信号,给仲裁单元。同时将产生的qahb_req信号、该通道的配置信息以及数据存储的位置q_ram_select(即DMA数据缓存寄存器组的哪一片)传递给AHB_master1接口单元。
步骤4,AHB_master1接口单元在qahb_req信号为高的情况下,获得AHB_master0接口单元传递的信息后,将其转变为一次INCR4类型或4个连续SINGLE类型的AHB_master1的AHB总线信号,根据q_ram_select的指示从DMA数据缓存寄存器组里面读出相应的数据,并通过AHB_master1接口单元的AHB总线写到目的地址上去。每次INCR4类型或者4个连续SINGLE类型的传输完成时产生qahb_ack完成信号,给AHB_master0接口单元。
步骤5,若DMA控制器完成当前响应通道本次DMA请求全部的数据传输,AHB_master0接口单元同时将该通道对应的DMA中断信号dma_int和DMA请求清零信号dma_clr信号拉高,并用dma_clr信号清零对应通道的外设或内存RAM发出的dma_req,使其不参加下一次 的仲裁;DMA配置寄存器单元在检测到中断信号dma_int时,将对应的通道的通道完成状态寄存器置高,对应通道的使能信号关闭,此时表示该通道的请求响应完成,跳到步骤7;若DMA控制器未完成当前响应通道本次DMA请求全部的数据传输,则跳到步骤6;
步骤6,当DMA控制器未完成当前响应通道本次DMA请求全部的数据传输,则不作任何信号调整,直接跳转到步骤2,此时该通道对应的DMA请求信号dma_req或dma_last_req依然有效,与其它未被DMA控制器响应的有效通道请求一起参与仲裁单元的下一次仲裁。
步骤7,ARM微处理器通过APB总线对DMA控制器中,已完成本次DMA请求全部数据传输的当前响应通道的配置寄存器单元(源地址寄存器,目的地址寄存器,传输数据长度寄存器)进行重新配置,并重新打开当前响应通道的使能信号后跳到步骤2。
进一步,这种基于双AHB master接口的片上DMA控制器内部有32个通道,其中每次DMA控制器数据传输只响应其中一个通道,每个通道的实现方法相同,即都按上述步骤1~7处理数据。
进一步,当DMA控制器未完成当前响应通道n全部的数据传输时,n=0,1,2……31,其后续数据传输过程如下:
1)在DMA控制器通道n开始数据传输之前,ARM微控制器通过APB总线对通道n的通道配置寄存器,源地址寄存器,目的地址寄存器,传输数据长度寄存器进行相应配置,并打开通道n的使能信号。
2)仲裁单元根据仲裁原则确定响应通道n。
3)AHB_master0接口单元将根据通道n的源地址寄存器发出相应的一次INCR4类型或者4个连续SINGLE类型的传输地址及控制信号(当这个通道号对应的通道配置寄存器中P_src_inc_enable的值为1,则以前该通道号对应的源地址P_src_addr为起始地址,转变为一次INCR4类型的AHB总线传输;若P_src_inc_enable的值为0,则同样以P_src_addr为起始地址转变为4个连续SINGLE类型的AHB总线传输)。将从源地址读回数据,存到DMA数据缓存寄存器组。并对读回的数据量按字节进行计数(data_count)。并在DMA控制器完 成通道n本次DMA请求全部的数据传输时产生通道n请求的清零信号dma_clr和中断信号dma_int(所述信号的具体产生过程详见上述)。同时将该通道的配置信息(工作模式,有效数据宽度,数据源的起始地址,数据目的的起始地址,以及传输数据长度)以及数据存储的位置q_ram_select(即DMA数据缓存寄存器组的哪一片)传递给AHB_master1接口单元。
4)AHB_master1接口单元将根据通道n的目的地址寄存器(P_des_addr)发出相应的一次符合AHB总线要求的INCR4类型或者4个连续SINGLE类型的传输地址及控制信号(当这个通道号对应的通道配置寄存器中P_dst_inc_enable的值为1,则以前该通道号对应的源地址P_des_addr为起始地址,转变为一次INCR4类型的AHB总线传输;若P_dst_inc_enable的值为0,则同样以P_des_addr为起始地址转变为4个连续SINGLE类型的AHB总线传输)。同时根据q_ram_select信号的指示将从DMA数据缓存寄存器组读出的数据,写到相应的目的地址上。
5)该通道为主动模式或软件模式的情况下:若通道n的计数器(data_count)未达到传输数据长度寄存器配置的值,即DMA控制器未完成当前响应通道本次DMA请求全部的数据传输,则重复执行步骤2),3),4),否则执行步骤6)。
该通道为被动模式的情况下,若仲裁单元未检测到通道n的dma_last_req有效,或DMA控制器未完成当前响应通道本次DMA请求全部的数据传输,则重复执行步骤2),3),4),否则执行步骤6)
6)通道n的数据传输结束,通道n的使能关闭。