TI中文支持网
TI专业的中文技术问题搜集分享网站

MSP432P4111用SPI通过DMA收发导致DMA挂死

请问一下SPI用DMA搬数据的时候,除了DMA最多1024个8位数据大小限制以外,SPI和DMA还有其他什么限制吗

Susan Yang:

您之前提问的帖子的相关问题?

e2echina.ti.com/…/591995

您现在是遇到了什么问题?E2E上有一些SPI DMA的相关帖子,您可以先参考一下

e2e.ti.com/…/453110

user6340167:

回复 Susan Yang:

您好,我现在问题还是偶尔会卡死SPI_Transfer这个函数,之前是因为超出了限制,最近出现的情况还没有明确,怀疑是SPI使用DMA时,DMA出错,未产生相应的中断。现在使用的时CH4tx和CH5rx,当出错了时,DMA寄存器的DMA_CH5_SRCCFG会从0x00000000变成0x00000002,请问这是什么错误会导致这个现象?

user6340167:

回复 Susan Yang:

您好,又经过一番查看,发现DMA_ENACLR寄存器CH5位被至高,通过查手册发现:在以下情况下,控制器通过设置适当的位来禁用通道:
a)完成DMA周期
b)读取channel_cfg内存位置,其位置为cycle_ctrl =
b000
c)AHB-Lite总线上发生错误。
请问这三种情况都会在什么情况下会发生?

user6340167:

回复 Susan Yang:

您好,我重新描述一下我现在问题状态,SPI_Transfer卡死以后,发现SPI寄存器里面的UCTXIFG是1,请问一下SPI的收发中断是DMA给的嘛?
是不是DMA崩掉导致没有给中断,SPI就一直在等的状态,呈现出这种假死的状态?

user6340167:

回复 Susan Yang:

并且DMA的寄存器的DMA_ENASET里显示CH4(发送通道)为0,CH5(接收通道)为1,个人感觉没有正常启动DMA

user6340167:

回复 Susan Yang:

您好,经过一些尝试以后,使用SPI自带的timeout功能后,能再次运行程序,但之后收到数据会错一两位,请问这个数据错位是DMA没有复位导致的嘛?有什么推荐的解决方案嘛?

Susan Yang:

回复 user6340167:

建议将SPI模块的使能移到配置DMA之后。一旦启用了SPI,TXIFG将自动设置,从而触发DMA

下面的示例显示了同时用于ADC(通道7)和SPI(通道0)的DMA。在这两种情况下,DMA都处于“basic”模式,并且在每个DMA周期完成之后,DMA都会重新初始化以执行下一个事务。

MSP432_DMA_ADC_SPI.c

 

user6340167:

回复 Susan Yang:

好的,我先尝试一下,谢谢

Susan Yang:

回复 user6340167:

期待您的反馈

赞(0)
未经允许不得转载:TI中文支持网 » MSP432P4111用SPI通过DMA收发导致DMA挂死
分享到: 更多 (0)