19.2
DMAC模块框图分析

19.2.1
DMAC激活源
软件触发、来自外设模块的中断请求和外部中断请求都可以指定为DMAC激活源。DMAC激活源是在DMTMD寄存器的DCTG[1:0]位进行设置。
19.2.1.1
通过软件激活DMAC
我们可以选择通过软件启动DMA进行传输,也就是不使用片上外设模块和外部中断的中断请求进行激活DMAC,而是手动地激活DMA进行传输。
19.2.1.2
通过来自片上外设模块或外部中断的中断请求激活DMAC
除了通过软件手动激活DMAC,还可以通过片上外设模块的中断请求或外部中断请求激活DMAC。
我们可以将片上外设模块的中断请求和外部中断请求设置为DMAC的激活源。可以通过ICU的DELSRn寄存器的DELS[8:0]位(n=0~7)为每个通道单独选择激活源。
19.2.2
中断优先级
当存在多个DMA传输请求时,DMAC确定具有DMA传输请求的通道的优先级。通道优先级固定如下:通道0>通道1>通道2>通道3…>通道7(通道0:优先级最高)
当在数据传输期间产生DMA传输请求时,在最终数据已传输之后开始通道仲裁,并且开始优先级较高的通道的DMA传输。
19.2.3
事件链接
每个DMAC通道在每次完成数据传输或块传输模式下的块传输时,都会输出一个事件链接请求信号 (DMACn_INT)。当传输目的地是外部总线时,在写入缓冲区操作被接受时会产生一个事件链接请求信号。有关详细信息,可以查看事件链接控制器 (ELC)章节。如果写入传输的最后数据时发生总线错误,则会发生传输结束事件和错误响应检测中断(DMA_TRANSERR)。
19.3
DMAC传输模式
DMAC有4种传输模式:
正常模式(Normal Mode):在正常模式下,DMAC通道每次接收到配置的激活源时都会传输单个数据单元。数据单元可以是1字节、2字节或4字节。在每次传输之后,源地址和目的地址可以是固定、递增、递减,或者向下一个数据单元添加偏移量。16位计数器在每次传输后递减。当计数器达到0时,传输将不再由激活源触发,并且可以发出所有传输已完成的信号以中断CPU。
重复模式(Repeat Mode):重复模式的工作方式与正常模式相同,但长度限制为范围[1,1024]内的整数。当传输计数器达到0时,计数器被重置为其配置值,重复区域(源或目的地址)被重置到其起始地址,剩余的块计数将递减1。当块计数达到0时,传输将不再由激活源触发,并且可配置传输完成中断。
块模式(Block Mode):在块模式下,每个中断传输的数据单元量可以设置为范围[1,1024]内的整数。还可以将要传输的块数配置为16位数字。每次块传输后,重复区域(源或目的地址)将重置为原始地址,而另一个地址将递增或递减到下一个块。
重复-块模式(Repeat-Block Mode):在重复-块模式下,每个中断传输的数据单元量可以设置为范围[1,1024]内的整数。可以将要传输的块的数量配置为16位数字(最大可设置重复大小为 64K,即65536)。
如果目标地址模式为偏移模式,则数据传输大小为字节的块大小(长度)的最大可配置块数为 0xFFFF,数据传输大小为半字的块大小为 0x7FFF,数据大小为字的块大小为0x3FFF。在每个块传输之后,源地址和目的地址将递增或递减到下一个块地址。
对于源地址的偏移地址模式,源地址大小是源缓冲区的总大小,之后源区域被翻转,块大小可以小于源缓冲区大小。对于源地址模式作为偏移模式,最大可配置的源缓冲区大小为0xFFFF用于一个字节的传输数据大小,0x7FFF用于半字的传输数据大小和0x3FFF用于字的传输数据大小。
采用重复-块模式可以实现单环形缓冲区到多环形缓冲区的传输类型设计。
19.3.1
正常传输模式
在正常传输模式(Normal Transfer Mode)下,一个传输请求传输一个数据。使用DMCRAL寄存器可以将最大65535设置为传输操作数。当这些位设置为0x0000时,不设置特定数量的传输操作;在传输计数器停止的情况下执行数据传输(自由运行功能)。在正常传输模式下,设置DMCRB寄存器无效。除自由运行功能外,在完成指定数量的传输操作后,可以生成传输结束中断请求。
表1:正常传输模式下的寄存器更新操作


19.3.2
重复传输模式
在重复传输模式(Repeat Transfer Mode)下,发起一次传输请求,传输一个数据。
通过设置DMCRA寄存器,最多可以将1K数据设置为总重复传输大小;通过设置DMCRB寄存器可以将最大64K设置为重复传输操作次数。
所以,我们可以将最大64M数据(1K数据×64K重复传输操作计数)设置为总数据传输大小。
可以将传输源地址或传输目的地址设置为重复区域。当指定重复大小数据的传输完成时,DMAC将会把重复区域的地址重新设置为传输开始地址,也就是一个循环的过程。
当完成指定的重复传输次数后,可以产生传输完成中断;当每完成一次循环的过程都可以产生一次中断。
通过将DMCNT寄存器的DTE位置1,可以恢复DMA传输。
在完成指定数量的重复传输操作后,可以生成传输结束中断请求。

19.3.3
块传输模式
在块传输模式下(Block Transfer Mode),单个块数据通过一个传输请求传输。
使用DMCRA寄存器,最多可以将1K数据设置为总块传输大小。
使用DMCRB寄存器可以将最大64K设置为块传输操作数;因此,可以将最大64M数据(1K数据×64K 块传输操作计数)设置为总数据传输大小。
可以将传送源或传送目的地指定为块区域。当单个块数据的传输完成时,指定块区域(DMSAR或 DMDAR)的地址返回到传输开始地址。当单块数据在块传输模式下全部传输完毕时,可停止DMA传输,并可请求重复大小结束中断。通过将1写入重复大小结束中断处理中的DMCNT.DTE位,可以恢复DMA传输。
传输结束中断请求可以在完成指定数量的块传输操作后生成。

19.3.4
重复-块传输模式
重复-块传输模式(Repeat-Block Transfer Mode),主要在块模式基础上增加了一些功能:
重复功能:添加功能(环形缓冲区)以重复指定的地址区域。
偏移功能:可以在一个块传输中指定具有偏移的多个区域。
重复功能和偏移功能可用于重复块传输的传输源和传输目的地。
在重复块传输模式下,单个块数据通过一个传输请求传输。
使用DMACn的DMCRA可以将最多1K数据设置为总的块传输大小。使用DMACn的DMCRB的块传输操作的数量可以设置为最大64K;因此,可以将最大64M数据(1K数据×64K块传输操作计数)设置为总数据传输大小。
下图是在重复-块传输模式下的示例

下图是在重复-块传输模式下,带偏移增加的示例


全部0条评论
快来发表一下你的评论吧 !