TMS320DM642的EDMA控制器提供了一种更为灵活的传输机制,称为“链接”(LINK),可以将不同的EDMA传输参数组连接起来,组成一个传输链,为同一个通道服务。在传输链中,一个传输的结束会导致自动从参数RAM中装载下一次传输需要的事件参数。这一功能将给某些应用带来很大的方便,如复杂的排序、循环缓冲等应用,而且这种数据传输都可以不需要CPU的参与。EDMA传输参数的链接如图3-18所示。
图3-18 EDMA传输参数的链接
链接由EDMA参数RAM中的16位链接地址和LINK位进行控制。LINK位决定链接的使能,链接地址用来指向传输链中下一个传输采用的参数组。链接地址只有在LINK=1时,并且只有当事件参数已经失效后才起作用。当EDMA控制器完成了当前申请的整个传输后,也就意味着事件参数的失效。被链接的传输的数目并没有限制,只是传输链中最后一组传输参数的设置中必须LINK=0,以结束整个传输链。
一旦某个事件的链接条件被满足,链接地址指向的传输多数会被加载到该事件对应的EDMA参数组空间中,然后就可以开始新的EDMA传输了。为了尽量减少参数重装载机制下可能的时间延迟,EDMA控制器在这期间不会查看事件寄存器,但这并不影响这段时间中出现的事件被正常地捕获到ER中,在完成参数重载后,可以再对其进行处理。
所有的EDMA通道事件的传输最终都是链接到一个空的参数,从而结束该通道的数据传输。所谓空的参数,就是所有的参数都为0。空的参数只需要一个,所有的其他非空参数最终都直接链接到空参数的地址。
链接地址只有在LINK=1时,并且只有当事件参数已经失效后才会起作用。当EDMA控制器完成了当前请求的整个传输后,就意味着事件参数失效。表3-20是参数链接时通道完成的条件。被连接的传输的数目并没有限制,只是在传输链中最后一组传输参数的设置中必须使LINK=1,以结束整个传输链。
表3-20 链接传输时通道完成条件(www.xing528.com)
EMDA的链接(Linking)不同于通道链接(Chaining)。通道链接是某一个通道完成自身的数据传输结束后,可以触发另外一个通道的启动,从而实现通道到通道的连接。而EDb-MA的链接是同一个通道参数的重载。
当一个通道的数据传输结束后,用户可以编写结束代码提交到EDMA控制器,当ED-MA控制器收到结束代码后,将中断标志寄存器的相应位置1(如果结束代码为xx,则将xx位置1)。如果中断使能寄存器的该位被使能,则产生一个EDMA中断到CPU。一般情况下,每个通道的结束代码为其本身。对于TMS320C621x/671x系列DSP,结束代码为0~15,对于TMS320C64x系列DSP,结束代码为0~63。结束代码具有高度的可编程性,用户可以任意设置传输代码,例如,将通道1的结束代码设置成5,也可以将几个通道的结束代码设置成一个值,这样,多个通道的结束代码就一致,产生同一个中断。反之,一个通道在不同的时刻可以有不同的结束代码,从而进一步增加程序的灵活性。
当EDMA通道传输结束后,EDMA控制器按照设定的TCC值,将CIPR中的相应位置为1。DSP的中断服务程序需要读CIPR,判断是否有通道事件发生,以及是哪一个事件,然后进行相应的操作。在中断服务程序中,还需要手工清除CIPR中的中断标志,以保证可以识别以后发生的中断。
有4个传输结束代码(TCC=8、9、10、11)还具有一个特殊功能,就是可以用来触发EDMA通道8~11的传输。这样做的目的,是使用户可以利用某一个外设产生的事件,将多个不同的EDMA通道的传输操作链接起来。只有事件8~11支持这种多个通道间启动的链接。但是,并不是说用户设定TCC=8~11就一定会启动通道8~11的传输。为了使能EDMA控制器利用一个事件触发多个通道的链接传输,不但TCINT必须置为1,同时,通道链接使能寄存器(CCER)中相应的位也需要置为1。CCER的值不影响ER对事件8~11的捕获。
例如,假设EDMA通道4的TCC=1000b,CCER[8]=1,外部中断EXT_INT启动EDMA传输。当通道4完成传输后,就会产生同步事件8,促使EDMA控制器启动下一个通道(通道8)的传输(假设TCINT=1)。通道4的传输结束时,会将CIER中的第8位置为1,如果CIER[8]=1,则会向DSP的CPU发出中断EDMA_INT。如果不需要中断,则设置CIER[8]=0;如果不需要连接启动通道8的传输,则设置CCER[8]=0。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。