首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

DMA双缓冲传输具体实现

DMA双缓冲传输具体实现

双缓冲,也有人叫乒乓缓冲.因为一般情况下,串口的数据DMA 传输进BUF1 的过程中,是不建议对
  BUF1 进行操作的.但由于串口数据是不会等待的直传,所以你总不能等BUF1 满了,
  才往FLASH 上写,因为这时候串口数据依旧是源源不断.于是,使用双缓冲就变的理
  所当然了.当BUF1 满了的时候,就马上设置DMA的目标为BUF2,并且BUF1的数据
  往25F080上灌.当串口DMA写满了BUF2的时候,再设置DMA的目标为BUF1,此时
  再操作BUF2写进25F080.如此一直循环,就好像打乒乓球那样吧,所以就叫乒乓缓冲.
  用这个方法,你必须确保两点:
a.DMA 灌满了BUF1的时候,会发生中断,此时切换DMA 的目标缓冲为BUF2,而且切换的过程必须在新的串口数据溢出之前完成.
b.在DMA的BUF1满之前,另外一个有数据的BUF2必须能全部写进25F080,其中包括了遇到新的扇区边界而要刷除扇区的操作时间!!
  可以看出,BUF的增大,并不能够很大程度的提升速度极限.
继承事业,薪火相传
返回列表