SPI异步传输使用DMA 问题点

1 问题场景:

  只配置SPI_RX SPI_PT SPI_ERR DMA_RX中断。当发送得数据长度=1时,数据能正常发送并出发PT中断。但是当发送得数据长度>1时,发送完第一个字节后数据不能正常发送,获取SPI状态,一直处于PENDING状态,PT中断不能正常触发,DMA_RX中断也不能正常触发。

2 问题原因:

  为什么发送长度=1时能触发PT,但是长度>1时不能正常触发。 ——原因:

  • 发送长度为1,当调用Spi_AsyncTransmit()发送一个数据后,会自动触发DMA搬运一次数据,此时DMA搬运完数据,数据自动发送完毕,便会直接触发PT。
  • 发送长度>1,当调用Spi_AsyncTransmit()发送一个数据后,会自动触发DMA搬运一次数据,而此时发送长度>1发送完一个数据后,发送第二个数据时,需要通过SPI_TX中断去触发DMA搬运第二个数据,由于没有配置SPI_TX中断,所以发送完一个数据之后,第二个数据没有正常产生TX中断导致DMA没有去搬运数据,导致发送直接在发送完一个数据后一直处于PENDING状态。

3 SPI_TX中断、SPI_RX中断、SPI_PT中断、DMA_RX_CH中断的关系

1、SPI_TX中断和DMA_TX_CH得关系?——SPI_TX_INT在每发送完一个SpiDataWidth后就会触发一次DMA搬运,DMA每次搬运得数据长度=SpiDataWidth。

2、SPI_TX的数据长度与SPI_PT中

  • 10
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值