-
初始化和复位:
- 将MM2S_DMACR(DMA Control Register)寄存器的复位位置1,进行软件复位
- 等待复位完成,复位位会自动清零
- 读取MM2S_DMASR(DMA Status Register)寄存器,清除所有中断状态
-
配置DMA控制寄存器:
- 配置MM2S_DMACR寄存器:
- 设置循环模式位(如果需要)
- 启用相关中断(如传输完成中断、错误中断等)
- 配置突发传输长度(如果需要调整默认值)
- 配置MM2S_DMACR寄存器:
-
设置源地址:
- 将源内存地址写入MM2S_SA(Source Address)寄存器
- 注意:地址应该是对齐的,通常是32位或64位对齐
-
配置传输长度:
- 将要传输的字节数写入MM2S_LENGTH寄存器
- 注意:某些DMA控制器可能有最大传输长度限制
-
配置目标流接口:
- 如果使用AXI Stream接口,可能需要配置:
- 数据宽度
- 是否使用TLAST信号
- 数据对齐方式
- 这些配置通常在IP核实例化时完成,但某些可以通过寄存器动态调整
- 如果使用AXI Stream接口,可能需要配置:
-
启动DMA传输:
- 在MM2S_DMACR寄存器中设置RS(Run/Stop)位为1
- 这将触发DMA开始数据传输
-
监控传输状态:
- 轮询MM2S_DMASR寄存器:
- 检查Idle位,确认DMA是否处于空闲状态
- 检查错误位,如IOC_Irq_Set(传输完成中断)、Err_Irq(错误中断)等
- 或者,如果配置了中断,等待中断触发
- 轮询MM2S_DMASR寄存器:
-
处理完成或错误:
- 传输完成:
- 读取MM2S_DMASR确认完成状态
- 清除相关状态标志(通过写1清零)
- 错误处理:
- 如果检测到错误,读取具体的错误状态
- 可能需要重置DMA控制器
- 分析错误原因并采取相应措施(如重新配置、调整参数等)
- 传输完成:
额外注意事项:
- 在开始新的传输前,确保DMA控制器处于空闲状态
- 如果使用缓存,确保在传输前刷新源内存区域的缓存
- 考虑使用DMA链(如果支持),可以实现多个传输请求的自动化处理
- 对于高性能应用,可能需要优化突发长度和其他参数