我需要为SPI配置DMA。 我正在使用 S32DS IDE 和 RTD 3.0,请问有人能告诉我如何通过 SPI 启动 DMA 吗?最好能提供详细的步骤说明或示例代码。 Re: I need to configure DMA for SPI 谢谢你的回复 请对 s32k322 MCU 执行此操作 Re: I need to configure DMA for SPI 嗨@ershi
RTD 附带两个使用 DMA 进行 SPI 通信的示例代码,一个使用低级驱动程序 (Ip),一个使用高级驱动程序 (MCAL)。您可以参考主题HOWTO: S32 Design Studio - 从示例创建新的 S32DS 项目,以获取有关如何导入示例的指导。
另外,您可以参考主题“示例 S32K31 SPI 多数据包发送和接收:DMA 缓存问题的解决方案”中提供的示例。
BR,VaneB Re: I need to configure DMA for SPI 嗨@ershi
虽然这些示例并非专门为 S32K322 设计,但除非参考手册另有说明,否则其功能在 S32K3 系列中通常相同。因此,您可以将此项目作为您实现的参考,并根据您的特定设备进行必要的调整。 Re: I need to configure DMA for SPI 我已经配置好了一切,但它仍然无法正常工作。第一次调用 (Lpspi_Ip_AsyncTransmit) 时返回 LPSPI_IP_STATUS_SUCCESS,第二次调用时返回失败 LPSPI_IP_STATUS_FAIL。我可以使用这个 API 通过 SPI 发送数据,而无需使用 DMA 调用 Lpspi_Ip_SyncTransmit()。我附上了一些配置截图。 Re: I need to configure DMA for SPI 嗨@ershi
能否也分享一下RM和IntCtrl_Ip驱动程序的配置图片? Re: I need to configure DMA for SPI 嗨@VaneB 我已附上 RM 和 IntCtrl_IP 驱动程序配置的屏幕截图,以及一段简短的视频片段,供您详细参考。 我注意到LPSPI配置页面中有一处不同。在SPI常规选项卡中, Spi_Phy_TxDmaChannel下的命名在TX和RX配置中有所不同。 如果您需要任何其他详细信息,请告诉我。 InterruptsInterruptsInterruptsInterruptsInterruptsInterruptsInterrupts打断 RMRMRMRMRMRMRMRM Re: I need to configure DMA for SPI 嗨@ershi
感谢您分享所有信息。
我只有一点看法。在 Dma_Ip 驱动程序配置中,您已将 DMA_SPI_CALLBACK_0 定义为中断回调。然而,LPSPI DMA 回调函数已由驱动程序提供,可以在 Lpspi_Ip_Irq.c 文件中找到。文件。
对于 LPSPI2,配置的回调函数应为:
TX DMA 通道的 Lpspi_Ip_LPSPI_2_IrqTxDmaHandler
RX DMA 通道的 Lpspi_Ip_LPSPI_2_IrqRxDmaHandler
Re: I need to configure DMA for SPI 嗨@ershi
请问您是如何实现SPI通信的?另外,您是否测试过我之前分享的示例代码? Re: I need to configure DMA for SPI 嗨@VaneB 谢谢你的解释。 我更新了 Dma_Ip 配置,以便对于 LPSPI2,TX 和 RX DMA 通道现在使用 Lpspi_Ip_Irq.c 中的回调函数: TX DMA 通道的 Lpspi_Ip_LPSPI_2_IrqTxDmaHandler NXP RX DMA 通道的 Lpspi_Ip_LPSPI_2_IrqRxDmaHandler 然而,在我这边,基于 DMA 的 LPSPI 传输仍然没有按预期工作。我附上了当前配置的截图供您参考。如果还有其他设置需要调整,请告诉我。 Re: I need to configure DMA for SPI 嗨@ershi
您是将 LPSPI2 SOUT 信号直接连接到 SIN,还是使用逻辑分析仪来验证发送和接收的数据? Re: I need to configure DMA for SPI 嗨@VaneB 我已经删除了之前的配置,现在SPI数据正在通过DMA传输,但问题是数据不匹配。 #define RX_MSG_SIZE (15U) #define TX_MSG_SIZE (15U) uint8_t txBuffer_check[TX_MSG_SIZE] = {0x48,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x10,0x11,0x12,0x13,0x14,0x15}; uint8_t rxBuffer_check[]={0}; if(Lpspi_Ip_AsyncTransmit(&Lpspi_Ip_DeviceAttributes_SpiExternalDevice_1_Instance_2_BOARD_InitPeripherals,txBuffer_check,rxBuffer_check,TX_MSG_SIZE,spi_DMA_Function) == LPSPI_IP_STATUS_SUCCESS) { Dma_Ip_ReturnType 状态 = {0},状态1 = {0}; Dma_Ip_LogicChannelStatusType channelStatus ={0},channelStatus1 ={0}; status = Dma_Ip_GetLogicChannelStatus(DMA_LOGIC_CH_0,&channelStatus); status1 = Dma_Ip_GetLogicChannelStatus(DMA_LOGIC_CH_1,&channelStatus1); 返回 SYS_SUCCESS; } Re: I need to configure DMA for SPI 嗨@VaneB , 我已经重写了代码,现在运行完美。数据输入正确。 谢谢你的帮助。
查看全文