注册会员
- 积分
- 40
- 威望
- 32
- 贡献
- 6
- 兑换币
- 5
- 注册时间
- 2013-5-20
- 在线时间
- 1 小时
- 毕业学校
- 武汉理工
|
Hi, 楼主描述的基本正确,但有个地方不对,需要提出说明下:
“DMA_SLAST(CHn)和DMA_DLAST_SGA(CHn)分别为当DMA传输结束后(主循环结束后),对于源地址和目的地址的最终偏移调整值。” 当 DMA_SLAST 设置为0时,下次DMA move 数据时(another major loop begain ),会继续在上次DMA_SADDR后寻址,可能造成DMA_ES中SBE错误。如果 你是想从 SADDR 首部重新开始 move data 到 DADDR, 需要设置 DMA_SLAST = - (SOFF * BITER), 即 减掉 SADDR移动了BITER次SOFF。DAM_DLAST也同理。
另外,“using the module feature”功能也很巧妙,适当设置 ATTR 的 SMOD(2的n次方)。例如PDB 触发ADC1,ADC1的RA,RB轮流保存转换结果。ADC1 触发DMA 轮流,反复读RA, RB;RA, RB ;RA, RB .......到数组中。SOFF=4, SMOD=8;
详见 飞思卡尔社区论坛 讨论贴: https://community.freescale.com/thread/307039, 内附参考代码。
|
|