虽然我对嵌入式编程并不陌生,但我对 Atmel SAM3X 微控制器很陌生。我试图弄清楚是否可以使用 DMA 以 1/4 时钟速率(比可以完成的速度更快)定期将内存映射寄存器(在本例中为 GPIO 端口)中的值读取到缓冲区中通过软件复制或软件触发DMA),然后将缓冲区转入USB DMA,通过USB线发送出去。
我看到 PWM 是可以执行 DMAC“传输”的外设之一,而且我还看到 DMA 通道寄存器对于源地址和源外设标识符有单独的位置。地址和外设标识符是否独立且可能协作?您可以使用 PWM 作为源外设作为时钟分频器,然后从端口数据地址复制吗?如果是这样,如何在寄存器写入方面实现这一点(我要求尝试避免反复试验的需要);如果没有,是否有其他方法以常规高但亚时钟速度对内存位置进行采样?
我知道这是一个迟到的答案。但如果有人偶然发现了这条线索,我想说这是可能的。 PWM 可用于生成 DMA 的“事件”触发器。可以对 PWM 进行编程以生成固定的周期。 DMA 通道应编程为在“事件”触发时写入虚拟占空比值。 PWM 事件触发可以是 PWM 比较条件成功。此 PVM 触发 DMA 的“事件”可用于启动另一个 DMA 通道中的另一次传输,例如通过 DMA 启动 SPI 传输。这是在 SAMV71 中完成并验证的