链表项示例-docker部署python爬虫项目的方法步骤
链表项示例第一个链表项存放在0x20000,定义了要传输的第一个数据块,这个数据块是存放在0x0A200和0x0AE00之间的数据。
-
源起始地址0x0A200
-
目标地址设为目标外设地址
-
传输数据宽度:1个字(32位)
-
传输大小:3072个字节(0xC00)
-
源和地址突发大小:16个传输
-
下个LLI地址:0x20010
如果你想更深入地了解DMA的工作原理,不妨参考这篇详细的介绍:DMA数据传输原理。
第二个链表项存放在0x20010,描述了要传输的下个数据块:
-
源起始地址0x0B200
-
目标地址设为目标外设地址
-
传输数据宽度:1个字(32位)
-
传输大小:3072个字节(0xC00)
-
源和目标突发大小:16个传输
-
下个LLI地址:0x20020
这样,一个链表就形成了,每个链表项都指向链表中的下一个链表项。为了初始化DMA流,需要将第一个链表项(位于0x20000)编程到DMA。当第一个数据包被传输后,下个LLI就自动被装载。对于那些想深入了解如何通过链表控制多通道传输的读者,可以看看这篇文章:DMA多通道配置。
最后一个LLI存放在0x20070,它包含:
-
源起始地址0x11200
-
目标地址设为目标外设地址
-
传输数据宽度:1个字(32位)
-
传输大小:3072个字节(0xC00)
-
源和目标突发大小:16个传输
-
下个LLI地址:0x0
由于下个LLI地址被设为0,因此,这是最后一个描述符,而且,DMA通道在传输完最后这个数据项后被禁能。当然,通道也可能设置成产生中断来向ARM处理器指明通道可以被重新编程了。要掌握更多关于ARM处理器和DMA的知识,不妨看看这个PPT:ARM处理器DMA控制器.ppt。
神奇的DMA,真的是数据传输的魔法师啊!
下载地址
用户评论