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中

相关推荐

  1. SPI异步传输使用DMA 问题

    2024-01-09 09:06:01       66 阅读
  2. 什么是AJAX?如何使用AJAX实现异步数据传输

    2024-01-09 09:06:01       43 阅读
  3. ARM DMA使用整理

    2024-01-09 09:06:01       59 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-09 09:06:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-09 09:06:01       100 阅读
  3. 在Django里面运行非项目文件

    2024-01-09 09:06:01       82 阅读
  4. Python语言-面向对象

    2024-01-09 09:06:01       91 阅读

热门阅读

  1. js中alter、confrim、prompt的区别及使用

    2024-01-09 09:06:01       68 阅读
  2. 机器人迎来了chatGPT时刻

    2024-01-09 09:06:01       74 阅读
  3. rknn加载onnx时报错 GLIBC=2.29 no found librknnc.so

    2024-01-09 09:06:01       62 阅读
  4. 阿里云大数据ACA及ACP复习题(101~120)

    2024-01-09 09:06:01       46 阅读
  5. 阿里云大数据ACA及ACP复习题(81~100)

    2024-01-09 09:06:01       36 阅读
  6. SpringBoot 整合 RabbitMQ

    2024-01-09 09:06:01       57 阅读