您好!
当 CPU 将8个字节的数据从 SRAM 复制到 SRAM (不同的源地址和目标地址)时会发生什么情况、与此同时、由 CAN 发起的 DMA 硬件传输将数据从 CAN 寄存器空间复制到 CPU 正在执行复制操作的相同源地址。
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
您好!
当 CPU 将8个字节的数据从 SRAM 复制到 SRAM (不同的源地址和目标地址)时会发生什么情况、与此同时、由 CAN 发起的 DMA 硬件传输将数据从 CAN 寄存器空间复制到 CPU 正在执行复制操作的相同源地址。
您好 Arshhad、
如果软件 DMA 请求和 CAN DMA 请求使用相同的 DMA 通道、则 CAN DMA 请求将被捕获到请求缓冲区中、并在软件 DMA 请求完成后提供服务。
2.如果它们使用不同的通道,映射到较低 DMA 通道的请求具有较高的优先级。 如果用于软件请求的 DMA 通道(例如 CH0)低于 CAN DMA 请求(例如 CH5)、则在 CH0处的软件请求完成之前、不会处理 CH5处的 DCAN DMA 请求。
如果软件请求通道(例如 CH5)高于 DCAN 请求(CH0)、当 DCAN DMA 请求被触发时、CH5上的软件 DMA 将被仲裁、直到 DCAN DMA 请求完成。
QJ Wang、您好!
我想你以错误的方式打断了我的问题。 您对软件 DMA 和硬件 DMA 的解释很清楚。 但是、这个答案与所提出的问题不符。 我会再次尝试解释这个问题。
当 CPU 使用 CPU 存储器复制函数在没有 DMA 软件请求的情况下将8字节数据从 SRAM 复制到 SRAM (不同的源地址和目标地址)时、会发生什么情况、 由 CAN 发起的 DMA 硬件传输至 DMA、用于将数据从 CAN 寄存器空间复制到 CPU 使用存储器复制功能执行复制操作的同一源地址。
假设 DMA 的配置如下:
当发生硬件 CAN 事件时、HW DMA 使用的帧计数为8个字节中的1个、并进行帧传输、而不是块传输。
或
我将尝试以不同的方式提出问题。
DMA 的配置方式是复制8个字节、而 CPU 总线访问不能不中断这些字节。
此致、
Arshad Ziyad
您好 Arshhad、
我很抱歉对你的问题有误解。 我想您也可以使用 DMA 将数据从一个 SRAM 地址复制到另一个 SRAM 位置。
为了回答您的问题、我在另一个主题中引用 Sunil 的评论:
Hercules 器件架构旨在最大限度地减少这些仲裁条件。 CPU SRAM 互连被设计成只有当 CPU 和 DMA 在同一周期内访问同一个64位地址时、一个仲裁条件才存在。 在极少数情况下、CPU 和 DMA (或其他总线主控)在同一周期内访问相同的64位 SRAM 位置、读取访问将被一个 CPU 时钟周期延迟、以允许写入访问首先完成。
通常情况下、对可用 SRAM 进行分区、这样就不会发生类似的仲裁条件。 DMA 控制器确实提供了几个中断条件、CPU 可以使用这些中断条件来避免运行在您描述的情况下:帧传输完成、最后一帧传输开始、半块传输完成、块传输完成。