使用DMA接收数据

时间:2012-12-05 03:12:58

标签: dma

我有一个简单的理论问题。我知道的DMA通常有半满或完全中断。如果我想使用DMA从外设进行数据传输,我怎样才能确保获得所有数据,因为数据可能不在dma传输边界。

例如,串口可能发送5个字节,我会得到并中断前4个组合在一起(假设dma大小为4),但第5个没有。人们通常用什么方法来解决这个问题。

1 个答案:

答案 0 :(得分:2)

我最好的方法是:

  • 设置DMA内存区域。让我们说它的地址是0x2到0x1000
  • 串行设备在此区域中写入字节,作为循环缓冲区
  • 每次串行设备写入时,它都会更新它的“写指针”并以字节0x0和0x1保存
  • PC主机可以写入指针,并与其自己的读指针进行比较。读指针可以保存在PC主机上,完全不处理DMA。然后PC知道要读取多少内存,并且还知道是否存在下溢或溢出。

这应该是你想要的一个很好的起点。