Thread 中讨论的其他器件:EK-TM4C1294XL
我正在做一些设计可行性工作。 我正在尝试了解 TM4C1290中 UDMA 的性能。 我的主要问题是、我是否有足够的 DMA 性能来跟上从外设端口寄存器进行的异步数据采集的步伐而不丢失任何数据。 因此,我非常想在下一个数据样本到达之前确定通过 DMA 进行数据采集所需的时间。
中央设计是从外设端口寄存器进行读取并传输到循环 RAM 缓冲器进行后处理。 虽然一些采样脉冲之间的时间很短、但平均速率是可以对数据缓冲区进行后台处理的。
我无法使用乒乓、因为我需要通过添加另一个 ISR (用于支持乒乓)来避免干扰现有复杂的中断结构。
因此,我计划使用散聚模式,每次从数据端口传输到缓冲区时,都有一个‘任务’。 我将有一个 N 项循环缓冲器、其中包含一个 N+1任务的并行列表。 每个任务将专用于将数据传输到数据缓冲区中的相应位置。
列表中的最后一个任务(N+1)将重写主控制结构体的控制字段,以便使缓冲区是循环的。 为了方便起见、任务只写入32位控制字段。 我认为、无需在主控制结构体中重写源和指定字段、因为在任务列表运行时它们不会被更改。
问:对这个整体设计有什么意见?
如果您能回答以下问题、我对我的绩效限制的分析将会大大增强。 请在您的回答中参考问题编号。
谢谢!!
散 聚未用场的成本-使用散聚时,似乎有浪费将任务列表中任务的‘未用’场转移到副控制结构体。 换言之,我不得不转移任务的所有4个字(浪费一个读和一个写总线周期),即使只有前3个字是‘live’。 这基于图9-3存储器散聚、设置和配置[DS-TM4C1290NCDT-15863.2743、2014年6月18日]。 在通道控制表的右列中、示例将控制字段列为 items = 12。 实际上有3个任务、每个任务4个字= 12个字。 问题: DMA 控制器是否足够智能、可以跳过第4个(未使用)字段的传输?
DMA 空闲周期-在散聚 DMA 传输期间、DMA 控制器是否插入了任何总线空闲周期? 不同的问题:是否每个可用的总线周期用于将数据传输到(或从) DMA 控制器和传输的区域(或基于 RAM 的控制结构/任务列表)? 应答时、忽略 CPU 占用的所有总线周期。
3.striped RAM -在给定以下假设的情况下、DMA 能否与 CPU 以全速同时运行? 换言之、在以下情况下、DMA 是否会因与 CPU 的总线争用而减慢? 假定:
答: 散聚 DMA 模式用于将数据从外设传输到 RAM 缓冲器。
b. DMA 使用的所有 RAM 都位于 RAM 的条带区部分的专用部分(如上季度)、包括:
一. 主要控制结构。
二 副控制结构体。
三 任务列表。
四. 目标 RAM 缓冲器。
c. 在 DMA 运行时,CPU 永远不会访问 DMA 条带区中的任何 RAM。
d. 忽略 CPU 和 DMA 之间访问外设的任何潜在偶尔争用。
外 设总线-访问外设时、DMA 是否必须等待 CPU 有一个空闲总线周期? 不同的问题:只要 CPU 不同时访问外设、访问外设时 DMA 是否不会延迟? 问题的关键在于:是否有一个与主闪存存储器总线分离(并与之并行)的外设总线?
5. 读取源和目的字段的频率-在 DMA 传输期间、从 RAM 控制结构读取源和目的字段的频率是多少? 我认为答案可能是以下之一。 哪一个? (或者、还有其他答案吗?)
a: 在 DMA 传输启动期间、这些字段被读取一次。 在丢失通道仲裁并随后重新获得通道仲裁后、不会重新加载这些字段。 换言之、DMA 控制器在重新获得仲裁后会在内部记住这些字段以恢复信道。
b. 在 DMA 传输启动期间、这些字段被读取一次。 在恢复因失去通道仲裁而中断的传输后、这些字段将再次被读取。 换句话说、如果通道失去仲裁、DMA 控制器将会忘记这些字段。
c. 在 DMA 传输启动期间读取这些字段一次。 每个通道仲裁后、这些字段将被再次读取。 即使当前通道未丢失仲裁、也会重新加载。
d. 源字段在从传输的存储器区域的每个读取周期之前被重新读取。 在每个到被传输内存区域的写入周期之前、目的字段被重新读取。 换句话说、在数据传输之间、源和目的不在 DMA 控制器内部维护。
控制 字段的写入频率-在 DMA 传输期间、控制字段被写回 RAM 控制结构体的频率是多少? 我认为答案可能是以下之一。 哪一个? (或者、还有其他答案吗?)
a: 只有当信道在一次总线传输后失去仲裁时、控制字段才会被写入。
b: 控制字段在猝发传输中传输的数据的每个存储器写周期后写入。 在包含 N 个项目的"降压"传输期间、控制字段将写入 N 次。
控制 字段的读取频率–在 DMA 传输期间、从 RAM 控制结构体读取控制字段的频率是多少? 我认为答案可能是以下之一。 哪一个? (或者、还有其他答案吗?)
a. 在 DMA 传输启动期间、控制字段被读取一次。 即使在丢失并随后重新获得通道仲裁之后、控制字段也不会再次被读取。 换言之、DMA 控制器在重新获得仲裁后内部将记住该字段以恢复通道。
b. 在 DMA 传输启动期间、控制字段被读取一次。 恢复因失去通道仲裁而中断的传输后,通道的控制字段将再次被读取。
c. 在 DMA 传输启动期间、控制字段被读取一次。 在每次通道仲裁后、即使仲裁没有丢失、控制字段也会被再次读取。
场景:在散聚模式下、在副控制结构体中运行一个任务、并准备好将下一个任务加载到副控制结构体中。 主控制结构体在下一个任务从任务列表到副控制结构体的 DMA 之前是否重新载入 DMA 控制器? 或者、主控制结构体在运行副控制结构体时是否在 DMA 控制器内部记忆?