DMA在实时图像处理中的应用
cecontrolregister=0x02000000
Destinationcontrolregister=0x80000000
其中主控寄存器各控制域设置与意义如下:
DSTRELOAD=00无目标地址重载
SRCRELOAD=00无源地址重载
EMOD=0
FS=0无帧同步
TCINT=1允许中断
PRI=1DMA优先
WSYNC=00000无读同步
RSYNC=000无写同步
RSYNC=00无写同步
FRAMECOUNT=0X000
ELEMENTCOUNT=0X0400
INDEX=0全局计数重载寄存器A
CNTRELOAD=0全局计数重载寄存器A
SPLIT=00无分裂地址
ESIZE=00数据单元4BYTES
DSTDIR=11索引寄存器方式
SRCDIR=01地址递增
STATUS=00此位只读
START=00DMA停止
在主控寄存器的START读中写入01b就可以开始DMA的传输。
3.2数据重排
往往数据的格式并不符合运算的要求。在这种情况下,可以通过DMA进行数据重新排列,以满足运算的要求。数据重排主要是利用DMA的帧传输方式。数据重排所必需的、最关键的一步是设置全局寄存器,所以,以下讨论的重点就是全局寄存器的设置。
3.2.1求矩阵转置
图2显示了将一个位于外存16bit的连续数据区,开始地址(0x02000000),数据重排并移至片内存储区,首地址为(0x80000000)前后的排列情况。
在数据重排中,主要是正确
设置全局索引寄存器。在这里,可以将1帧看作1个数组,那么数据单元就是数组的元素。因此,如果假设共有F×E的矩阵,即有F帧数据,每帧E个数据单元,每个元素为S(Byte),重排为E×F的矩阵。在这种情况下,源地址递增,目标地址根据全局索引寄存器的值进行调整。在帧内相邻的数据单元传输时,目标地址偏移应为F×S,所以传输完1帧后的地址总偏称为(E-1)×F,因此,下一帧的第1个数据单元地址为在当前的地址减去((E-1)×F-1)×S。也就是说,
*FRAMEINDEX应设为-((E-1)×F-1)×S
*ELEMENTINDEX应设为F×S
在上例中寄存器的设置为:
*FRAMEINDEX=-((2-1)×4-1)×2=0xFFEE
*ELEMENTINDEX=4×2=8
因此,寄存器设置如下:
Primarycontrolregister=0x030001D0
Transfercontrolregister=0x00040002
Sourcecontrolregister=0x0200 《DMA在实时图像处理中的应用(第3页)》
本文链接地址:http://www.oyaya.net/fanwen/view/168593.html
Destinationcontrolregister=0x80000000
其中主控寄存器各控制域设置与意义如下:
DSTRELOAD=00无目标地址重载
SRCRELOAD=00无源地址重载
EMOD=0
FS=0无帧同步
TCINT=1允许中断
PRI=1DMA优先
WSYNC=00000无读同步
RSYNC=000无写同步
RSYNC=00无写同步
FRAMECOUNT=0X000
ELEMENTCOUNT=0X0400
INDEX=0全局计数重载寄存器A
CNTRELOAD=0全局计数重载寄存器A
SPLIT=00无分裂地址
ESIZE=00数据单元4BYTES
DSTDIR=11索引寄存器方式
SRCDIR=01地址递增
STATUS=00此位只读
START=00DMA停止
在主控寄存器的START读中写入01b就可以开始DMA的传输。
3.2数据重排
往往数据的格式并不符合运算的要求。在这种情况下,可以通过DMA进行数据重新排列,以满足运算的要求。数据重排主要是利用DMA的帧传输方式。数据重排所必需的、最关键的一步是设置全局寄存器,所以,以下讨论的重点就是全局寄存器的设置。
3.2.1求矩阵转置
图2显示了将一个位于外存16bit的连续数据区,开始地址(0x02000000),数据重排并移至片内存储区,首地址为(0x80000000)前后的排列情况。
在数据重排中,主要是正确
设置全局索引寄存器。在这里,可以将1帧看作1个数组,那么数据单元就是数组的元素。因此,如果假设共有F×E的矩阵,即有F帧数据,每帧E个数据单元,每个元素为S(Byte),重排为E×F的矩阵。在这种情况下,源地址递增,目标地址根据全局索引寄存器的值进行调整。在帧内相邻的数据单元传输时,目标地址偏移应为F×S,所以传输完1帧后的地址总偏称为(E-1)×F,因此,下一帧的第1个数据单元地址为在当前的地址减去((E-1)×F-1)×S。也就是说,
*FRAMEINDEX应设为-((E-1)×F-1)×S
*ELEMENTINDEX应设为F×S
在上例中寄存器的设置为:
*FRAMEINDEX=-((2-1)×4-1)×2=0xFFEE
*ELEMENTINDEX=4×2=8
因此,寄存器设置如下:
Primarycontrolregister=0x030001D0
Transfercontrolregister=0x00040002
Sourcecontrolregister=0x0200 《DMA在实时图像处理中的应用(第3页)》