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

SPI通信下的DMA

SPI数据帧定义为:起始符(4byte)+数据类型(1byte)+数据长度(2byte)+数据+结束符。接收数据时需要先判断起始符是否正确。DMA触发源选择URXIFG时,先判断起始符,再根据数据长度设置DMAxSZ,中间的耗时会影响之后的数据接收。请问有什么其他解决方案呢?

Leon Yan:

SPI DAM 先设置长度为4,中断后判断起始符,确认后然后再设置DMA长度为3,中断后读数据长度,再设置DMA长度,再中断。

中间都为低功耗模式,可能没有比较好的方案。

Triton Zhang:

回复 Leon Yan:

   这个要看具体情况了,不同的情况,处理也不一样.如果楼主确实为这个所困扰,有个方法可以试一下,就是用2个MDA来做个切换。一下仅供参考,楼主要分析自己的系统看是否适合。

1. 从楼主的帧格式分析,帧头部分(起始位[4] + 数据类型[1]+数据长度[2])的长度是固定的,可以为这个设置一个DMA操作。

2. DMA结束后,先直接把数据长度数据长度[2])作为DMA的处理长度,然后在判断帧头数据是否符合协议要求,如果不符合,则关闭DMA。如果符合,则继续操作。

3. 如果楼主要根据数据类型做分支保存接收到的数据,建议先开启一个BUFF,作为公共接收取,判断数据接收完成后在

分派到各个数据区。

4. 如果楼主系统不能按照这个来做,就只有降低spi 速率或增加字间距,为处理留足够的时间.

   我们在进行通信时一般都会遇到类似的问题,如果我们严格按照协议的要求,一步一步操作,往往会因为时间冲突造成数据丢失。所以,在分析系统之前,先就要分析字间距和处理时间,然后找出一个合理的时间分配来处理。

Guo Yan:

回复 Triton Zhang:

mark

simu:

回复 Triton Zhang:

Triton Zhang

   这个要看具体情况了,不同的情况,处理也不一样.如果楼主确实为这个所困扰,有个方法可以试一下,就是用2个MDA来做个切换。一下仅供参考,楼主要分析自己的系统看是否适合。

1. 从楼主的帧格式分析,帧头部分(起始位[4] + 数据类型[1]+数据长度[2])的长度是固定的,可以为这个设置一个DMA操作。

2. DMA结束后,先直接把数据长度数据长度[2])作为DMA的处理长度,然后在判断帧头数据是否符合协议要求,如果不符合,则关闭DMA。如果符合,则继续操作。

3. 如果楼主要根据数据类型做分支保存接收到的数据,建议先开启一个BUFF,作为公共接收取,判断数据接收完成后在

分派到各个数据区。

4. 如果楼主系统不能按照这个来做,就只有降低spi 速率或增加字间距,为处理留足够的时间.

   我们在进行通信时一般都会遇到类似的问题,如果我们严格按照协议的要求,一步一步操作,往往会因为时间冲突造成数据丢失。所以,在分析系统之前,先就要分析字间距和处理时间,然后找出一个合理的时间分配来处理。

赞(0)
未经允许不得转载:TI中文支持网 » SPI通信下的DMA
分享到: 更多 (0)