1

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

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

4

1 回答 1

2

我最好的方法是这样的:

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

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

于 2013-12-04T05:05:05.933 回答