我一直在使用 DMA 在一对以16MHz 运行的 MSP430FR5969 LaunchPad 套件主/从(MCLK 和 SMCLK)之间进行全双工 SPI 传输。 最终、我将使用非 MSP 主设备和 MSP430FR5969从设备之间的需要全双工 SPI 通信。 MSP430在2.67MHz 至3.2MHz 的位速率范围内正常工作、然后开始分解。 我注意到、当我向上发送时钟时、主器件正在发送额外的字节。 我找不到任何确定的最大 SPI 速度、但我认为它应该在高达8MHz 的频率下工作(我在 DMA 中使用的其他一些控制器在一半的系统时钟速率下没有问题)。 我已经使用协议分析器验证了额外的字节。
现在、无论以何种速率、我都只将主器件连接到协议分析器。 我将使用一个4字节的缓冲区进行测试。 时钟频率为16MHz、分频值为8、7和6时、MSP430发送4个字节。 在位速率分频值为5、4和3的情况下、MSP430发送5个字节、当分频值为2时、它发送7个字节。 主器件处于3线制模式、当我改变位速率分频值时、我确实将 DMA 保持在复位状态。
我很难理解的是、为什么 MSP430发送的字节会比它应该发送的字节多。
我可以理解速度限制(仍然不确定应该是什么)、我需要一个8MHz 全双工链路、从我可以告诉 DMA 需要2个时钟来存储数据(每字节8个)、并且有一个发送/接收缓冲器。
我已经尝试了几种启动传输的方法(初始写入 SPI Tx 和切换 Tx IFG)、只要您在写入 Tx 寄存器时进行大小调整、这两种方法都能正常工作。
我可以动态更改消息和之间的位速率、并且我的全双工设置在6-8分频时继续正常工作。 永远运行、我还在一个实现方案上实现了校验和、以确保不会发生其他奇怪的情况。
我可以共享的最小代码/项目集。 如果有人提出建议,我会很乐意尝试。 希望它只是一个简单的东西。
此致