1.CPU仲裁
DMA典型特性是其与CPU操作是相互独立的。当DMA和CPU同时通过同一接口尝试访问存储器或外设寄存器时,就需要一个仲裁流程。但也有例外的情况,当CPU和DMA同时读访问映射到PF0的ADC模块寄存器时,并不产生冲突,甚至CPU和DMA同时访问不同的地址也不会产生冲突。当CPU和DMA访问的是不同的接口,或CPU访问的接口是DMA访问接口的外部时均不会产生冲突。
会产生冲突的接口有:XINTF存储器区域0,6,7、L4~L7 RAM、外设帧3(McBSP-A,McBSP-B,ePWM1~6/HRPWM1~6)。
(1)外部存储器接口(XINTF)区域
●若CPU和DMA在同一个周期试图访问XINTF空间时,DMA将首先被响应,之后才是CPU访问。(CPU访问的优先级顺序为写→读→获取)。
●若CPU访问的XINTF空间正处于悬挂状态或正在被XINTF处理,而此时DMA也试图访问此空间,则DMA访问将暂停直至所有悬挂的CPU访问结束。例如,若CPU写和读访问已处于悬挂,且取操作正在处理中,则首先完成取操作后,再开始执行CPU写,然后CPU读,最后才是DMA访问。
●若CPU和DMA同时试图进行写操作,则将会产生一个时钟的暂停。若用DMA或CPU向XINTF空间进行写数据,则XINTF的写缓冲器可以避免CPU或DMA的暂停。若CPU或DMA从XINTF空间读取数据,则会产生暂停。需要注意的是如果DMA暂停,则可能会丢失其他更高优先级的事件(如响应ADC事件),在这些情况下,不能用DMA传送XINTF中的数据,因为DMA可能因暂停而丢失其他事件。
●若DMA正在访问XINTF空间,且DMA操作被暂停(XREADY无响应),则CPU可以发出“硬件复位”命令终止访问。“硬件复位”相当于对DMA系统进行复位。同样,XINTF部分也要施加一“硬件复位”以使外设从未就绪的状态中释放出来。任何写入到缓冲器、XINTF或DMA中未处理的数据都将因复位而丢失。
(2)其他外设/存储器
●若CPU和DMA同时访问同一个接口,则DMA有优先权,CPU将暂停。
●若CPU正在访问某接口,并且这一接口还有另外一个来自CPU的访问处于悬挂状态,例如,CPU正在进行写操作,而另一个来自CPU的读操作处于悬挂状态,若此时还有一个来自DMA对同一接口的访问,则在当前CPU写操作结束后,DMA比处于悬挂状态的CPU读操作有优先权。(www.xing528.com)
●若CPU正在执行“读-修改-写”操作,而DMA欲向同一地址进行写操作,如果DMA写操作发生在CPU读和CPU写操作之间,则DMA写操作可能会丢失。因此建议不要把该类CPU和DMA对同一地址的访问混在一块。
在访问RAM时,“乒—乓”配置可以避免CPU和DMA同时访问同一RAM区域,因而避免了暂停和冲突。
2.通道优先级
在确定通道优先级时,有两种模式:循环模式和通道1高优先级模式。
(1)循环模式
在这种模式下,所有通道都享有平等的优先级,每个使能通道按照循环的方式被响应(CH1→CH2→CH3→CH4→CH5→CH6→CH1→CH2→…)。当前通道传送完数据字节后,下一通道才被响应。用户可以定义每一通道传送数据的长度。CH6(或最后被使能的通道)被响应后且没有其他通道处于悬挂状态,循环状态机将进入空闲状态。退出空闲状态时,总是先响应CH1(若通道1被使能)。尽管如此,若DMA当前正在服务某一个通道CHx,其他悬挂的位于x和该循环最后一通道之间的通道都将在CH1之前被服务。例如,假设所有通道都被使能,DMA处于空闲状态;CH1、CH3、CH5在同一周期初始化触发源;当CH1开始传送数据时,CH3、CH5处于悬挂状态;CH1完成数据传送前,DMA接到来自CH2的请求,此时悬挂请求分别来自CH2、CH3和CH5;CH1完成数据传送后,先响应CH2的请求,CH2完成数据传送后,再响应CH3,之后再是CH5;若CH5正在被服务时,DMA又接收到了来自CH1、CH3、CH6的请求;在CH5服务结束后,CH6才开始传输数据,因为在循环模式下,CH6服务顺序位于CH5之后;CH6服务结束后,再服务CH1,之后再是CH3;在CH3服务结束后,若没有其他触发源产生,则循环状态机将进入空闲状态。通过DMAC- TRL[PRIORITYRESET]位可将循环状态机复位到空闲状态。
(2)通道1高优先级模式
在这种模式下,若CH1触发事件发生,则其他任何通道的当前字传送完毕后(不是整个数据帧的数据都传送完成),该通道的操作将暂停,CH1将被服务传送数据。当CH1的全部数据传送完毕后,操作将返回到CH1触发事件产生时有效的那个通道。其他所有通道享有平等的优先级,且每一使能的通道都按照循环方式被服务。高优先级为CH1;低优先级为CH2→CH3→CH4→CH5→CH6→CH2→…。
举例来说,若在CH1高优先级模式下使能CH1、CH4、CH5,且假设CH4正在被服务。若在CH4传送结束之前,CH1和CH5同时从各自的外设接收到中断触发事件,则CH1和CH5将处于悬挂状态。当CH4中当前字传送结束后,无论DMA是否完全传送CH4中的整个数据帧,CH4操作都将暂停并且开始服务CH1。CH1服务结束后,CH4将继续操作。在CH4服务结束后,CH5开始被服务。在CH5服务结束后,若没有其他通道处于悬挂状态,循环状态机将进入空闲状态。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。