我想在由下降沿 GPIO 输入触发的 LPSPI3 上触发 25 字节 DMA 数据传输。
我正在使用:MCUXpresso IDE v11.4.1 [Build 6260] [2021-09-15] 工具链
并在 IMXRT1060 EVKB
开发板上工作。(请注意,我确实添加了所需的电阻来支持 Arduino 引脚连接(J17-4、J17-5 和 J17-6)
我已经映射了 LPSPI3 引脚:
* MOSI J23-23
* MISO J23-7
* CLK J23-21
* CS J23-22
我有一个信号发生器向 Arduino 引脚发送 3.3V 方波脉冲:J17-6 GPIO_SD_B0_00
(配置为使用 XBAR1_INOUT4)
为了确认我的信号存在,我将此信号镜像到 Arduino 引脚:J17-5 GPIO_SD_B0_03
(配置为使用 XBAR1_INOUT6)
我有我的 XBAR 输出 3 来启动 DMA 通道 8 来设置/清除 GPIO 引脚:J17-4 GPIO_SD_B0_02
对 GPIO_SD_B0_02 执行设置/清除操作的通道 8 也被链接以启动 LPSPI3 数据传输,而该数据传输又更改为通道 7 以设置 GPIO 引脚。
可以从以下 GitHub 存储库分支开发中找到并加载示例代码:
https://github.com/tsbiberdorf/SPI3-DMA-FromGPIO.git
通过向 EVKB 板上的 UART 端口输入一个字符来运行示例代码。
可以通过发出字符“6”来运行此测试。此示例代码中提供了其他测试,如果您想运行它们,请阅读说明,但我在这里关注的是测试“6”。
在此测试中,我将 XBAR1 配置为接收下降沿 GPIO 信号 (P17-6)。然后 XBAR1 将在 XBAR1_INOUT3 上输出 DMA 操作以启动 DMA0 通道 8。
DMA0-ch8 将清除 P17-4,然后它应该启动 DMA0-ch6 以从 LPSPI3 外设执行 25 字节 DMA 操作。传输完成后,它将激活 DMA0-ch7 以设置引脚 P17-4。
DMA0-ch5 已配置为读取从 LPSPI3 总线接收到的所有数据。它还会在完成时调用 IRQ complete。
DMA0-ch7 将被调用以设置 Arduino 引脚 P17-4 以发出数据传输已完成的信号。
我无法弄清楚的一个主要问题是为什么 SPI3 传输的一部分发生在我的测试“6”开始时,然后当 dma ch8 完成时它不会再次开始?我的猜测是 SPI3 外设被锁定了,但我不确定为什么或如何修复它。
有人可以帮助解释我做错了什么吗?