>
块移动
块移动能够将1块连续数据块从一个地址传输到另一个地址,通常用于将数据或程序从外部存储器移到内部存储器。这种块移动是最简单、最常见的dma工作方式。例如,将1块1k连续的32位数据块从外存(0x02000000)移动至内存(0x80000000),如图1所示。
相关寄存器的值设置:
primary control register =0x00000050
transfer control register =0x00000400
source control register =0x02000000
destination control register =0x80000000
其中主控寄存器各控制域设置与意义如下:
dst reload =00 无目标地址重载
src reload =00 无源地址重载
emod =0
fs =0 无帧同步
tcint =1 允许中断
pri =1 dma优先
wsync =00000 无读同步
rsync =000 无写同步
rsync =00 无写同步
frame count =0x000
element count =0x0400
index =0 全局计数重载寄存器a
cnt reload =0 全局计数重载寄存器a
split =00 无分裂地址
esize =00 数据单元4bytes
dstdir =11 索引寄存器方式
srcdir =01 地址递增
status =00此位只读
start =00 dma停止
在主控寄存器的start读中写入01b就可以开始dma的传输。
3.2 数据重排
往往数据的格式并不符合运算的要求。在这种情况下,可以通过dma进行数据重新排列,以满足运算的要求。数据重排主要是利用dma的帧传输方式。数据重排所必需的、最关键的一步是设置全局寄存器,所以,以下讨论的重点就是全局寄存器的设置。
3.2.1 求矩阵转置
图2显示了将一个位于外存16bit的连续数据区,开始地址(0x02000000),数据重排并移至片内存储区,首地址为(0x80000000)前后的排列情况。